This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user