Bounds fixes
This commit is contained in:
parent
3519d2240f
commit
6c92936c5d
@ -104,9 +104,8 @@ class Argon2 internal constructor(
|
|||||||
xorWithCurrentBlock: Boolean
|
xorWithCurrentBlock: Boolean
|
||||||
): Array<UByte> {
|
): Array<UByte> {
|
||||||
val r = x xor y
|
val r = x xor y
|
||||||
println("R = X xor Y")
|
// println("R = X xor Y")
|
||||||
r.hexColumsPrint(16)
|
// r.hexColumsPrint(16)
|
||||||
// Xor works in first pass!
|
|
||||||
// val r = Array<UByte>(1024) { 0U } // view as 8x8 matrix of 16 byte registers
|
// val r = Array<UByte>(1024) { 0U } // view as 8x8 matrix of 16 byte registers
|
||||||
// x.forEachIndexed { index, it -> r[index] = it xor y[index] } // R = X xor Y
|
// x.forEachIndexed { index, it -> r[index] = it xor y[index] } // R = X xor Y
|
||||||
val q = Array<UByte>(1024) { 0U }
|
val q = Array<UByte>(1024) { 0U }
|
||||||
@ -122,11 +121,10 @@ class Argon2 internal constructor(
|
|||||||
.toTypedArray()
|
.toTypedArray()
|
||||||
.copyInto(q, startOfRow)
|
.copyInto(q, startOfRow)
|
||||||
}
|
}
|
||||||
println("---- Q -----")
|
// println("---- Q -----")
|
||||||
q.hexColumsPrint(16)
|
// q.hexColumsPrint(16)
|
||||||
// Do the argon/blake2b mixing on columns
|
// Do the argon/blake2b mixing on columns
|
||||||
for (i in 0..7) {
|
for (i in 0..7) {
|
||||||
println("Z round ${i}")
|
|
||||||
copyIntoGBlockColumn(
|
copyIntoGBlockColumn(
|
||||||
z,
|
z,
|
||||||
i,
|
i,
|
||||||
@ -136,17 +134,17 @@ class Argon2 internal constructor(
|
|||||||
.toTypedArray()
|
.toTypedArray()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
println("---- Z -----")
|
// println("---- Z -----")
|
||||||
z.hexColumsPrint(16)
|
// z.hexColumsPrint(16)
|
||||||
val final = if (xorWithCurrentBlock) {
|
val final = if (xorWithCurrentBlock) {
|
||||||
println("Z xor R xor CURRENT")
|
// println("Z xor R xor CURRENT")
|
||||||
(z xor r) xor ((x xor y) xor currentBlock)
|
(z xor r) xor ((x xor y) xor currentBlock)
|
||||||
} else {
|
} else {
|
||||||
println("Z xor R")
|
// println("Z xor R")
|
||||||
z xor r
|
z xor r
|
||||||
}
|
}
|
||||||
|
|
||||||
final.hexColumsPrint(16)
|
// final.hexColumsPrint(16)
|
||||||
return final
|
return final
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -160,11 +158,8 @@ class Argon2 internal constructor(
|
|||||||
|
|
||||||
private fun copyIntoGBlockColumn(gBlock: Array<UByte>, columnPosition: Int, columnData: Array<UByte>) {
|
private fun copyIntoGBlockColumn(gBlock: Array<UByte>, columnPosition: Int, columnData: Array<UByte>) {
|
||||||
for (i in 0..7) {
|
for (i in 0..7) {
|
||||||
println("Mixed column data ${i}")
|
|
||||||
val column = columnData.copyOfRange(i * 16, i * 16 + 16)
|
val column = columnData.copyOfRange(i * 16, i * 16 + 16)
|
||||||
column.hexColumsPrint(16)
|
|
||||||
column.copyInto(gBlock, i * 128 + columnPosition * 16)
|
column.copyInto(gBlock, i * 128 + columnPosition * 16)
|
||||||
// gBlock[i * 8 + columnPosition] = columnData[i]
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -172,7 +167,6 @@ class Argon2 internal constructor(
|
|||||||
//based on Blake2b mixRound
|
//based on Blake2b mixRound
|
||||||
internal fun mixRound(input: Array<UByte>): Array<ULong> {
|
internal fun mixRound(input: Array<UByte>): Array<ULong> {
|
||||||
var v = input.chunked(8).map { it.fromLittleEndianArrayToULong() }.toTypedArray()
|
var v = input.chunked(8).map { it.fromLittleEndianArrayToULong() }.toTypedArray()
|
||||||
v.forEach { println(it.toString(16)) }
|
|
||||||
v = mix(v, 0, 4, 8, 12)
|
v = mix(v, 0, 4, 8, 12)
|
||||||
v = mix(v, 1, 5, 9, 13)
|
v = mix(v, 1, 5, 9, 13)
|
||||||
v = mix(v, 2, 6, 10, 14)
|
v = mix(v, 2, 6, 10, 14)
|
||||||
@ -181,7 +175,6 @@ class Argon2 internal constructor(
|
|||||||
v = mix(v, 1, 6, 11, 12)
|
v = mix(v, 1, 6, 11, 12)
|
||||||
v = mix(v, 2, 7, 8, 13)
|
v = mix(v, 2, 7, 8, 13)
|
||||||
v = mix(v, 3, 4, 9, 14)
|
v = mix(v, 3, 4, 9, 14)
|
||||||
v.hexColumsPrint(2)
|
|
||||||
return v
|
return v
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -319,8 +312,8 @@ class Argon2 internal constructor(
|
|||||||
val l = if (iteration == 0 && slice == 0) {
|
val l = if (iteration == 0 && slice == 0) {
|
||||||
lane
|
lane
|
||||||
} else {
|
} else {
|
||||||
val lol = (j2.toBigInteger() % parallelism).intValue()
|
(j2.toBigInteger() % parallelism).intValue()
|
||||||
lol
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//From Argon 2 2020 draft
|
//From Argon 2 2020 draft
|
||||||
@ -377,7 +370,9 @@ class Argon2 internal constructor(
|
|||||||
(slice + 1) * (columnCount / 4) //TODO replace all of these with segment length when consolidating variables
|
(slice + 1) * (columnCount / 4) //TODO replace all of these with segment length when consolidating variables
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if ( (startPosition + z.toInt()) % columnCount == -1) {
|
||||||
|
println("Debug")
|
||||||
|
}
|
||||||
val absolutePosition = (startPosition + z.toInt()) % columnCount
|
val absolutePosition = (startPosition + z.toInt()) % columnCount
|
||||||
|
|
||||||
return Pair(l, absolutePosition)
|
return Pair(l, absolutePosition)
|
||||||
@ -479,9 +474,9 @@ class Argon2 internal constructor(
|
|||||||
h0 + 0.toUInt().toLittleEndianUByteArray() + i.toUInt().toLittleEndianUByteArray(),
|
h0 + 0.toUInt().toLittleEndianUByteArray() + i.toUInt().toLittleEndianUByteArray(),
|
||||||
1024U
|
1024U
|
||||||
)
|
)
|
||||||
println("Start, matrix [$i][0]")
|
// println("Start, matrix [$i][0]")
|
||||||
matrix[i][0].hexColumsPrint(16)
|
// matrix[i][0].hexColumsPrint(16)
|
||||||
println("Marker, matrix [$i][0]")
|
// println("Marker, matrix [$i][0]")
|
||||||
}
|
}
|
||||||
|
|
||||||
//Compute B[i][1]
|
//Compute B[i][1]
|
||||||
@ -491,9 +486,9 @@ class Argon2 internal constructor(
|
|||||||
h0 + 1.toUInt().toLittleEndianUByteArray() + i.toUInt().toLittleEndianUByteArray(),
|
h0 + 1.toUInt().toLittleEndianUByteArray() + i.toUInt().toLittleEndianUByteArray(),
|
||||||
1024U
|
1024U
|
||||||
)
|
)
|
||||||
println("Start, matrix [$i][1]")
|
// println("Start, matrix [$i][1]")
|
||||||
matrix[i][1].hexColumsPrint(16)
|
// matrix[i][1].hexColumsPrint(16)
|
||||||
println("Marker, matrix [$i][1]")
|
// println("Marker, matrix [$i][1]")
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---- Good until here at least ----
|
// ---- Good until here at least ----
|
||||||
@ -556,7 +551,7 @@ class Argon2 internal constructor(
|
|||||||
compressionFunctionG(matrix[lane][column - 1], matrix[l][z], matrix[lane][column], false)
|
compressionFunctionG(matrix[lane][column - 1], matrix[l][z], matrix[lane][column], false)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (column in (slice * segmentLength)..((slice + 1) * segmentLength)) {
|
for (column in (slice * segmentLength) until ((slice + 1) * segmentLength)) {
|
||||||
val (l, z) = computeIndexNew(
|
val (l, z) = computeIndexNew(
|
||||||
matrix,
|
matrix,
|
||||||
lane,
|
lane,
|
||||||
@ -573,10 +568,10 @@ class Argon2 internal constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
val (l, z) = computeIndexNew(matrix, lane, 0, columnCount, parallelism.toInt(), 0, 0, type)
|
val (l, z) = computeIndexNew(matrix, lane, 0, columnCount, parallelism.toInt(), iteration, slice, type)
|
||||||
matrix[lane][0] = compressionFunctionG(matrix[lane][columnCount - 1], matrix[l][z], matrix[lane][columnCount], true)
|
matrix[lane][0] = compressionFunctionG(matrix[lane][columnCount - 1], matrix[l][z], matrix[lane][0], true)
|
||||||
for (column in 1..(slice * segmentLength)) {
|
for (column in 1..(slice * segmentLength)) {
|
||||||
val (l, z) = computeIndexNew(matrix, lane, column, columnCount, parallelism.toInt(), 0, 0, type)
|
val (l, z) = computeIndexNew(matrix, lane, column, columnCount, parallelism.toInt(), iteration, slice, type)
|
||||||
println("Calling compress for I: $iteration S: $slice Lane: $lane Column: $column with l: $l z: $z")
|
println("Calling compress for I: $iteration S: $slice Lane: $lane Column: $column with l: $l z: $z")
|
||||||
matrix[lane][column] =
|
matrix[lane][column] =
|
||||||
compressionFunctionG(matrix[lane][column - 1], matrix[l][z], matrix[lane][column], true)
|
compressionFunctionG(matrix[lane][column - 1], matrix[l][z], matrix[lane][column], true)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user