/// <summary> /// Parse buffer into cert /// </summary> /// <param name="buffer"></param> /// <param name="key"></param> /// <param name="policies"></param> /// <param name="revoked"></param> /// <returns></returns> public static Certificate Create(byte[] buffer, KeyHandle key = null, IssuerPolicies policies = null, RevocationInfo revoked = null) { using (var cert = new X509Certificate2(buffer)) { return(ToCertificate(cert, policies, key, revoked)); } }
/// <summary> /// Clone /// </summary> /// <param name="revoked"></param> /// <returns></returns> public static RevocationInfo Clone(this RevocationInfo revoked) { if (revoked == null) { return(null); } return(new RevocationInfo { Date = revoked.Date }); }
/// <summary> /// Compare /// </summary> /// <param name="revoked"></param> /// <param name="other"></param> /// <returns></returns> public static bool SameAs(this RevocationInfo revoked, RevocationInfo other) { if (revoked == null) { return(other == null); } if (other == null) { return(false); } if (revoked.Date != other.Date) { return(false); } return(true); }
/// <summary> /// Parse buffer into cert /// </summary> /// <param name="cert"></param> /// <param name="policies"></param> /// <param name="key"></param> /// <param name="revoked"></param> /// <returns></returns> public static Certificate ToCertificate(this X509Certificate2 cert, IssuerPolicies policies = null, KeyHandle key = null, RevocationInfo revoked = null) { if (cert == null) { return(null); } // We store big-endian but GetSerialNumber returns little-endian var serialNumber = cert.GetSerialNumber(); // .net creates clone Array.Reverse(serialNumber); var certificate = new Certificate { RawData = cert.RawData, KeyHandle = key, IssuerPolicies = cert.IsCa() ? policies : null, Revoked = revoked, NotAfterUtc = cert.NotAfter.ToUniversalTime(), NotBeforeUtc = cert.NotBefore.ToUniversalTime(), Subject = cert.SubjectName, Thumbprint = cert.Thumbprint, Issuer = cert.IssuerName, SerialNumber = serialNumber, Extensions = new List <X509Extension>(cert.Extensions.OfType <X509Extension>()) }; // Set issuer serial number certificate.IssuerSerialNumber = certificate.GetAuthorityKeyIdentifierExtension()?.SerialNumber.Value; if (certificate.IssuerSerialNumber == null && certificate.IsSelfSigned()) { certificate.IssuerSerialNumber = certificate.SerialNumber.ToArray(); } return(certificate); }