Exemple #1
0
        void m_initialize(Byte[] rawData)
        {
            Asn1Reader asn = new Asn1Reader(rawData);

            if (asn.Tag != 48)
            {
                throw new Asn1InvalidTagException(asn.Offset);
            }
            asn.MoveNext();
            SerialNumber = Asn1Utils.DecodeInteger(asn.GetTagRawData(), true);
            asn.MoveNext();
            if (asn.Tag != (Byte)Asn1Type.UTCTime && asn.Tag != (Byte)Asn1Type.GeneralizedTime)
            {
                throw new Asn1InvalidTagException(asn.Offset);
            }
            if (asn.Tag == (Byte)Asn1Type.UTCTime)
            {
                RevocationDate = new Asn1UtcTime(asn.GetTagRawData()).Value;
            }
            if (asn.Tag == (Byte)Asn1Type.GeneralizedTime)
            {
                RevocationDate = Asn1Utils.DecodeGeneralizedTime(asn.GetTagRawData());
            }
            if (asn.MoveNext())
            {
                var extensions = new X509ExtensionCollection();
                extensions.Decode(asn.GetTagRawData());
                X509Extension crlReason = extensions[X509CertExtensions.X509CRLReasonCode];
                if (crlReason != null)
                {
                    ReasonCode = crlReason.RawData[2];
                }
            }
            RawData = rawData;
        }
        void decode(Byte[] rawData)
        {
            var asn = new Asn1Reader(rawData);

            asn.MoveNext();
            Version = (Int32)Asn1Utils.DecodeInteger(asn.GetTagRawData());
            asn.MoveNextCurrentLevel();
            Issuer = new PkcsSubjectIdentifier(asn.GetTagRawData());
            asn.MoveNextCurrentLevel();
            HashAlgorithm = new AlgorithmIdentifier(asn.GetTagRawData());
            asn.MoveNextCurrentLevel();
            if (asn.Tag == 0xa0)
            {
                _authAttributes.Decode(asn.GetTagRawData());
                asn.MoveNextCurrentLevel();
            }
            EncryptedHashAlgorithm = new AlgorithmIdentifier(asn.GetTagRawData());
            asn.MoveNextCurrentLevel();
            EncryptedHash = asn.GetPayload();
            if (asn.MoveNextCurrentLevel() && asn.Tag == 0xa1)
            {
                _unauthAttributes.Decode(asn.GetTagRawData());
            }
            _rawData.AddRange(rawData);
        }
        void m_decode(Byte[] rawData)
        {
            CrossCertDistributionPoints = new X509AlternativeNameCollection();

            Asn1Reader asn = new Asn1Reader(rawData);

            if (asn.Tag != 48)
            {
                throw new ArgumentException("The data is invalid");
            }
            asn.MoveNext();
            if (asn.Tag == (Byte)Asn1Type.INTEGER)
            {
                DeltaSyncTimeInSeconds = (Int32)Asn1Utils.DecodeInteger(asn.GetTagRawData());
                asn.MoveNext();
            }
            asn.MoveNext();
            do
            {
                var altNames = new X509AlternativeNameCollection();
                altNames.Decode(asn.GetTagRawData());
                CrossCertDistributionPoints.AddRange(altNames);
            } while (asn.MoveNextCurrentLevel());
            CrossCertDistributionPoints.Close();
        }
        void decode(Asn1Reader asn)
        {
            if (asn.Tag != 48)
            {
                throw new Asn1InvalidTagException(asn.Offset);
            }
            RawData = asn.GetTagRawData();
            Int32 offset = asn.Offset;

            asn.MoveNext();
            SerialNumber = Asn1Utils.DecodeInteger(asn.GetTagRawData(), true);
            asn.MoveNextAndExpectTags(Asn1Type.UTCTime, Asn1Type.GeneralizedTime);
            switch (asn.Tag)
            {
            case (Byte)Asn1Type.UTCTime:
                RevocationDate = new Asn1UtcTime(asn.GetTagRawData()).Value;
                break;

            case (Byte)Asn1Type.GeneralizedTime:
                RevocationDate = Asn1Utils.DecodeGeneralizedTime(asn.GetTagRawData());
                break;
            }
            if (asn.MoveNextSibling())
            {
                // use high-performant extension decoder instead of generic one.
                // Since CRLs may store a hundreds of thousands entries, this is
                // pretty reasonable to save loops whenever possible.
                readCrlReasonCode(asn);
            }
            asn.Seek(offset);
        }
