refactor HashFunction

This commit is contained in:
2025-11-10 14:26:41 +01:00
parent e3619a2df1
commit e7e43f9cca
15 changed files with 115 additions and 126 deletions

View File

@@ -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-224` : HashFunction() {
override val bytes: Int
get() = 28
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-224` : HashFunction() {
)
override fun hash(
value: ByteArray,
): ByteArray {
value: UByteArray,
): UByteArray {
var h0 = 0xc1059ed8U
var h1 = 0x367cd507U
var h2 = 0x3070dd17U
@@ -36,15 +35,15 @@ object `SHA-224` : 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,14 +91,14 @@ object `SHA-224` : HashFunction() {
h7 += h
}
return byteArrayOf(
*h0.toByteArray(),
*h1.toByteArray(),
*h2.toByteArray(),
*h3.toByteArray(),
*h4.toByteArray(),
*h5.toByteArray(),
*h6.toByteArray(),
return ubyteArrayOf(
*h0.toUByteArray(),
*h1.toUByteArray(),
*h2.toUByteArray(),
*h3.toUByteArray(),
*h4.toUByteArray(),
*h5.toUByteArray(),
*h6.toUByteArray(),
)
}
}

View File

@@ -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(),
)
}
}

View File

@@ -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.toULongArray
import com.infendro.hash.HashFunction
@@ -10,7 +9,7 @@ object `SHA-384` : HashFunction() {
override val bytes: Int
get() = 48
private val k = arrayOf(
private val k = ulongArrayOf(
0x428a2f98d728ae22UL, 0x7137449123ef65cdUL, 0xb5c0fbcfec4d3b2fUL, 0xe9b5dba58189dbbcUL, 0x3956c25bf348b538UL,
0x59f111f1b605d019UL, 0x923f82a4af194f9bUL, 0xab1c5ed5da6d8118UL, 0xd807aa98a3030242UL, 0x12835b0145706fbeUL,
0x243185be4ee4b28cUL, 0x550c7dc3d5ffb4e2UL, 0x72be5d74f27b896fUL, 0x80deb1fe3b1696b1UL, 0x9bdc06a725c71235UL,
@@ -30,8 +29,8 @@ object `SHA-384` : HashFunction() {
)
override fun hash(
value: ByteArray,
): ByteArray {
value: UByteArray,
): UByteArray {
var h0 = 0xcbbb9d5dc1059ed8UL
var h1 = 0x629a292a367cd507UL
var h2 = 0x9159015a3070dd17UL
@@ -44,15 +43,15 @@ object `SHA-384` : HashFunction() {
val paddedValue = buildList {
addAll(value)
add(0x80.toByte())
add(0x80U)
while (size % 128 != 120) {
add(0x00.toByte())
add(0x00U)
}
addAll(ml.toByteArray())
addAll(ml.toUByteArray())
}
val chunks = paddedValue
.chunked(128)
.chunked(128) { it.toUByteArray() }
for (chunk in chunks) {
val w = buildList {
addAll(chunk.toULongArray())
@@ -100,13 +99,13 @@ object `SHA-384` : HashFunction() {
h7 += h
}
return byteArrayOf(
*h0.toByteArray(),
*h1.toByteArray(),
*h2.toByteArray(),
*h3.toByteArray(),
*h4.toByteArray(),
*h5.toByteArray(),
return ubyteArrayOf(
*h0.toUByteArray(),
*h1.toUByteArray(),
*h2.toUByteArray(),
*h3.toUByteArray(),
*h4.toUByteArray(),
*h5.toUByteArray(),
)
}
}

View File

@@ -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.toULongArray
import com.infendro.hash.HashFunction
@@ -10,7 +9,7 @@ object `SHA-512` : HashFunction() {
override val bytes: Int
get() = 64
private val k = arrayOf(
private val k = ulongArrayOf(
0x428a2f98d728ae22UL, 0x7137449123ef65cdUL, 0xb5c0fbcfec4d3b2fUL, 0xe9b5dba58189dbbcUL, 0x3956c25bf348b538UL,
0x59f111f1b605d019UL, 0x923f82a4af194f9bUL, 0xab1c5ed5da6d8118UL, 0xd807aa98a3030242UL, 0x12835b0145706fbeUL,
0x243185be4ee4b28cUL, 0x550c7dc3d5ffb4e2UL, 0x72be5d74f27b896fUL, 0x80deb1fe3b1696b1UL, 0x9bdc06a725c71235UL,
@@ -30,8 +29,8 @@ object `SHA-512` : HashFunction() {
)
override fun hash(
value: ByteArray,
): ByteArray {
value: UByteArray,
): UByteArray {
var h0 = 0x6a09e667f3bcc908UL
var h1 = 0xbb67ae8584caa73bUL
var h2 = 0x3c6ef372fe94f82bUL
@@ -44,15 +43,15 @@ object `SHA-512` : HashFunction() {
val paddedValue = buildList {
addAll(value)
add(0x80.toByte())
add(0x80U)
while (size % 128 != 120) {
add(0x00.toByte())
add(0x00U)
}
addAll(ml.toByteArray())
addAll(ml.toUByteArray())
}
val chunks = paddedValue
.chunked(128)
.chunked(128) { it.toUByteArray() }
for (chunk in chunks) {
val w = buildList {
addAll(chunk.toULongArray())
@@ -100,15 +99,15 @@ object `SHA-512` : 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(),
)
}
}