refactor HashFunction
This commit is contained in:
@@ -1,8 +1,7 @@
|
||||
package com.infendro.hash.md
|
||||
|
||||
import com.infendro.bytearray.ByteOrder
|
||||
import com.infendro.bytearray.addAll
|
||||
import com.infendro.bytearray.toByteArray
|
||||
import com.infendro.bytearray.ByteOrder.LITTLE_ENDIAN
|
||||
import com.infendro.bytearray.toUByteArray
|
||||
import com.infendro.bytearray.toUIntArray
|
||||
import com.infendro.hash.HashFunction
|
||||
|
||||
@@ -11,7 +10,7 @@ object MD5 : HashFunction() {
|
||||
override val bytes: Int
|
||||
get() = 16
|
||||
|
||||
private val s = arrayOf(
|
||||
private val s = intArrayOf(
|
||||
7, 12, 17, 22,
|
||||
7, 12, 17, 22,
|
||||
7, 12, 17, 22,
|
||||
@@ -30,7 +29,7 @@ object MD5 : HashFunction() {
|
||||
6, 10, 15, 21,
|
||||
)
|
||||
|
||||
private val k = arrayOf(
|
||||
private val k = uintArrayOf(
|
||||
0xd76aa478U, 0xe8c7b756U, 0x242070dbU, 0xc1bdceeeU,
|
||||
0xf57c0fafU, 0x4787c62aU, 0xa8304613U, 0xfd469501U,
|
||||
0x698098d8U, 0x8b44f7afU, 0xffff5bb1U, 0x895cd7beU,
|
||||
@@ -50,8 +49,8 @@ object MD5 : HashFunction() {
|
||||
)
|
||||
|
||||
override fun hash(
|
||||
value: ByteArray,
|
||||
): ByteArray {
|
||||
value: UByteArray,
|
||||
): UByteArray {
|
||||
var a0 = 0x67452301U
|
||||
var b0 = 0xefcdab89U
|
||||
var c0 = 0x98badcfeU
|
||||
@@ -60,18 +59,18 @@ object MD5 : HashFunction() {
|
||||
|
||||
val paddedValue = buildList {
|
||||
addAll(value)
|
||||
add(0x80.toByte())
|
||||
add(0x80U)
|
||||
while (size % 64 != 56) {
|
||||
add(0x00.toByte())
|
||||
add(0x00U)
|
||||
}
|
||||
addAll(ml.toByteArray(ByteOrder.LITTLE_ENDIAN))
|
||||
addAll(ml.toUByteArray(LITTLE_ENDIAN))
|
||||
}
|
||||
|
||||
val chunks = paddedValue
|
||||
.chunked(64)
|
||||
.chunked(64) { it.toUByteArray() }
|
||||
for (chunk in chunks) {
|
||||
val w = buildList {
|
||||
addAll(chunk.toUIntArray(ByteOrder.LITTLE_ENDIAN))
|
||||
addAll(chunk.toUIntArray(LITTLE_ENDIAN))
|
||||
}
|
||||
|
||||
var a = a0
|
||||
@@ -104,11 +103,11 @@ object MD5 : HashFunction() {
|
||||
d0 += d
|
||||
}
|
||||
|
||||
return byteArrayOf(
|
||||
*a0.toByteArray(ByteOrder.LITTLE_ENDIAN),
|
||||
*b0.toByteArray(ByteOrder.LITTLE_ENDIAN),
|
||||
*c0.toByteArray(ByteOrder.LITTLE_ENDIAN),
|
||||
*d0.toByteArray(ByteOrder.LITTLE_ENDIAN),
|
||||
return ubyteArrayOf(
|
||||
*a0.toUByteArray(LITTLE_ENDIAN),
|
||||
*b0.toUByteArray(LITTLE_ENDIAN),
|
||||
*c0.toUByteArray(LITTLE_ENDIAN),
|
||||
*d0.toUByteArray(LITTLE_ENDIAN),
|
||||
)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user