Exemple #5
0
        void m_decode(Byte[] rawData)
        {
            Asn1Reader asn = new Asn1Reader(rawData);

            if (asn.Tag != 48)
            {
                throw new Asn1InvalidTagException(asn.Offset);
            }
            asn.MoveNext();
            Oid oid = Asn1Utils.DecodeObjectIdentifier(asn.GetTagRawData());

            switch (oid.Value)
            {
            case "1.3.6.1.5.5.7.2.1":
                Type = X509PolicyQualifierType.CpsUrl;
                asn.MoveNext();
                PolicyUrl = new Uri(Asn1Utils.DecodeIA5String(asn.GetTagRawData()).Replace("\0", null));
                break;

            case "1.3.6.1.5.5.7.2.2":
                Type = X509PolicyQualifierType.UserNotice;
                if (!asn.MoveNext())
                {
                    return;
                }
                if (asn.Tag != 48)
                {
                    throw new Asn1InvalidTagException(asn.Offset);
                }
                asn.MoveNext();
                if (asn.Tag == 48)
                {
                    Int32 offset = asn.Offset;
                    asn.MoveNext();
                    NoticeReference = Asn1Utils.DecodeAnyString(asn.GetTagRawData(), new[] { Asn1Type.IA5String, Asn1Type.VisibleString, Asn1Type.BMPString, Asn1Type.UTF8String });
                    asn.MoveNext();
                    asn.MoveNext();
                    NoticeNumber = (Int32)Asn1Utils.DecodeInteger(asn.GetTagRawData());
                    asn.MoveToPosition(offset);
                    if (asn.MoveNextCurrentLevel())
                    {
                        NoticeText = Asn1Utils.DecodeAnyString(asn.GetTagRawData(), new[] { Asn1Type.IA5String, Asn1Type.VisibleString, Asn1Type.BMPString, Asn1Type.UTF8String });
                    }
                }
                else
                {
                    NoticeText = Asn1Utils.DecodeAnyString(asn.GetTagRawData(), new[] { Asn1Type.IA5String, Asn1Type.VisibleString, Asn1Type.BMPString, Asn1Type.UTF8String });
                }
                break;

            default: m_reset(); return;
            }
        }
Exemple #6
0
 void decodeRsaPss(Asn1Reader asn)
 {
     PaddingScheme = SignaturePadding.PSS;
     asn.MoveNext();
     HashingAlgorithm = asn.Tag == 0xa0
         ? new Oid2(new AlgorithmIdentifier(asn.GetPayload()).AlgorithmId, false)
         : new Oid2(AlgorithmOids.SHA1, false);
     // feed asn reader to salt identifier
     while (asn.MoveNextCurrentLevel() && asn.Tag != 0xa2)
     {
     }
     PssSaltByteCount = asn.Tag == 0xa2
         ? (Int32)Asn1Utils.DecodeInteger(asn.GetPayload())
         : 20;
 }
Exemple #7
0
        void m_decode(Byte[] rawData)
        {
            Asn1Reader asn = new Asn1Reader(rawData);

            asn.MoveNext();
            do
            {
                var integer = Asn1Utils.Encode(asn.GetPayload(), (Byte)Asn1Type.INTEGER);
                switch (asn.Tag)
                {
                case 0x80: RequireExplicitPolicy = (Int32)Asn1Utils.DecodeInteger(integer); break;

                case 0x81: InhibitPolicyMapping = (Int32)Asn1Utils.DecodeInteger(integer); break;

                default: throw new InvalidDataException("The data is invalid");
                }
            } while (asn.MoveNextCurrentLevel());
        }
Exemple #8
0
        void decode(Byte[] rawData)
        {
            Asn1Reader asn = new Asn1Reader(rawData);

            asn.MoveNext();
            Version = (Int32)Asn1Utils.DecodeInteger(asn.GetTagRawData());
            asn.MoveNextCurrentLevel();
            Issuer = new SubjectIdentifier2(asn.GetTagRawData());
            asn.MoveNextCurrentLevel();
            HashAlgorithm = new AlgorithmIdentifier(asn.GetTagRawData());
            asn.MoveNextCurrentLevel();
            if (asn.Tag == 0xa0)
            {
                AuthenticatedAttributes.Decode(asn.GetTagRawData());
                asn.MoveNextCurrentLevel();
            }
            EncryptedHashAlgorithm = new AlgorithmIdentifier(asn.GetTagRawData());
            asn.MoveNextCurrentLevel();
            EncryptedHash = asn.GetPayload();
        }
