private MSX509.X509Certificate2 InternalGenerateCertificate(X509Name name, Usage usage, int validity, MSX509.StoreName storeName, AsymmetricKeyParameter publicKey, AsymmetricKeyParameter privateKey, AsymmetricKeyParameter signator)
{
DateTime notBefore = DateTime.Now.AddDays(-1);
// Build a X509v3 certificate
X509V3CertificateGenerator builder = new X509V3CertificateGenerator();
builder.SetSerialNumber(new BigInteger(GenerateSerial()));
builder.SetIssuerDN(authorityName_ ?? name);
builder.SetSubjectDN(name);
builder.SetPublicKey(publicKey);
builder.SetNotBefore(notBefore);
builder.SetNotAfter(notBefore.AddDays(validity == 0 ? defaultCertificatesValidity_ : validity));
builder.SetSignatureAlgorithm("SHA1WithRSA");
// Add the extensions
AddExtensions(builder, usage);
// Sign the certificate
X509Certificate newCertificate = builder.Generate(signator);
// Create a .NET X509Certificate2 from the BouncyCastle one and put the private key into it
MSX509.X509Certificate2 certificate = CreateCertificate(name, newCertificate, privateKey);
// Store the certificate
StoreCertificate(name, certificate, storeName);
return certificate;
}