Example #1
0
        IDictionary <String, X509Certificate2> hashCerts()
        {
            var hashList = new Dictionary <String, X509Certificate2>(StringComparer.InvariantCultureIgnoreCase);

            using (var hasher = HashAlgorithm.Create(SubjectAlgorithm.FriendlyName)) {
                if (hasher == null)
                {
                    return(hashList);
                }
                var certList = new X509Certificate2Collection();
                certList.AddRange(cms.Certificates);
                foreach (StoreName storeName in new[] { StoreName.Root, StoreName.CertificateAuthority, StoreName.AuthRoot })
                {
                    var store = new X509Store(storeName, StoreLocation.CurrentUser);
                    store.Open(OpenFlags.ReadOnly);
                    certList.AddRange(store.Certificates);
                    store.Close();
                }
                foreach (X509Certificate2 cmsCert in certList)
                {
                    String hashString = AsnFormatter.BinaryToString(hasher.ComputeHash(cmsCert.RawData), format: EncodingFormat.NOCRLF);
                    if (hashList.ContainsKey(hashString))
                    {
                        continue;
                    }
                    hashList.Add(hashString, cmsCert);
                }
            }
            return(hashList);
        }
Example #2
0
        void encode()
        {
            List <Byte> rawData = new List <Byte>(IssuerName.RawData);

            rawData.AddRange(Asn1Utils.Encode(AsnFormatter.StringToBinary(SerialNumber, EncodingType.HexRaw), 4));
            RawData = rawData.ToArray();
        }
Example #3
0
        /// <summary>
        /// Exports the current X509CRL2 object to a file.
        /// </summary>
        /// <param name="path">The path to a CRL file.</param>
        /// <param name="encoding">Encoding of the exported file.</param>
        /// <exception cref="ArgumentException">Specified encoding type is not supported.</exception>
        /// <exception cref="UninitializedObjectException">An object is not initialized.</exception>
        public void Export(String path, X509EncodingType encoding)
        {
            if (RawData == null)
            {
                throw new UninitializedObjectException();
            }
            String Base64;

            switch (encoding)
            {
            case X509EncodingType.Base64:
                Base64 = AsnFormatter.BinaryToString(RawData, EncodingType.Base64);
                File.WriteAllText(path, Base64);
                break;

            case X509EncodingType.Base64Header:
                Base64 = AsnFormatter.BinaryToString(RawData, EncodingType.Base64CrlHeader);
                File.WriteAllText(path, Base64);
                break;

            case X509EncodingType.Binary:
                File.WriteAllBytes(path, RawData);
                break;

            default:
                throw new ArgumentException("Specified encoding is not supported.");
            }
        }
Example #4
0
        public static String GetHexString(IEnumerable <Byte> rawData, Asn1Lite node)
        {
            Int32 startOffset = node.Offset + node.TagLength - node.PayloadLength;
            Int32 endOffset   = node.Offset + node.TagLength;

            return(AsnFormatter.BinaryToString(rawData.ToArray(), EncodingType.Hex, 0, startOffset, endOffset - startOffset));
        }
        void encode()
        {
            var rawData = new List <Byte>(IssuerName.RawData);

            rawData.AddRange(Asn1Utils.Encode(AsnFormatter.StringToBinary(SerialNumber, EncodingType.HexRaw), (Byte)Asn1Type.INTEGER));
            _rawData.AddRange(Asn1Utils.Encode(rawData.ToArray(), 48));
        }
        void m_decode(Byte[] rawData)
        {
            Asn1Reader asn = new Asn1Reader(rawData);

            if (asn.Tag != 48)
            {
                throw new Asn1InvalidTagException(asn.Offset);
            }
            asn.MoveNext();
            IncludedComponents = AuthorityKeyIdentifierFlags.None;
            do
            {
                switch (asn.Tag)
                {
                case 0x80:
                    KeyIdentifier       = AsnFormatter.BinaryToString(asn.GetPayload(), EncodingType.HexRaw, EncodingFormat.NOCRLF);
                    IncludedComponents |= AuthorityKeyIdentifierFlags.KeyIdentifier;
                    break;

                case 0xa1:
                    IssuerNames = new X509AlternativeNameCollection();
                    var bytes = Asn1Utils.Encode(asn.GetPayload(), 48);
                    IssuerNames.Decode(bytes);
                    IssuerNames.Close();
                    IncludedComponents |= AuthorityKeyIdentifierFlags.AlternativeNames;
                    break;

                case 0x82:
                    SerialNumber        = AsnFormatter.BinaryToString(asn.GetPayload());
                    IncludedComponents |= AuthorityKeyIdentifierFlags.SerialNumber;
                    break;
                }
            } while (asn.MoveNextCurrentLevel());
        }
