generateKey static method

SigningKeyData generateKey({
  1. NRFLogger? logger,
})

Create SingingKeyData which includes a zip file that contains both a public and private key. The public key is in the form of c code and pem file in SingingKeyData.

To export a zip file with all the needed keys, call generateKey.

Implementation

static SigningKeyData generateKey({NRFLogger? logger}){
  late String pbkc;
  late String pbkpem;
  AsymmetricKeyPair pair = CryptoUtils.generateEcKeyPair();
  Archive archive = Archive();
  logger?.verbose('Creating private key.');
  String prk = CryptoUtils.encodeEcPrivateKeyToPem(pair.privateKey as ECPrivateKey);
  archive.addFile(ArchiveFile('private.pem', prk.length, prk));

  //if(publicKeyType == SigningKeyType.code){
    logger?.verbose('Creating public code key.');
    ECPublicKey ecpbk = pair.publicKey as ECPublicKey;
    pbkc = _generateCodeKey(ecpbk);
    archive.addFile(ArchiveFile('public.c', pbkc.length, pbkc));
  //}
  //else{
    logger?.verbose('Creating public pem key.');
    pbkpem = CryptoUtils.encodeEcPublicKeyToPem(pair.publicKey as ECPublicKey);
    archive.addFile(ArchiveFile('public.pem', pbkpem.length, pbkpem));
  //}
  logger?.verbose('Archiving keys.');
  ZipEncoder encoder = ZipEncoder();
  OutputStream outputStream = OutputStream(
    byteOrder: LITTLE_ENDIAN,
  );
  List<int>? bytes = encoder.encode(
    archive,
    level: Deflate.BEST_COMPRESSION,
    output: outputStream
  );
  return SigningKeyData(
    zipFile: Uint8List.fromList(bytes!),
    privateKey: prk,
    publicKeyCode: pbkc,
    publicKeyPem: pbkpem
  );
}