refactor HashFunction
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
package com.infendro.hash.sha2
|
||||
|
||||
import com.infendro.bytearray.addAll
|
||||
import com.infendro.bytearray.toByteArray
|
||||
import com.infendro.bytearray.toUByteArray
|
||||
import com.infendro.bytearray.toUIntArray
|
||||
import com.infendro.hash.HashFunction
|
||||
|
||||
@@ -10,7 +9,7 @@ object `SHA-256` : HashFunction() {
|
||||
override val bytes: Int
|
||||
get() = 32
|
||||
|
||||
private val k = arrayOf(
|
||||
private val k = uintArrayOf(
|
||||
0x428a2f98U, 0x71374491U, 0xb5c0fbcfU, 0xe9b5dba5U, 0x3956c25bU, 0x59f111f1U, 0x923f82a4U, 0xab1c5ed5U,
|
||||
0xd807aa98U, 0x12835b01U, 0x243185beU, 0x550c7dc3U, 0x72be5d74U, 0x80deb1feU, 0x9bdc06a7U, 0xc19bf174U,
|
||||
0xe49b69c1U, 0xefbe4786U, 0x0fc19dc6U, 0x240ca1ccU, 0x2de92c6fU, 0x4a7484aaU, 0x5cb0a9dcU, 0x76f988daU,
|
||||
@@ -22,8 +21,8 @@ object `SHA-256` : HashFunction() {
|
||||
)
|
||||
|
||||
override fun hash(
|
||||
value: ByteArray,
|
||||
): ByteArray {
|
||||
value: UByteArray,
|
||||
): UByteArray {
|
||||
var h0 = 0x6a09e667U
|
||||
var h1 = 0xbb67ae85U
|
||||
var h2 = 0x3c6ef372U
|
||||
@@ -36,15 +35,15 @@ object `SHA-256` : HashFunction() {
|
||||
|
||||
val paddedValue = buildList {
|
||||
addAll(value)
|
||||
add(0x80.toByte())
|
||||
add(0x80U)
|
||||
while (size % 64 != 56) {
|
||||
add(0x00.toByte())
|
||||
add(0x00U)
|
||||
}
|
||||
addAll(ml.toByteArray())
|
||||
addAll(ml.toUByteArray())
|
||||
}
|
||||
|
||||
val chunks = paddedValue
|
||||
.chunked(64)
|
||||
.chunked(64) { it.toUByteArray() }
|
||||
for (chunk in chunks) {
|
||||
val w = buildList {
|
||||
addAll(chunk.toUIntArray())
|
||||
@@ -92,15 +91,15 @@ object `SHA-256` : HashFunction() {
|
||||
h7 += h
|
||||
}
|
||||
|
||||
return byteArrayOf(
|
||||
*h0.toByteArray(),
|
||||
*h1.toByteArray(),
|
||||
*h2.toByteArray(),
|
||||
*h3.toByteArray(),
|
||||
*h4.toByteArray(),
|
||||
*h5.toByteArray(),
|
||||
*h6.toByteArray(),
|
||||
*h7.toByteArray(),
|
||||
return ubyteArrayOf(
|
||||
*h0.toUByteArray(),
|
||||
*h1.toUByteArray(),
|
||||
*h2.toUByteArray(),
|
||||
*h3.toUByteArray(),
|
||||
*h4.toUByteArray(),
|
||||
*h5.toUByteArray(),
|
||||
*h6.toUByteArray(),
|
||||
*h7.toUByteArray(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user