public MSX509.X509Certificate2 SignRequest(string csrFile, Usage usage, int validity, MSX509.StoreName storeName)
{
Pkcs10CertificationRequest request = ReadPkcs10(csrFile);
var info = request.GetCertificationRequestInfo();
SubjectPublicKeyInfo publicKeyInfo = info.SubjectPublicKeyInfo;
RsaPublicKeyStructure publicKeyStructure = RsaPublicKeyStructure.GetInstance(publicKeyInfo.GetPublicKey());
RsaKeyParameters publicKey = new RsaKeyParameters(false, publicKeyStructure.Modulus, publicKeyStructure.PublicExponent);
if(!request.Verify(publicKey))
throw new ApplicationException("The CSR is not valid: verification failed");
MSX509.X509Certificate2 root = GetRootCertificate();
if(root == null)
throw new ApplicationException("Root certificate not found");
return InternalGenerateCertificate(info.Subject, usage, validity, storeName, publicKey, null, DotNetUtilities.GetKeyPair(root.PrivateKey).Private);
}