Exemplo n.º 1
0
 /// <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));
     }
 }
Exemplo n.º 2
0
 /// <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
     });
 }
Exemplo n.º 3
0
 /// <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);
 }
Exemplo n.º 4
0
        /// <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);
        }