encodePrivateKeyToPemPKCS1 method

String encodePrivateKeyToPemPKCS1(
  1. RSAPrivateKey privateKey
)

Encode Private key to PEM Format

Given RSAPrivateKey returns a base64 encoded String with standard PEM headers and footers

Implementation

String encodePrivateKeyToPemPKCS1(RSAPrivateKey privateKey) {
  var topLevel = new ASN1Sequence();

  var version = ASN1Integer(BigInt.from(0));
  var modulus = ASN1Integer(privateKey.n!);
  var publicExponent = ASN1Integer(privateKey.exponent!);
  var privateExponent = ASN1Integer(privateKey.privateExponent!);
  var p = ASN1Integer(privateKey.p!);
  var q = ASN1Integer(privateKey.q!);
  var dP = privateKey.privateExponent! % (privateKey.p! - BigInt.from(1));
  var exp1 = ASN1Integer(dP);
  var dQ = privateKey.privateExponent! % (privateKey.q! - BigInt.from(1));
  var exp2 = ASN1Integer(dQ);
  var iQ = privateKey.q!.modInverse(privateKey.p!);
  var co = ASN1Integer(iQ);

  topLevel.add(version);
  topLevel.add(modulus);
  topLevel.add(publicExponent);
  topLevel.add(privateExponent);
  topLevel.add(p);
  topLevel.add(q);
  topLevel.add(exp1);
  topLevel.add(exp2);
  topLevel.add(co);

  var dataBase64 = base64.encode(topLevel.encodedBytes);

  return """-----BEGIN RSA PRIVATE KEY-----\r\n$dataBase64\r\n-----END RSA PRIVATE KEY-----""";
}