// Parses a PKCS#8 encoded private key public static RSAPrivateKey ParsePem(Stream input) { var der = Pem.Decode(input, Pem.PrivateKey); using (var derStream = new MemoryStream(der)) { // TODO add more validation, ensure that the algorithm used is RSA var asn1 = (Sequence)Asn1Parser.Default.Parse(derStream).First(); var octet = (OctetString)asn1.Children.Last(); using (var octetStream = new MemoryStream(octet.UnencodedValue)) { return(RSAPrivateKey.ParseDer(octetStream)); } } }
private static byte[] DecodePem(Stream input) { return(Pem.Decode(input, Pem.RSAPrivateKey)); }