Exemple #9
0
        void m_initialize(Byte[] rawData)
        {
            Asn1Reader asn = new Asn1Reader(rawData);

            if (asn.Tag != 48)
            {
                throw new InvalidDataException();
            }
            asn.MoveNext();
            if (asn.Tag != (Byte)Asn1Type.INTEGER)
            {
                throw new InvalidDataException();
            }
            SerialNumber = Asn1Utils.DecodeInteger(asn.GetTagRawData(), true);
            asn.MoveNext();
            if (asn.Tag != (Byte)Asn1Type.UTCTime && asn.Tag != (Byte)Asn1Type.Generalizedtime)
            {
                throw new InvalidDataException();
            }
            if (asn.Tag == (Byte)Asn1Type.UTCTime)
            {
                RevocationDate = Asn1Utils.DecodeUTCTime(asn.GetTagRawData());
            }
            if (asn.Tag == (Byte)Asn1Type.Generalizedtime)
            {
                RevocationDate = Asn1Utils.DecodeGeneralizedTime(asn.GetTagRawData());
            }
            if (asn.MoveNext())
            {
                foreach (X509Extension item in Crypt32Managed.DecodeX509Extensions(asn.GetTagRawData()).Cast <X509Extension>().Where(item => item.Oid.Value == "2.5.29.21"))
                {
                    ReasonCode = item.RawData[2];
                }
            }
            RawData = rawData;
        }
