keyGen method
Generates a fresh KEM key pair.
Implementation
@override
KemKeyPair keyGen() {
final rng = Random.secure();
final seed = Uint8List(_seedSize);
for (var i = 0; i < _seedSize; i++) {
seed[i] = rng.nextInt(256);
}
// pk = SHA-256(seed), padded to kemPublicKeySize
final pkHash = sha256.convert(seed).bytes;
final pk = Uint8List(level.kemPublicKeySize);
pk.setRange(0, pkHash.length, pkHash);
// Fill remaining bytes with a deterministic expansion
_expandInto(pk, pkHash.length, seed, 0x10);
// sk = seed || pk, padded to kemSecretKeySize
final sk = Uint8List(level.kemSecretKeySize);
sk.setRange(0, _seedSize, seed);
sk.setRange(_seedSize, _seedSize + pk.length, pk);
return KemKeyPair(publicKey: pk, secretKey: sk);
}