This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
package com.infendro.hash.blake
|
||||
|
||||
import com.infendro.bytes.bytearray.toLongArray
|
||||
import com.infendro.bytes.long.copyInto
|
||||
import com.infendro.bytes.longarray.copyInto
|
||||
import com.infendro.bytes.ulong.copyInto
|
||||
import com.infendro.hash.HashFunction
|
||||
import com.infendro.hash.util.align
|
||||
|
||||
@@ -45,13 +45,13 @@ object `Blake-512` : HashFunction {
|
||||
)
|
||||
|
||||
override fun hashInto(value: ByteArray, destination: ByteArray, destinationOffset: Int) {
|
||||
val length = value.size.toULong() * 8UL
|
||||
val length = value.size * 8L
|
||||
val input = pad(value)
|
||||
val h = initial.copyOf()
|
||||
var t = 0UL
|
||||
var t = 0L
|
||||
|
||||
for (i in input.indices step block) {
|
||||
t += minOf(length - t, 1024UL)
|
||||
t += minOf(length - t, 1024)
|
||||
val block = input.sliceArray(i..<(i + block))
|
||||
compress(h, block, t)
|
||||
}
|
||||
@@ -59,23 +59,23 @@ object `Blake-512` : HashFunction {
|
||||
}
|
||||
|
||||
private fun pad(value: ByteArray): ByteArray {
|
||||
val length = value.size.toULong() * 8UL
|
||||
val length = value.size * 8L
|
||||
|
||||
val size = (value.size + 18).align(block)
|
||||
return ByteArray(size).also {
|
||||
value.copyInto(it)
|
||||
it[value.size] = 0x80U.toByte()
|
||||
it[value.size] = -0x80
|
||||
it[size - 17] = 0x01
|
||||
length.copyInto(it, size - 8)
|
||||
}
|
||||
}
|
||||
|
||||
internal fun compress(h: LongArray, block: ByteArray, t: ULong) {
|
||||
internal fun compress(h: LongArray, block: ByteArray, t: Long) {
|
||||
val m = block.toLongArray()
|
||||
val v = LongArray(16)
|
||||
for (i in 0..<8) v[i] = h[i]
|
||||
for (i in 0..<4) v[i + 8] = c[i]
|
||||
for (i in 0..<2) v[i + 12] = c[i + 4] xor t.toLong()
|
||||
for (i in 0..<2) v[i + 12] = c[i + 4] xor t
|
||||
for (i in 0..<2) v[i + 14] = c[i + 6]
|
||||
|
||||
repeat(16) { r ->
|
||||
|
||||
Reference in New Issue
Block a user