refactor math utility
All checks were successful
/ test (pull_request) Successful in 32s

This commit is contained in:
2026-01-17 15:44:50 +01:00
parent 62d6b8b01e
commit 4331145c34
12 changed files with 26 additions and 27 deletions

View File

@@ -3,7 +3,7 @@ package com.infendro.hash.blake
import com.infendro.bytes.intarray.copyInto
import com.infendro.bytes.ulong.copyInto
import com.infendro.hash.HashFunction
import com.infendro.hash.util.ceilPow2
import com.infendro.hash.util.align
object `Blake-224` : HashFunction {
override val bytes: Int
@@ -37,7 +37,7 @@ object `Blake-224` : HashFunction {
private fun pad(value: ByteArray): ByteArray {
val length = value.size.toULong() * 8UL
val size = ceilPow2(value.size + 9, block)
val size = (value.size + 9).align(block)
val result = ByteArray(size)
value.copyInto(result)
result[value.size] = 0x80U.toByte()

View File

@@ -4,7 +4,7 @@ import com.infendro.bytes.bytearray.copyInto
import com.infendro.bytes.intarray.copyInto
import com.infendro.bytes.ulong.copyInto
import com.infendro.hash.HashFunction
import com.infendro.hash.util.ceilPow2
import com.infendro.hash.util.align
object `Blake-256` : HashFunction {
override val bytes: Int
@@ -62,7 +62,7 @@ object `Blake-256` : HashFunction {
private fun pad(value: ByteArray): ByteArray {
val length = value.size.toULong() * 8UL
val size = ceilPow2(value.size + 10, block)
val size = (value.size + 10).align(block)
val result = ByteArray(size)
value.copyInto(result)
result[value.size] = 0x80U.toByte()

View File

@@ -3,7 +3,7 @@ package com.infendro.hash.blake
import com.infendro.bytes.longarray.copyInto
import com.infendro.bytes.ulong.copyInto
import com.infendro.hash.HashFunction
import com.infendro.hash.util.ceilPow2
import com.infendro.hash.util.align
object `Blake-384` : HashFunction {
override val bytes: Int
@@ -37,7 +37,7 @@ object `Blake-384` : HashFunction {
private fun pad(value: ByteArray): ByteArray {
val length = value.size.toULong() * 8UL
val size = ceilPow2(value.size + 17, block)
val size = (value.size + 17).align(block)
val result = ByteArray(size)
value.copyInto(result)
result[value.size] = 0x80U.toByte()

View File

@@ -4,7 +4,7 @@ import com.infendro.bytes.bytearray.copyInto
import com.infendro.bytes.longarray.copyInto
import com.infendro.bytes.ulong.copyInto
import com.infendro.hash.HashFunction
import com.infendro.hash.util.ceilPow2
import com.infendro.hash.util.align
object `Blake-512` : HashFunction {
override val bytes: Int
@@ -62,7 +62,7 @@ object `Blake-512` : HashFunction {
private fun pad(value: ByteArray): ByteArray {
val length = value.size.toULong() * 8UL
val size = ceilPow2(value.size + 18, block)
val size = (value.size + 18).align(block)
val result = ByteArray(size)
value.copyInto(result)
result[value.size] = 0x80U.toByte()

View File

@@ -4,7 +4,7 @@ import com.infendro.bytes.ByteOrder.LITTLE_ENDIAN
import com.infendro.bytes.bytearray.copyInto
import com.infendro.bytes.longarray.toByteArray
import com.infendro.hash.HashFunction
import com.infendro.hash.util.ceilPow2
import com.infendro.hash.util.align
class Blake2b(
override val bytes: Int,
@@ -53,7 +53,7 @@ class Blake2b(
}
private fun pad(value: ByteArray): ByteArray {
val size = maxOf(ceilPow2(value.size, block), block)
val size = maxOf(value.size.align(block), block)
val result = ByteArray(size)
value.copyInto(result)
return result

View File

@@ -4,7 +4,7 @@ import com.infendro.bytes.ByteOrder.LITTLE_ENDIAN
import com.infendro.bytes.bytearray.copyInto
import com.infendro.bytes.intarray.toByteArray
import com.infendro.hash.HashFunction
import com.infendro.hash.util.ceilPow2
import com.infendro.hash.util.align
class Blake2s(
override val bytes: Int,
@@ -53,7 +53,7 @@ class Blake2s(
}
private fun pad(value: ByteArray): ByteArray {
val size = maxOf(ceilPow2(value.size, block), block)
val size = maxOf(value.size.align(block), block)
val result = ByteArray(size)
value.copyInto(result)
return result

View File

@@ -4,7 +4,7 @@ import com.infendro.bytes.ByteOrder.LITTLE_ENDIAN
import com.infendro.bytes.bytearray.copyInto
import com.infendro.bytes.long.copyInto
import com.infendro.hash.HashFunction
import com.infendro.hash.util.ceil
import com.infendro.hash.util.align
open class Keccak(
override val bytes: Int,
@@ -52,7 +52,7 @@ open class Keccak(
}
private fun pad(value: ByteArray): ByteArray {
val size = ceil(value.size + 2, block)
val size = (value.size + 2).align(block)
val result = ByteArray(size)
value.copyInto(result)
result[value.size] = domain

View File

@@ -5,7 +5,7 @@ import com.infendro.bytes.bytearray.copyInto
import com.infendro.bytes.intarray.copyInto
import com.infendro.bytes.ulong.copyInto
import com.infendro.hash.HashFunction
import com.infendro.hash.util.ceilPow2
import com.infendro.hash.util.align
object MD5 : HashFunction {
override val bytes: Int
@@ -64,7 +64,7 @@ object MD5 : HashFunction {
private fun pad(value: ByteArray): ByteArray {
val length = value.size.toULong() * 8UL
val size = ceilPow2(value.size + 9, block)
val size = (value.size + 9).align(block)
val result = ByteArray(size)
value.copyInto(result)
result[value.size] = 0x80U.toByte()

View File

@@ -4,7 +4,7 @@ import com.infendro.bytes.bytearray.copyInto
import com.infendro.bytes.intarray.copyInto
import com.infendro.bytes.ulong.copyInto
import com.infendro.hash.HashFunction
import com.infendro.hash.util.ceilPow2
import com.infendro.hash.util.align
object SHA1 : HashFunction {
override val bytes: Int
@@ -39,7 +39,7 @@ object SHA1 : HashFunction {
private fun pad(value: ByteArray): ByteArray {
val length = value.size.toULong() * 8UL
val size = ceilPow2(value.size + 9, block)
val size = (value.size + 9).align(block)
val result = ByteArray(size)
value.copyInto(result)
result[value.size] = 0x80U.toByte()

View File

@@ -4,7 +4,7 @@ import com.infendro.bytes.bytearray.copyInto
import com.infendro.bytes.intarray.copyInto
import com.infendro.bytes.ulong.copyInto
import com.infendro.hash.HashFunction
import com.infendro.hash.util.ceilPow2
import com.infendro.hash.util.align
object `SHA-256` : HashFunction {
override val bytes: Int
@@ -46,7 +46,7 @@ object `SHA-256` : HashFunction {
internal fun pad(value: ByteArray): ByteArray {
val length = value.size.toULong() * 8UL
val size = ceilPow2(value.size + 9, block)
val size = (value.size + 9).align(block)
val result = ByteArray(size)
value.copyInto(result)
result[value.size] = 0x80U.toByte()

View File

@@ -4,7 +4,7 @@ import com.infendro.bytes.bytearray.copyInto
import com.infendro.bytes.longarray.copyInto
import com.infendro.bytes.ulong.copyInto
import com.infendro.hash.HashFunction
import com.infendro.hash.util.ceilPow2
import com.infendro.hash.util.align
object `SHA-512` : HashFunction {
override val bytes: Int
@@ -58,7 +58,7 @@ object `SHA-512` : HashFunction {
internal fun pad(value: ByteArray): ByteArray {
val length = value.size.toULong() * 8UL
val size = ceilPow2(value.size + 17, block)
val size = (value.size + 17).align(block)
val result = ByteArray(size)
value.copyInto(result)
result[value.size] = 0x80U.toByte()

View File

@@ -1,7 +1,6 @@
package com.infendro.hash.util
internal fun ceil(x: Int, n: Int): Int =
((x + n - 1) / n) * n
internal fun ceilPow2(x: Int, n: Int): Int =
(x + n - 1) and (n - 1).inv()
internal fun Int.align(n: Int): Int = when {
n and (n - 1) == 0 -> (this + n - 1) and (n - 1).inv()
else -> ((this + n - 1) / n) * n
}