generateKey method

  1. @override
Future<String> generateKey({
  1. String? address,
  2. CrossmintBiometricPolicy biometricPolicy = CrossmintBiometricPolicy.none,
})
override

Implementation

@override
Future<String> generateKey({
  String? address,
  CrossmintBiometricPolicy biometricPolicy = CrossmintBiometricPolicy.none,
}) async {
  // Generate a random P-256 key pair using pointycastle.
  final keyGen = ECKeyGenerator()
    ..init(
      ParametersWithRandom(
        ECKeyGeneratorParameters(ECDomainParameters('secp256r1')),
        _secureRandom(),
      ),
    );

  final pair = keyGen.generateKeyPair();
  final publicKey = pair.publicKey;
  final privateKey = pair.privateKey;

  // Encode public key as uncompressed point (0x04 + x + y), then base64.
  final pubBytes = publicKey.Q!.getEncoded(false);
  final pubBase64 = base64Encode(pubBytes);

  // Store private key bytes.
  final privBytes = _bigIntToBytes(privateKey.d!, 32);
  _keys[pubBase64] = privBytes;

  if (address != null) {
    _addressMap[address] = pubBase64;
  } else {
    _pendingKeys.add(pubBase64);
  }

  return pubBase64;
}