Implementation
String encode() {
ASN1Sequence sequence = ASN1Sequence();
ASN1Integer version = ASN1Integer(BigInt.from(0));
ASN1Sequence algorithm = ASN1Sequence();
ASN1Object paramsAsn1Obj =
ASN1Object.fromBytes(Uint8List.fromList([0x5, 0x0]));
algorithm
.add(ASN1ObjectIdentifier.fromIdentifierString('1.2.840.113549.1.1.1'));
algorithm.add(paramsAsn1Obj);
ASN1Sequence privateKeySequence = ASN1Sequence();
ASN1Integer privateKeyVersion = ASN1Integer(BigInt.from(1));
ASN1Integer modulus = ASN1Integer(this.modulus);
ASN1Integer publicExponent = ASN1Integer(this.publicExponent);
ASN1Integer privateExponent = ASN1Integer(this.privateExponent);
ASN1Integer prime1 = ASN1Integer(p);
ASN1Integer prime2 = ASN1Integer(q);
ASN1Integer exponent1 =
ASN1Integer(this.privateExponent! % (p! - BigInt.from(1)));
ASN1Integer exponent2 =
ASN1Integer(this.privateExponent! % (q! - BigInt.from(1)));
ASN1Integer coefficient = ASN1Integer(q!.modInverse(p!));
privateKeySequence.add(privateKeyVersion);
privateKeySequence.add(modulus);
privateKeySequence.add(publicExponent);
privateKeySequence.add(privateExponent);
privateKeySequence.add(prime1);
privateKeySequence.add(prime2);
privateKeySequence.add(exponent1);
privateKeySequence.add(exponent2);
privateKeySequence.add(coefficient);
privateKeySequence.encode();
ASN1OctetString privateKeyOctet = ASN1OctetString();
privateKeyOctet.octets = privateKeySequence.encodedBytes;
sequence.add(version);
sequence.add(algorithm);
sequence.add(privateKeyOctet);
sequence.encode();
return base64.encode(sequence.encodedBytes!);
}