public static Certificate Parse(byte[] certBytes)
{
Certificate certificate = new Certificate();
try
{
X509Certificate2 x509 = new X509Certificate2(certBytes);
certificate.EncodedValue = certBytes;
certificate.IsLoaded = true;
certificate.Version = x509.Version;
certificate.BasicConstraints = retrieveBasicContraints(x509);
certificate.KeyUsage = retrieveKeyUsage(x509);
Validity validity = new Validity();
validity.NotBefore = new DateTimeOffset(x509.NotBefore).ToUnixTimeSeconds();
validity.NotAfter = new DateTimeOffset(x509.NotAfter).ToUnixTimeSeconds();
certificate.Validity = validity;
X509CertificateParser x509CertificateParser = new X509CertificateParser();
X509Certificate bouncyCertificate = x509CertificateParser.ReadCertificate(certBytes);
certificate.SerialNumber = new BigInteger(bouncyCertificate.SerialNumber.ToByteArray());
certificate.TbsCertificate = bouncyCertificate.GetTbsCertificate();
certificate.TBSSignatureAlgorithm =
bouncyCertificate.CertificateStructure.TbsCertificate.Signature.GetEncoded();
certificate.SignatureAlgorithm = bouncyCertificate.CertificateStructure.SignatureAlgorithm.GetEncoded();
string publicKeyAlgNameStr = CipherUtilities.GetAlgorithmName(bouncyCertificate.CertificateStructure
.SubjectPublicKeyInfo.AlgorithmID.Algorithm);
if (publicKeyAlgNameStr == null)
{
publicKeyAlgNameStr = x509.PublicKey.Oid.FriendlyName;
}
certificate.PublicKeyAlgName = StringUtil.StringToByteArray(publicKeyAlgNameStr);
certificate.Signature = bouncyCertificate.GetSignature();
certificate.SubjectPublicKeyInfo =
bouncyCertificate.CertificateStructure.SubjectPublicKeyInfo.GetEncoded();
certificate.SubjectKeyIdentifier = retrieveSubjectKeyIdentifier(bouncyCertificate);
certificate.AuthorityKeyIdentifier = retrieveAuthorityKeyIdentifier(bouncyCertificate);
certificate.ExtendedKeyUsage = retrieveExtendedKeyUsageOIDs(bouncyCertificate);
certificate.Issuer = RetrieveIssuerName(bouncyCertificate);
certificate.Subject = RetrieveSubjectName(bouncyCertificate);
certificate.DNsNames = retrieveDnsNames(bouncyCertificate);
return(certificate);
}
catch (Exception e)
{
Console.WriteLine(e);
return(certificate);
}
}