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-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(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user