keyGen method

  1. @override
KemKeyPair keyGen()
override

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);
}