private void btnSign_Click(object sender, EventArgs e) { var csr = _manager.buildCsr(); var myCallback = new SezameSignCallbackType(signCallback); MessageBox.Show(csr); _manager.sign(csr, myCallback); }
public async Task sign(string pemCertificationRequest, SezameSignCallbackType callback) { var invoker = new SezameRegistrationServiceInvoker(); var response = await invoker.SignAsync(pemCertificationRequest, sharedsecret); pemCertificate = response.GetParameter(SezameResultKey.Certificate); pemCertificate = Regex.Replace(pemCertificate, "-----BEGIN CERTIFICATE-----", ""); pemCertificate = Regex.Replace(pemCertificate, "-----END CERTIFICATE-----", ""); var certificateByteData = Convert.FromBase64String(pemCertificate); AsymmetricKeyParameter privateKey = keyPair.Private; // http://paulstovell.com/blog/x509certificate2 // Convert X509Certificate to X509Certificate2 certificate = new X509Certificate2(certificateByteData, "test", X509KeyStorageFlags.Exportable); // Convert BouncyCastle Private Key to RSA var rsaPriv = DotNetUtilities.ToRSA((RsaPrivateCrtKeyParameters)keyPair.Private); // Setup RSACryptoServiceProvider with "KeyContainerName" set var csp = new CspParameters(); csp.KeyContainerName = "KeyContainer"; var rsaPrivate = new RSACryptoServiceProvider(csp); // Import private key from BouncyCastle's rsa rsaPrivate.ImportParameters(rsaPriv.ExportParameters(true)); // Set private key on our X509Certificate2 certificate.PrivateKey = rsaPrivate; var store = new X509Store(StoreName.My, StoreLocation.CurrentUser); store.Open(OpenFlags.ReadWrite); store.Add(certificate); store.Close(); status = "ready"; callback(certificate); }