This commit is contained in:
@@ -22,11 +22,12 @@ class HMAC(
|
||||
function.hashInto(outer, destination, destinationOffset)
|
||||
}
|
||||
|
||||
private fun pad(key: ByteArray): ByteArray =
|
||||
ByteArray(function.block).also {
|
||||
private fun pad(key: ByteArray): ByteArray {
|
||||
return ByteArray(function.block).also {
|
||||
when {
|
||||
key.size > function.block -> function.hashInto(key, it)
|
||||
else -> key.copyInto(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,18 +7,9 @@ interface MAC {
|
||||
|
||||
fun hashInto(key: ByteArray, value: ByteArray, destination: ByteArray, destinationOffset: Int = 0)
|
||||
|
||||
fun hashInto(key: ByteArray, value: ByteArray, destination: UByteArray, destinationOffset: Int = 0) =
|
||||
hashInto(key, value, destination.asByteArray(), destinationOffset)
|
||||
|
||||
fun hashInto(key: UByteArray, value: UByteArray, destination: ByteArray, destinationOffset: Int = 0) =
|
||||
hashInto(key.asByteArray(), value.asByteArray(), destination, destinationOffset)
|
||||
|
||||
fun hashInto(key: UByteArray, value: UByteArray, destination: UByteArray, destinationOffset: Int = 0) =
|
||||
hashInto(key.asByteArray(), value.asByteArray(), destination.asByteArray(), destinationOffset)
|
||||
|
||||
fun hash(key: ByteArray, value: ByteArray): ByteArray =
|
||||
ByteArray(bytes).also { hashInto(key, value, it) }
|
||||
|
||||
fun hash(key: UByteArray, value: UByteArray): UByteArray =
|
||||
UByteArray(bytes).also { hashInto(key, value, it) }
|
||||
fun hash(key: ByteArray, value: ByteArray): ByteArray {
|
||||
val result = ByteArray(bytes)
|
||||
hashInto(key, value, result)
|
||||
return result
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,16 +16,12 @@ class `HMAC Test` {
|
||||
|
||||
@Test
|
||||
fun example() {
|
||||
val expected = ubyteArrayOf(
|
||||
0xf7U, 0xbcU, 0x83U, 0xf4U,
|
||||
0x30U, 0x53U, 0x84U, 0x24U,
|
||||
0xb1U, 0x32U, 0x98U, 0xe6U,
|
||||
0xaaU, 0x6fU, 0xb1U, 0x43U,
|
||||
0xefU, 0x4dU, 0x59U, 0xa1U,
|
||||
0x49U, 0x46U, 0x17U, 0x59U,
|
||||
0x97U, 0x47U, 0x9dU, 0xbcU,
|
||||
0x2dU, 0x1aU, 0x3cU, 0xd8U,
|
||||
).asByteArray()
|
||||
val expected = byteArrayOf(
|
||||
-0x09, -0x44, -0x7d, -0x0c, +0x30, +0x53, -0x7c, +0x24,
|
||||
-0x4f, +0x32, -0x68, -0x1a, -0x56, +0x6f, -0x4f, +0x43,
|
||||
-0x11, +0x4d, +0x59, -0x5f, +0x49, +0x46, +0x17, +0x59,
|
||||
-0x69, +0x47, -0x63, -0x44, +0x2d, +0x1a, +0x3c, -0x28,
|
||||
)
|
||||
val actual = hmac.hash(
|
||||
"key".encodeToByteArray(),
|
||||
"The quick brown fox jumps over the lazy dog".encodeToByteArray(),
|
||||
|
||||
Reference in New Issue
Block a user