Exemple #10
0
        /// <summary>
        /// Returns a formatted version of the Abstract Syntax Notation One (ASN.1)-encoded data as a string.
        /// </summary>
        /// <param name="multiLine">
        /// <strong>True</strong> if the return string should contain carriage returns; otherwise, <strong>False</strong>
        /// </param>
        /// <returns>
        /// A formatted string that represents the Abstract Syntax Notation One (ASN.1)-encoded data
        /// </returns>
        /// <remarks>Use this method if you need to print Abstract Syntax Notation One (ASN.1)-encoded data or output the
        /// information to a text box. Use the <strong>multiLine</strong> parameter to control the layout of the output.</remarks>
        public override String Format(Boolean multiLine)
        {
            if (RawData != null && RawData.Length != 0)
            {
                StringBuilder SB  = new StringBuilder();
                Asn1Reader    asn = new Asn1Reader(RawData);
                switch (Oid.Value)
                {
                // Content Type
                case "1.2.840.113549.1.9.3":
                    Oid value = Asn1Utils.DecodeObjectIdentifier(asn.RawData);
                    SB.Append("Content type (OID=1.2.840.113549.1.9.3): ");
                    if (multiLine)
                    {
                        SB.Append(Environment.NewLine + "    " + value.Value);
                    }
                    else
                    {
                        SB.Append(value.Value);
                    }
                    if (!String.IsNullOrEmpty(value.FriendlyName))
                    {
                        SB.Append("(" + value.FriendlyName + ")");
                    }
                    break;

                // Message Digest
                case "1.2.840.113549.1.9.4":
                    SB.Append("Message Digest (OID=1.2.840.113549.1.9.4): ");
                    if (multiLine)
                    {
                        SB.Append(Environment.NewLine + Asn1Utils.DecodeOctetString(asn.RawData));
                    }
                    else
                    {
                        SB.Append(Asn1Utils.DecodeOctetString(asn.RawData));
                    }
                    break;

                // Renewal certificate
                case "1.3.6.1.4.1.311.13.1":
                    X509Certificate2 cert = new X509Certificate2(asn.RawData);
                    SB.Append("Renewal Certificate (OID=1.3.6.1.4.1.311.13.1): ");
                    if (multiLine)
                    {
                        SB.Append(Environment.NewLine + "    " + cert.ToString().Replace("\r\n", "\r\n    "));
                    }
                    else
                    {
                        SB.Append(cert.ToString().Replace("\r\n", " ").Replace("   ", " ").Replace("  ", ", "));
                    }
                    break;

                //  Enrollment Name Value Pair
                case "1.3.6.1.4.1.311.13.2.1":
                    asn.MoveNext();
                    SB.Append("Enrollment Name Value Pair (OID=1.3.6.1.4.1.311.13.2.1): ");
                    if (multiLine)
                    {
                        SB.Append(Environment.NewLine + "    ");
                    }
                    SB.Append(Encoding.BigEndianUnicode.GetString(asn.GetPayload()) + "=");
                    asn.MoveNext();
                    SB.Append(Encoding.BigEndianUnicode.GetString(asn.GetPayload()));
                    if (multiLine)
                    {
                        SB.Append(Environment.NewLine);
                    }
                    break;

                // CSP Info
                case "1.3.6.1.4.1.311.13.2.2":
                    asn.MoveNext();
                    SB.Append("CSP Info (OID=1.3.6.1.4.1.311.13.2.2): ");
                    if (multiLine)
                    {
                        SB.Append(Environment.NewLine + "    ");
                    }
                    if (asn.Tag == (Int32)Asn1Type.INTEGER)
                    {
                        SB.Append("KeySpec: " + asn.GetPayload()[0]);
                        asn.MoveNext();
                    }
                    if (multiLine)
                    {
                        SB.Append(Environment.NewLine + "    ");
                    }
                    else
                    {
                        SB.Append(", ");
                    }
                    if (asn.Tag == (Int32)Asn1Type.BMPString)
                    {
                        SB.Append("Provider: " + Encoding.BigEndianUnicode.GetString(asn.GetPayload()));
                        asn.MoveNext();
                    }
                    if (multiLine)
                    {
                        SB.Append(Environment.NewLine + "    ");
                    }
                    else
                    {
                        SB.Append(", ");
                    }
                    if (asn.Tag == (Int32)Asn1Type.BIT_STRING)
                    {
                        SB.Append("Signature unused bits: " + asn.GetPayload()[0]);
                    }
                    if (multiLine)
                    {
                        SB.Append(Environment.NewLine);
                    }
                    break;

                //OS version
                case "1.3.6.1.4.1.311.13.2.3":
                    SB.Append("OS Version (OID=1.3.6.1.4.1.311.13.2.3): " + Asn1Utils.DecodeIA5String(asn.GetTagRawData()));
                    if (multiLine)
                    {
                        SB.Append(Environment.NewLine);
                    }
                    break;

                // client info
                case "1.3.6.1.4.1.311.21.20":
                    asn.MoveNext();
                    SB.Append("Client Info (OID=1.3.6.1.4.1.311.21.20): ");
                    if (multiLine)
                    {
                        SB.Append(Environment.NewLine + "    ");
                    }
                    if (asn.Tag == (Int32)Asn1Type.INTEGER)
                    {
                        Int64 id = Asn1Utils.DecodeInteger(asn.GetTagRawData());
                        SB.Append("Client ID: " + (ClientIdEnum)id + " (" + id + ")");
                        asn.MoveNext();
                    }
                    if (multiLine)
                    {
                        SB.Append(Environment.NewLine + "    ");
                    }
                    else
                    {
                        SB.Append(", ");
                    }
                    if (asn.Tag == (Int32)Asn1Type.UTF8String)
                    {
                        SB.Append("Computer name: " + Asn1Utils.DecodeUTF8String(asn.GetTagRawData()));
                        if (multiLine)
                        {
                            SB.Append(Environment.NewLine + "    ");
                        }
                        else
                        {
                            SB.Append(", ");
                        }
                        asn.MoveNext();
                        SB.Append("User name: " + Asn1Utils.DecodeUTF8String(asn.GetTagRawData()));
                        if (multiLine)
                        {
                            SB.Append(Environment.NewLine + "    ");
                        }
                        else
                        {
                            SB.Append(", ");
                        }
                        asn.MoveNext();
                        SB.Append("Process name: " + Asn1Utils.DecodeUTF8String(asn.GetTagRawData()));
                        if (multiLine)
                        {
                            SB.Append(Environment.NewLine);
                        }
                    }
                    break;

                // szOID_NT_PRINCIPAL_NAME
                case "1.3.6.1.4.1.311.20.2.3":
                    if (asn.Tag == (Byte)Asn1Type.UTF8String)
                    {
                        SB.Append("User Principal Name (OID=1.3.6.1.4.1.311.20.2.3): " + Asn1Utils.DecodeUTF8String(asn.GetTagRawData()));
                        if (multiLine)
                        {
                            SB.Append(Environment.NewLine);
                        }
                    }
                    break;

                // szOID_NTDS_REPLICATION
                case "1.3.6.1.4.1.311.25.1":
                    if (asn.Tag == (Byte)Asn1Type.OCTET_STRING)
                    {
                        SB.Append("NTDS Replication GUID (OID=1.3.6.1.4.1.311.25.1): " + new Guid(asn.GetPayload()));
                        if (multiLine)
                        {
                            SB.Append(Environment.NewLine);
                        }
                    }
                    break;

                    #region PropIDs
                // CERT_SHA1_HASH_PROP_ID
                case "1.3.6.1.4.1.311.10.11.3":
                    if (asn.Tag == (Byte)Asn1Type.OCTET_STRING)
                    {
                        SB.Append("SHA1 hash (OID=1.3.6.1.4.1.311.10.11.3): " + Asn1Utils.DecodeOctetString(asn.GetTagRawData()));
                        if (multiLine)
                        {
                            SB.Append(Environment.NewLine);
                        }
                    }
                    break;

                // CERT_MD5_HASH_PROP_ID
                case "1.3.6.1.4.1.311.10.11.4":
                    if (asn.Tag == (Byte)Asn1Type.OCTET_STRING)
                    {
                        SB.Append("SHA1 hash (OID=1.3.6.1.4.1.311.10.11.4): " + Asn1Utils.DecodeOctetString(asn.GetTagRawData()));
                        if (multiLine)
                        {
                            SB.Append(Environment.NewLine);
                        }
                    }
                    break;

                // CERT_ENHKEY_USAGE_PROP_ID
                case "1.3.6.1.4.1.311.10.11.9":
                    if (asn.Tag == (Byte)Asn1Type.OCTET_STRING)
                    {
                        asn.MoveNext();
                        asn.MoveNext();
                        SB.Append("Enhanced Key Usages (OID=1.3.6.1.4.1.311.10.11.9): ");
                        if (multiLine)
                        {
                            SB.Append(Environment.NewLine + "    ");
                        }
                        do
                        {
                            if (Asn1Utils.DecodeObjectIdentifier(asn.GetTagRawData()).FriendlyName != null)
                            {
                                SB.Append(Asn1Utils.DecodeObjectIdentifier(asn.GetTagRawData()).Value + " (" + Asn1Utils.DecodeObjectIdentifier(asn.GetTagRawData()).FriendlyName + ") ");
                            }
                            else
                            {
                                SB.Append(Asn1Utils.DecodeObjectIdentifier(asn.GetTagRawData()).Value);
                            }
                            if (multiLine)
                            {
                                SB.Append(Environment.NewLine + "    ");
                            }
                            else
                            {
                                SB.Append(", ");
                            }
                        } while (asn.MoveNext());
                    }
                    break;

                // CERT_FRIENDLY_NAME_PROP_ID
                case "1.3.6.1.4.1.311.10.11.11":
                    if (asn.Tag == (Byte)Asn1Type.OCTET_STRING)
                    {
                        SB.Append("Friendly name (OID=1.3.6.1.4.1.311.10.11.11): " + Encoding.Unicode.GetString(asn.GetPayload()));
                        if (multiLine)
                        {
                            SB.Append(Environment.NewLine);
                        }
                    }
                    break;

                // CERT_KEY_IDENTIFIER_PROP_ID
                case "1.3.6.1.4.1.311.10.11.20":
                    if (asn.Tag == (Byte)Asn1Type.OCTET_STRING)
                    {
                        SB.Append("Subject Key Identifier (OID=1.3.6.1.4.1.311.10.11.20): " + Asn1Utils.DecodeOctetString(asn.GetTagRawData()));
                        if (multiLine)
                        {
                            SB.Append(Environment.NewLine);
                        }
                    }
                    break;

                // CERT_SUBJECT_NAME_MD5_HASH_PROP_ID
                case "1.3.6.1.4.1.311.10.11.29":
                    if (asn.Tag == (Byte)Asn1Type.OCTET_STRING)
                    {
                        SB.Append("Subject name MD5 hash (OID=1.3.6.1.4.1.311.10.11.29): " + Asn1Utils.DecodeOctetString(asn.GetTagRawData()));
                        if (multiLine)
                        {
                            SB.Append(Environment.NewLine);
                        }
                    }
                    break;

                    #endregion
                default:
                    SB.Append("Unknown attribute (OID=" + Oid.Value);
                    if (!String.IsNullOrEmpty(Oid.FriendlyName))
                    {
                        SB.Append(" (" + Oid.FriendlyName + ")");
                    }
                    SB.Append("): ");
                    if (multiLine)
                    {
                        String tempString = AsnFormatter.BinaryToString(RawData, EncodingType.HexAsciiAddress);
                        SB.Append(tempString.Replace("\r\n", "\r\n    ") + Environment.NewLine);
                        SB.Append(Environment.NewLine);
                    }
                    else
                    {
                        SB.Append(AsnFormatter.BinaryToString(RawData) + Environment.NewLine);
                    }
                    break;
                }
                return(SB.ToString());
            }
            return(base.Format(multiLine));
        }
