public RSA GetOrCreateKey(string keyName) { var rsa = new RSACryptoServiceProvider(2048); var keyFileName = Path.Combine(basePath, $"{keyName}.pem"); Debug.WriteLine(keyFileName); if (File.Exists(keyFileName)) { Verbose($"using existing key file {keyFileName}"); var keyXml = File.ReadAllText(keyFileName); var privateKey = RSAPrivateKey.ParsePem(keyXml); rsa.ImportParameters(privateKey.Key); } else { var privateKey = new RSAPrivateKey(rsa.ExportParameters(true)); Verbose($"writing new key to file {keyFileName}"); var pemEncodedPrivateKey = privateKey.ToPemString(); File.WriteAllText(keyFileName, pemEncodedPrivateKey); } return(rsa); }
public byte[] InstallCertificateWithPrivateKey( string certificatePath, string certificateStoreName, RSAParameters privateKey) { var xCert = new X509Certificate2(certificatePath); var bCertBytes = xCert.Export(X509ContentType.Cert); var privk = new RSAPrivateKey(privateKey); var pemEncodedPrivateKey = privk.ToPemString(); midMethods = new Container { Cert = Oocx.Pkcs.Pem.Encode(bCertBytes, "CERTIFICATE"), Key = pemEncodedPrivateKey }; return(null); }
public void RSAPrivateKey_parse_and_encode_to_pem_should_result_in_equal_keys() { // TODO this test sometimes has a missing leading '0' byte. var rsa = new RSACryptoServiceProvider(2048); var rsaParameters = rsa.ExportParameters(true); var privateKey = new RSAPrivateKey(rsaParameters); var parsedRsaKey = RSAPrivateKey.ParsePem(privateKey.ToPemString()); Assert.Equal(rsaParameters.Exponent, parsedRsaKey.Key.Exponent); Assert.Equal(rsaParameters.Modulus, parsedRsaKey.Key.Modulus); Assert.Equal(rsaParameters.P, parsedRsaKey.Key.P); Assert.Equal(rsaParameters.D, parsedRsaKey.Key.D); Assert.Equal(rsaParameters.DP, parsedRsaKey.Key.DP); Assert.Equal(rsaParameters.Q, parsedRsaKey.Key.Q); Assert.Equal(rsaParameters.DQ, parsedRsaKey.Key.DQ); Assert.Equal(rsaParameters.InverseQ, parsedRsaKey.Key.InverseQ); }