Bounds fixes

This commit is contained in:
Ugljesa Jovanovic 2020-05-14 23:12:22 +02:00 committed by Ugljesa Jovanovic
parent 3519d2240f
commit 6c92936c5d
No known key found for this signature in database
GPG Key ID: 178E6DFCECCB0E0F

View File

@ -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)