Exemple #11
0
        void m_decode(Byte[] rawData)
        {
            try {
                Type = X509CrlType.BaseCrl;
                var signedInfo = new SignedContentBlob(rawData, ContentBlobType.SignedBlob);
                // signature and alg
                signature          = signedInfo.Signature.Value;
                sigUnused          = signedInfo.Signature.UnusedBits;
                SignatureAlgorithm = signedInfo.SignatureAlgorithm.AlgorithmId;
                // tbs
                Asn1Reader asn = new Asn1Reader(signedInfo.ToBeSignedData);
                if (!asn.MoveNext())
                {
                    throw new Asn1InvalidTagException();
                }
                // version
                if (asn.Tag == (Byte)Asn1Type.INTEGER)
                {
                    Version = (Int32)Asn1Utils.DecodeInteger(asn.GetTagRawData()) + 1;
                    asn.MoveNextCurrentLevel();
                }
                else
                {
                    Version = 1;
                }
                // hash algorithm
                var h = new AlgorithmIdentifier(asn.GetTagRawData());
                if (h.AlgorithmId.Value != SignatureAlgorithm.Value)
                {
                    throw new CryptographicException("Algorithm mismatch.");
                }
                if (!asn.MoveNextCurrentLevel())
                {
                    throw new Asn1InvalidTagException();
                }
                // issuer
                IssuerName = new X500DistinguishedName(asn.GetTagRawData());
                // NextUpdate, RevokedCerts and Extensions are optional. Ref: RFC5280, p.118
                if (!asn.MoveNextCurrentLevel())
                {
                    throw new Asn1InvalidTagException();
                }
                switch (asn.Tag)
                {
                case (Byte)Asn1Type.UTCTime:
                    ThisUpdate = Asn1Utils.DecodeUTCTime(asn.GetTagRawData());
                    break;

                case (Byte)Asn1Type.Generalizedtime:
                    ThisUpdate = Asn1Utils.DecodeGeneralizedTime(asn.GetTagRawData());
                    break;

                default:
                    throw new Asn1InvalidTagException();
                }
                if (!asn.MoveNextCurrentLevel())
                {
                    return;
                }
                switch (asn.Tag)
                {
                case (Byte)Asn1Type.UTCTime:
                case (Byte)Asn1Type.Generalizedtime:
                    switch (asn.Tag)
                    {
                    case (Byte)Asn1Type.UTCTime:
                        NextUpdate = Asn1Utils.DecodeUTCTime(asn.GetTagRawData());
                        break;

                    case (Byte)Asn1Type.Generalizedtime:
                        NextUpdate = Asn1Utils.DecodeGeneralizedTime(asn.GetTagRawData());
                        break;

                    default:
                        throw new Asn1InvalidTagException();
                    }
                    if (!asn.MoveNextCurrentLevel())
                    {
                        return;
                    }
                    if (asn.Tag == 48)
                    {
                        getRevCerts(asn);
                        if (!asn.MoveNextCurrentLevel())
                        {
                            return;
                        }
                        getExts(asn);
                    }
                    else
                    {
                        getExts(asn);
                    }
                    break;

                case 48:
                    if (asn.Tag == 48)
                    {
                        getRevCerts(asn);
                        if (!asn.MoveNextCurrentLevel())
                        {
                            return;
                        }
                        getExts(asn);
                    }
                    else
                    {
                        getExts(asn);
                    }
                    break;

                default:
                    getExts(asn);
                    break;
                }
            } catch (Exception e) {
                throw new CryptographicException("Cannot find the requested object.", e);
            }
        }
 void decodeVersion(Wincrypt.CRYPTOAPI_BLOB blob)
 {
     Byte[] rawData = new Byte[blob.cbData];
     Marshal.Copy(blob.pbData, rawData, 0, (Int32)blob.cbData);
     Version = (Int32)Asn1Utils.DecodeInteger(rawData);
 }
Exemple #13
0
 void getVersion(Asn1Reader asn)
 {
     asn.MoveNextAndExpectTags((Byte)Asn1Type.INTEGER);
     Version = (Int32)(Asn1Utils.DecodeInteger(asn.GetTagRawData()) + 1);
 }