Example #7
0
 static String DecodeOctetString(Asn1Reader asn)
 {
     return(AsnFormatter.BinaryToString(
                asn.RawData,
                EncodingType.HexRaw,
                EncodingFormat.NOCRLF, asn.PayloadStartOffset, asn.PayloadLength));
 }
Example #8
0
        /// <summary>
        /// Formats a current object to string.
        /// </summary>
        /// <returns>Formatted string.</returns>
        public override String ToString()
        {
            if (RawData == null)
            {
                return(String.Empty);
            }
            StringBuilder sb             = new StringBuilder();
            StringBuilder algParamString = new StringBuilder();

            if (Parameters == null)
            {
                algParamString.Append(" NULL");
            }
            else
            {
                algParamString.AppendLine("    ");
                EncodingType format = EncodingType.Hex;
                if (Parameters.Length > 16)
                {
                    format = EncodingType.HexAddress;
                }
                algParamString.Append(AsnFormatter.BinaryToString(Parameters, format).TrimEnd());
            }
            sb.Append(
                // TODO: algorithm identifier is more than signature algorithm identifier, it is commonly used
                // TODO: structure type in X.509 and PKCS world
                $@"Signature Algorithm:
    Algorithm ObjectId: {AlgorithmId.Format(true)}
    Algorithm Parameters:{algParamString}
");
            return(sb.ToString());
        }
Example #9
0
        /// <param name="nonceValue">The encoded data to use to create the extension.</param>
        /// <param name="critical"><strong>True</strong> if the extension is critical; otherwise, <strong>False</strong>.</param>
        public X509NonceExtension(AsnEncodedData nonceValue, Boolean critical)
            : base(new Oid("1.3.6.1.5.5.7.48.1.2", "OCSP Nonce"), nonceValue.RawData, critical)
        {
            Asn1Reader asn = new Asn1Reader(nonceValue.RawData);

            Value = AsnFormatter.BinaryToString(asn.GetPayload(), EncodingType.Hex);
        }
Example #10
0
        /// <summary>
        /// Formats a current object to string.
        /// </summary>
        /// <returns>Formatted string.</returns>
        public override String ToString()
        {
            var sb             = new StringBuilder();
            var algParamString = new StringBuilder();

            if (param == null)
            {
                algParamString.Append(" NULL");
            }
            else
            {
                algParamString.Append(Environment.NewLine + "    ");
                EncodingType format = EncodingType.Hex;
                if (param.Length > 16)
                {
                    format = EncodingType.HexAddress;
                }
                algParamString.Append(
                    AsnFormatter.BinaryToString(param, format)
                    .Replace(Environment.NewLine, Environment.NewLine + "    ")
                    .TrimEnd());
            }
            sb.Append(
                // TODO: algorithm identifier is more than signature algorithm identifier, it is commonly used
                // TODO: structure type in X.509 and PKCS world
                $@"Signature Algorithm:
    Algorithm ObjectId: {AlgorithmId.Format(true)}
    Algorithm Parameters:{algParamString}
");
            return(sb.ToString());
        }
Example #11
0
 public virtual String Format()
 {
     return("-----BEGIN RSA PRIVATE KEY-----" +
            Environment.NewLine +
            AsnFormatter.BinaryToString(RawData, EncodingType.Base64) +
            "-----End RSA PRIVATE KEY-----");
 }
Example #12
0
        void initializeFromAsn(Byte[] rawData)
        {
            Asn1Reader asn1 = new Asn1Reader(rawData);

            if (asn1.Tag != 48)
            {
                throw new Exception("Unable to decode. Input data is not valid ASN.1 encoded data.");
            }
            asn1.MoveNext();
            HashingAlgorithm = new AlgorithmIdentifier(Asn1Utils.Encode(asn1.GetPayload(), 48)).AlgorithmId;
            asn1.MoveNextCurrentLevel();
            // issuerNameHash
            if (asn1.Tag != 4)
            {
                throw new Exception("Unable to decode. The data is invalid");
            }
            IssuerNameId = AsnFormatter.BinaryToString(asn1.GetPayload()).Trim();
            asn1.MoveNextCurrentLevel();
            // issuerKeyId
            if (asn1.Tag != 4)
            {
                throw new Exception("Unable to decode. The data is invalid");
            }
            IssuerKeyId = AsnFormatter.BinaryToString(asn1.GetPayload()).Trim();
            asn1.MoveNextCurrentLevel();
            // serialnumber
            if (asn1.Tag != 2)
            {
                throw new Exception("Unable to decode. The data is invalid");
            }
            serialNumber = asn1.GetPayload();
            IsReadOnly   = true;
        }
 void initializeHash(Byte[] bytes)
 {
     UnderlyingType = typeof(String);
     PropertyValue  = bytes.Length == 0
                         ? null
                         : AsnFormatter.BinaryToString(bytes, EncodingType.Hex, EncodingFormat.NOCRLF);
 }
Example #14
0
 /// <summary>
 /// Encodes the current X509CRL2 object to a form specified in the <strong>encoding</strong> parameter.
 /// </summary>
 /// <param name="encoding">Encoding type. Default is <strong>CRYPT_STRING_BASE64X509CRLHEADER</strong>.</param>
 /// <returns>Encoded text.</returns>
 /// <remarks>
 ///		The following encoding types are <strong>not</strong> supported:
 ///		<list type="bullet">
 ///			<item>Binary</item>
 ///			<item>Base64Any</item>
 ///			<item>StringAny</item>
 ///			<item>HexAny</item>
 ///		</list>
 /// </remarks>
 /// <exception cref="ArgumentException">Specified encoding type is not supported.</exception>
 public String Encode(EncodingType encoding = EncodingType.Base64CrlHeader)
 {
     if (encoding == EncodingType.Binary)
     {
         throw new ArgumentException("Specified encoding is not supported.");
     }
     return(AsnFormatter.BinaryToString(_rawData, encoding));
 }
 /// <summary>
 /// Initializes a new instance of <strong>X509CertificateTrustListEntry</strong> class using a byte array that represents certificate's thumbprint.
 /// </summary>
 /// <param name="thumbprint">Byte array that represents certificate's thumbprint.</param>
 public X509CertificateTrustListEntry(Byte[] thumbprint)
 {
     if (thumbprint == null)
     {
         throw new ArgumentNullException(nameof(thumbprint));
     }
     Thumbprint = AsnFormatter.BinaryToString(thumbprint, format: EncodingFormat.NOCRLF, forceUpperCase: true);
 }
Example #16
0
        static IntPtr get_thumbptr(String thumbprint)
        {
            Byte[] thBytes  = AsnFormatter.StringToBinary(thumbprint, EncodingType.HexAny);
            IntPtr thumbPtr = Marshal.AllocHGlobal(thBytes.Length);

            Marshal.Copy(thBytes, 0, thumbPtr, thBytes.Length);
            return(thumbPtr);
        }
Example #17
0
 void initializeFromCertAndIssuer()
 {
     using (HashAlgorithm hasher = HashAlgorithm.Create(hashAlgorithm.FriendlyName)) {
         IssuerNameId = AsnFormatter.BinaryToString(hasher.ComputeHash(_issuerName.RawData)).Trim();
     }
     using (HashAlgorithm hasher = HashAlgorithm.Create(hashAlgorithm.FriendlyName)) {
         IssuerKeyId = AsnFormatter.BinaryToString(hasher.ComputeHash(issuerPublicKey)).Trim();
     }
 }
        /// <summary>
        /// Displays an X.509 certificate dump.
        /// </summary>
        /// <returns>Formatted string.</returns>
        public static String Format(this X509Certificate2 cert)
        {
            if (cert == null)
            {
                return(String.Empty);
            }

            var    blob     = new SignedContentBlob(cert.RawData, ContentBlobType.SignedBlob);
            String sigValue = AsnFormatter.BinaryToString(blob.Signature.Value.Reverse().ToArray(), EncodingType.HexAddress)
                              .Replace(Environment.NewLine, Environment.NewLine + "    ");
            var sb = new StringBuilder();


            sb.Append($@"X509 Certificate:
Version: {cert.Version} (0x{cert.Version - 1:x})
Serial Number: {cert.SerialNumber}

{blob.SignatureAlgorithm}
Issuer:
    {cert.IssuerName.FormatReverse(true).Replace(Environment.NewLine, Environment.NewLine + "    ")}
  Name Hash(md5)    : {getNameHash(cert.IssuerName, MD5.Create())}
  Name Hash(sha1)   : {getNameHash(cert.IssuerName, SHA1.Create())}
  Name Hash(sha256) : {getNameHash(cert.IssuerName, SHA256.Create())}

Valid From: {cert.NotBefore}
Valid To  : {cert.NotAfter}

Subject:
    {cert.SubjectName.FormatReverse(true).Replace(Environment.NewLine, Environment.NewLine + "    ")}
  Name Hash(md5)    : {getNameHash(cert.SubjectName, MD5.Create())}
  Name Hash(sha1)   : {getNameHash(cert.SubjectName, SHA1.Create())}
  Name Hash(sha256) : {getNameHash(cert.SubjectName, SHA256.Create())}

{cert.PublicKey.Format().TrimEnd()}

Certificate Extensions: {cert.Extensions.Count}
{cert.Extensions.Format()}

{blob.SignatureAlgorithm.ToString().TrimEnd()}
Signature: UnusedBits={blob.Signature.UnusedBits}
    {sigValue}
");
            sb.AppendLine(cert.Issuer.Equals(cert.Subject, StringComparison.InvariantCultureIgnoreCase)
                ? "Root Certificate: Subject matches Issuer"
                : "Non-root Certificate");
            sb.AppendLine($"Key Id Hash(sha1)       : {getHashData(cert.PublicKey.Encode(), SHA1.Create())}");
            sb.AppendLine($"Key Id Hash(rfc-md5)    : {getHashData(cert.PublicKey.EncodedKeyValue.RawData, MD5.Create())}");
            sb.AppendLine($"Key Id Hash(rfc-sha1)   : {getHashData(cert.PublicKey.EncodedKeyValue.RawData, SHA1.Create())}");
            sb.AppendLine($"Key Id Hash(rfc-sha256) : {getHashData(cert.PublicKey.EncodedKeyValue.RawData, SHA256.Create())}");
            sb.AppendLine($"Key Id Hash(pin-sha256-b64) : {getKeyPinHash(cert.PublicKey, SHA256.Create())}");
            sb.AppendLine($"Key Id Hash(pin-sha256-hex) : {getHashData(cert.PublicKey.Encode(), SHA256.Create())}");
            sb.AppendLine($"Cert Hash(md5)    : {getCertHash(cert, MD5.Create())}");
            sb.AppendLine($"Cert Hash(sha1)   : {getCertHash(cert, SHA1.Create())}");
            sb.AppendLine($"Cert Hash(sha256) : {getCertHash(cert, SHA256.Create())}");
            sb.AppendLine($"Signature Hash    : {getHashData(blob.GetRawSignature(), SHA1.Create())}");
            return(sb.ToString());
        }
Example #19
0
 void m_initialize()
 {
     Char[] noncechars = DateTime.Now.Ticks.ToString(CultureInfo.InvariantCulture).ToCharArray();
     Critical = false;
     Oid      = _oid;
     Byte[] charBytes = noncechars.Select(Convert.ToByte).ToArray();
     Value   = AsnFormatter.BinaryToString(charBytes, EncodingType.Hex);
     RawData = Asn1Utils.Encode(charBytes.ToArray(), 4);
 }
Example #20
0
 static String DecodeInteger(Asn1Reader asn)
 {
     return(Settings.Default.IntAsInt
         ? new BigInteger(asn.GetPayload().Reverse().ToArray()).ToString()
         : AsnFormatter.BinaryToString(
                asn.RawData,
                EncodingType.HexRaw,
                EncodingFormat.NOCRLF, asn.PayloadStartOffset, asn.PayloadLength));
 }
Example #21
0
        void decode(Byte[] rawData)
        {
            var asn = new Asn1Reader(rawData);

            asn.MoveNext();
            IssuerName = new X500DistinguishedName(asn.GetTagRawData());
            asn.MoveNextCurrentLevelAndExpectTags((Byte)Asn1Type.INTEGER);
            SerialNumber = AsnFormatter.BinaryToString(asn);
            _rawData.AddRange(rawData);
        }
Example #22
0
        void decode(Byte[] rawData)
        {
            Asn1Reader asn = new Asn1Reader(rawData);

            asn.MoveNext();
            IssuerName = new X500DistinguishedName(asn.GetTagRawData());
            asn.MoveNextAndExpectTags((Byte)Asn1Type.INTEGER);
            SerialNumber = AsnFormatter.BinaryToString(asn);
            RawData      = rawData;
        }
        /// <summary>
        /// Gets formatted tag value.
        /// </summary>
        /// <returns>Formatted tag value.</returns>
        public override String GetDisplayValue()
        {
            StringBuilder SB = new StringBuilder();

            SB.AppendFormat("Unused bits={0}\r\n", UnusedBits);
            String tempString = AsnFormatter.BinaryToString(Value, EncodingType.HexAddress);

            SB.AppendFormat("{0}\r\n", tempString.Replace("\r\n", "\r\n    ").TrimEnd());
            return(SB.ToString());
        }
        void initializeFromKeyId(String keyId, Boolean critical)
        {
            Oid                = _oid;
            Critical           = critical;
            IncludedComponents = AuthorityKeyIdentifierFlags.KeyIdentifier;

            Byte[] keyIdBytes = AsnFormatter.StringToBinary(keyId);
            KeyIdentifier = AsnFormatter.BinaryToString(keyIdBytes, EncodingType.HexRaw, EncodingFormat.NOCRLF);
            RawData       = Asn1Utils.Encode(AsnFormatter.StringToBinary(keyId, EncodingType.Hex), 0x80);
            RawData       = Asn1Utils.Encode(RawData, 48);
        }
Example #25
0
 /// <summary>
 /// Encodes the current X509CRL2 object to a form specified in the <strong>encoding</strong> parameter.
 /// </summary>
 /// <param name="encoding">Encoding type. Default is <strong>CRYPT_STRING_BASE64X509CRLHEADER</strong>.</param>
 /// <returns>Encoded text.</returns>
 /// <remarks>
 ///		The following encoding types are not supported:
 ///		<list type="bullet">
 ///			<item>Binary</item>
 ///			<item>Base64Any</item>
 ///			<item>StringAny</item>
 ///			<item>HexAny</item>
 ///		</list>
 /// </remarks>
 /// <exception cref="ArgumentException">Specified encoding type is not supported.</exception>
 /// <exception cref="UninitializedObjectException">An object is not initialized.</exception>
 public String Encode(EncodingType encoding = EncodingType.Base64CrlHeader)
 {
     if (RawData == null)
     {
         throw new UninitializedObjectException();
     }
     if (encoding == EncodingType.Binary)
     {
         throw new ArgumentException("Specified encoding is not supported.");
     }
     return(AsnFormatter.BinaryToString(RawData, encoding));
 }
Example #26
0
        /// <inheritdoc />
        public override String ToString()
        {
            var sb = new StringBuilder();

            sb.Append(
                $@"
Hash Algorithm: {AlgorithmIdentifier.AlgorithmId.Format(true)}
Hash Value :
    {AsnFormatter.BinaryToString(_msgHash.ToArray(), EncodingType.HexAddress).TrimEnd().Replace("\r\n", "\r\n    ")}
"
                );
            return(sb.ToString());
        }
Example #27
0
 static String DecodeBitString(Asn1Reader asn)
 {
     return(String.Format(
                "Unused bits: {0} : {1}",
                asn.RawData[asn.PayloadStartOffset],
                AsnFormatter.BinaryToString(
                    asn.RawData,
                    EncodingType.HexRaw,
                    EncodingFormat.NOCRLF,
                    asn.PayloadStartOffset + 1,
                    asn.PayloadLength - 1)
                ));
 }
 void generateSerialNumber()
 {
     if (String.IsNullOrWhiteSpace(SerialNumber))
     {
         using (MD5 hasher = MD5.Create()) {
             serialNumber = hasher.ComputeHash(Guid.NewGuid().ToByteArray());
         }
     }
     else
     {
         serialNumber = AsnFormatter.StringToBinary(SerialNumber, EncodingType.Hex);
     }
 }
        /// <summary>
        /// Encodes current instance of CTL entry to ASN.1-encoded byte array.
        /// </summary>
        /// <returns>
        /// ASN.1-encoded byte array.
        /// </returns>
        public Byte[] Encode()
        {
            Byte[] thumbBytes = AsnFormatter.StringToBinary(Thumbprint, EncodingType.HexRaw);
            var    retValue   = new List <Byte>(Asn1Utils.Encode(thumbBytes, (Byte)Asn1Type.OCTET_STRING));

            if (_attributes.Count == 0)
            {
                return(Asn1Utils.Encode(retValue.ToArray(), 48));
            }
            var asn = new Asn1Reader(Attributes.Encode());

            retValue.AddRange(Asn1Utils.Encode(asn.GetPayload(), 49));
            return(Asn1Utils.Encode(retValue.ToArray(), 48));
        }
Example #30
0
        public String Encode(X509EncodingType encoding)
        {
            switch (encoding)
            {
            case X509EncodingType.Base64:
                return(Convert.ToBase64String(_rawData, Base64FormattingOptions.InsertLineBreaks));

            case X509EncodingType.Base64Header:
                return(AsnFormatter.BinaryToString(_rawData, EncodingType.Base64CrlHeader));

            default:
                throw new ArgumentException("Binary encoding is not supported.");
            }
        }