further optimize HMAC-DRBG

This commit is contained in:
2026-01-30 15:03:28 +01:00
parent 89e7569fa7
commit 2c6fe0a7d9
2 changed files with 22 additions and 9 deletions

View File

@@ -6,7 +6,7 @@ import com.infendro.mac.HMAC
import com.infendro.random.CSPRNG
import kotlin.properties.Delegates.notNull
class `HMAC-DRBG` internal constructor(
class `HMAC-DRBG`(
private val function: HashFunction,
) : CSPRNG() {
private val hmac = HMAC(function)
@@ -14,6 +14,8 @@ class `HMAC-DRBG` internal constructor(
private var k: ByteArray by notNull()
private var v: ByteArray by notNull()
private val buffer = ByteArray(function.bytes + 1)
override fun seed(seed: ByteArray) {
k = ByteArray(function.bytes) { 0x00 }
v = ByteArray(function.bytes) { 0x01 }
@@ -21,17 +23,28 @@ class `HMAC-DRBG` internal constructor(
}
override fun reseed(entropy: ByteArray) {
k = hmac.hash(k, v + byteArrayOf(0x00) + entropy)
v = hmac.hash(k, v)
k = hmac.hash(k, v + byteArrayOf(0x01) + entropy)
v = hmac.hash(k, v)
val value = ByteArray(v.size + 1 + entropy.size)
v.copyInto(value)
value[v.size] = 0x00
entropy.copyInto(value, v.size + 1)
hmac.hashInto(k, value, k)
hmac.hashInto(k, v, v)
value[v.size] = 0x01
hmac.hashInto(k, value, k)
hmac.hashInto(k, v, v)
}
override fun generate(): Int {
v = hmac.hash(k, v)
hmac.hashInto(k, v, v)
val result = v.toInt()
k = hmac.hash(k, v + byteArrayOf(0x00))
v = hmac.hash(k, v)
v.copyInto(buffer)
buffer[v.size] = 0x00
hmac.hashInto(k, buffer, k)
hmac.hashInto(k, v, v)
return result
}
}

View File

@@ -5,7 +5,7 @@ import com.infendro.hash.sha2.`SHA-256`
import com.infendro.random.PRNG
import kotlin.properties.Delegates.notNull
class LCG internal constructor() : PRNG() {
class LCG : PRNG() {
private val a: Long = 25214903917L
private val c: Long = 11L
private val mask: Long = (1L shl 48) - 1