diff --git a/src/commonMain/kotlin/com/infendro/hash/blake/Blake-224.kt b/src/commonMain/kotlin/com/infendro/hash/blake/Blake-224.kt index c372659..eec2225 100644 --- a/src/commonMain/kotlin/com/infendro/hash/blake/Blake-224.kt +++ b/src/commonMain/kotlin/com/infendro/hash/blake/Blake-224.kt @@ -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() diff --git a/src/commonMain/kotlin/com/infendro/hash/blake/Blake-256.kt b/src/commonMain/kotlin/com/infendro/hash/blake/Blake-256.kt index 77767c9..8ef894e 100644 --- a/src/commonMain/kotlin/com/infendro/hash/blake/Blake-256.kt +++ b/src/commonMain/kotlin/com/infendro/hash/blake/Blake-256.kt @@ -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() diff --git a/src/commonMain/kotlin/com/infendro/hash/blake/Blake-384.kt b/src/commonMain/kotlin/com/infendro/hash/blake/Blake-384.kt index 6cc55d5..588710b 100644 --- a/src/commonMain/kotlin/com/infendro/hash/blake/Blake-384.kt +++ b/src/commonMain/kotlin/com/infendro/hash/blake/Blake-384.kt @@ -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() diff --git a/src/commonMain/kotlin/com/infendro/hash/blake/Blake-512.kt b/src/commonMain/kotlin/com/infendro/hash/blake/Blake-512.kt index 23ca380..7974370 100644 --- a/src/commonMain/kotlin/com/infendro/hash/blake/Blake-512.kt +++ b/src/commonMain/kotlin/com/infendro/hash/blake/Blake-512.kt @@ -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() diff --git a/src/commonMain/kotlin/com/infendro/hash/blake2/Blake2b.kt b/src/commonMain/kotlin/com/infendro/hash/blake2/Blake2b.kt index 9659bed..7ab685c 100644 --- a/src/commonMain/kotlin/com/infendro/hash/blake2/Blake2b.kt +++ b/src/commonMain/kotlin/com/infendro/hash/blake2/Blake2b.kt @@ -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 diff --git a/src/commonMain/kotlin/com/infendro/hash/blake2/Blake2s.kt b/src/commonMain/kotlin/com/infendro/hash/blake2/Blake2s.kt index c03cb7b..590e38e 100644 --- a/src/commonMain/kotlin/com/infendro/hash/blake2/Blake2s.kt +++ b/src/commonMain/kotlin/com/infendro/hash/blake2/Blake2s.kt @@ -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 diff --git a/src/commonMain/kotlin/com/infendro/hash/keccak/Keccak.kt b/src/commonMain/kotlin/com/infendro/hash/keccak/Keccak.kt index 51db5b8..91520c0 100644 --- a/src/commonMain/kotlin/com/infendro/hash/keccak/Keccak.kt +++ b/src/commonMain/kotlin/com/infendro/hash/keccak/Keccak.kt @@ -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 diff --git a/src/commonMain/kotlin/com/infendro/hash/md/MD5.kt b/src/commonMain/kotlin/com/infendro/hash/md/MD5.kt index a03940c..846ed1c 100644 --- a/src/commonMain/kotlin/com/infendro/hash/md/MD5.kt +++ b/src/commonMain/kotlin/com/infendro/hash/md/MD5.kt @@ -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() diff --git a/src/commonMain/kotlin/com/infendro/hash/sha1/SHA1.kt b/src/commonMain/kotlin/com/infendro/hash/sha1/SHA1.kt index 4f1a292..7d1b356 100644 --- a/src/commonMain/kotlin/com/infendro/hash/sha1/SHA1.kt +++ b/src/commonMain/kotlin/com/infendro/hash/sha1/SHA1.kt @@ -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() diff --git a/src/commonMain/kotlin/com/infendro/hash/sha2/SHA-256.kt b/src/commonMain/kotlin/com/infendro/hash/sha2/SHA-256.kt index 13a74cb..db53bef 100644 --- a/src/commonMain/kotlin/com/infendro/hash/sha2/SHA-256.kt +++ b/src/commonMain/kotlin/com/infendro/hash/sha2/SHA-256.kt @@ -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() diff --git a/src/commonMain/kotlin/com/infendro/hash/sha2/SHA-512.kt b/src/commonMain/kotlin/com/infendro/hash/sha2/SHA-512.kt index 509c061..1dd84e0 100644 --- a/src/commonMain/kotlin/com/infendro/hash/sha2/SHA-512.kt +++ b/src/commonMain/kotlin/com/infendro/hash/sha2/SHA-512.kt @@ -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() diff --git a/src/commonMain/kotlin/com/infendro/hash/util/Math.kt b/src/commonMain/kotlin/com/infendro/hash/util/Math.kt index bbdea5a..d0ffcfc 100644 --- a/src/commonMain/kotlin/com/infendro/hash/util/Math.kt +++ b/src/commonMain/kotlin/com/infendro/hash/util/Math.kt @@ -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 +}