Beispiel #1
0
        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);
        }