Ejemplo n.º 1
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;
        }
Ejemplo n.º 2
0
        void decode(Byte[] rawData)
        {
            reset();
            _rawData.AddRange(rawData);
            cms = new DefaultSignedPkcs7(rawData);
            if (cms.ContentType.Value != ctlOid.Value)
            {
                throw new ArgumentException("Decoded data is not valid certificate trust list.");
            }
            var asn = new Asn1Reader(Asn1Utils.Encode(cms.Content, 48));

            asn.MoveNextAndExpectTags(48);
            decodeUsages(asn);
            Boolean reachedEnd = false;

            while (asn.MoveNextCurrentLevel())
            {
                if (reachedEnd)
                {
                    break;
                }
                switch (asn.Tag)
                {
                case (Byte)Asn1Type.OCTET_STRING:
                    decodeListIdentifier(asn);
                    break;

                case (Byte)Asn1Type.INTEGER:
                    decodeSequenceNumber(asn);
                    break;

                case (Byte)Asn1Type.UTCTime:
                case (Byte)Asn1Type.GeneralizedTime:
                    decodeValidity(asn);
                    reachedEnd = true;
                    break;

                default:
                    reachedEnd = true;
                    break;
                }
            }
            decodeAlgId(asn);
            asn.MoveNextCurrentLevel();
            decodeEntries(asn);
            if (asn.MoveNextCurrentLevel())
            {
                decodeExtensions(asn);
            }
        }
Ejemplo n.º 3
0
        void m_initialize(Asn1Reader response)
        {
            response.MoveNext();
            CertId = new CertID(Asn1Utils.Encode(response.GetPayload(), 48));
            response.MoveNextCurrentLevel();
            switch (response.Tag)
            {
            case 128:
                CertStatus = CertificateStatus.Good;
                response.MoveNextCurrentLevel();
                break;

            case 161:
                CertStatus = CertificateStatus.Revoked;
                response.MoveNext();
                DateTime revokedWhen = Asn1Utils.DecodeGeneralizedTime(response.GetTagRawData());
                response.MoveNext();
                Int16 reason = 0;
                if (response.Tag == 160)
                {
                    response.MoveNext();
                    reason = response.GetPayload()[0];
                    response.MoveNext();
                }
                RevocationInfo = new X509CRLEntry(CertId.SerialNumber, revokedWhen, reason);
                break;

            case 130:
                CertStatus = CertificateStatus.Unknown;
                response.MoveNextCurrentLevel();
                break;
            }
            //response.MoveNextCurrentLevel();
            ThisUpdate = Asn1Utils.DecodeGeneralizedTime(response.GetTagRawData());
            while (response.MoveNextCurrentLevel())
            {
                switch (response.Tag)
                {
                case 160:
                    Asn1Reader asn = new Asn1Reader(response.GetPayload());
                    NextUpdate = Asn1Utils.DecodeGeneralizedTime(asn.GetTagRawData());
                    break;

                case 161:
                    Extensions.Decode(response.GetPayload());
                    break;
                }
            }
        }
        /// <summary>
        /// Decodes ASN.1-encoded byte array that represents a collection of <see cref="X509Extension"/> objects.
        /// </summary>
        /// <param name="extensions">Destination collection where decoded extensions will be added.</param>
        /// <param name="rawData">ASN.1-encoded byte array that represents extension collection.</param>
        /// <exception cref="Asn1InvalidTagException">Decoder encountered an unexpected ASN.1 type identifier.</exception>
        /// <exception cref="ArgumentNullException">
        /// <strong>extensions</strong> and/or <strong>rawData</strong> parameter is null.
        /// </exception>
        /// <remarks>If current collection contains items, decoded items will be appended to existing items.</remarks>
        public static void Decode(this X509ExtensionCollection extensions, Byte[] rawData)
        {
            if (extensions == null)
            {
                throw new ArgumentNullException(nameof(extensions));
            }
            if (rawData == null)
            {
                throw new ArgumentNullException(nameof(rawData));
            }

            Asn1Reader asn = new Asn1Reader(rawData);

            if (asn.Tag != 48)
            {
                throw new Asn1InvalidTagException();
            }
            if (!asn.MoveNext() || asn.NextOffset == 0)
            {
                return;
            }

            do
            {
                extensions.Add(X509ExtensionExtensions.Decode(asn.GetTagRawData()));
            } while (asn.MoveNextCurrentLevel());
        }
Ejemplo n.º 5
0
        void decode(Asn1Reader asn)
        {
            asn.MoveNextAndExpectTags((Byte)Asn1Type.INTEGER);
            Version = (Int32) new Asn1Integer(asn).Value;
            asn.MoveNextAndExpectTags(48);
            RequestMessage = new TspMessageImprint(asn.GetTagRawData());
            while (asn.MoveNextCurrentLevel())
            {
                switch (asn.Tag)
                {
                case (Byte)Asn1Type.OBJECT_IDENTIFIER:
                    PolicyID = new Asn1ObjectIdentifier(asn).Value;
                    break;

                case (Byte)Asn1Type.INTEGER:
                    UseNonce = true;
                    nonce    = new Asn1Integer(asn).Value.ToByteArray();
                    break;

                case (Byte)Asn1Type.BOOLEAN:
                    RequestCertificates = new Asn1Boolean(asn).Value;
                    break;

                case 0xa0:
                    var extList = new X509ExtensionCollection();
                    extList.Decode(asn.GetTagRawData());
                    foreach (X509Extension extension in extList)
                    {
                        _extensions.Add(extension);
                    }
                    break;
                }
            }
        }
        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());
        }
        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();
        }
Ejemplo n.º 8
0
        void m_decode(Byte[] rawData)
        {
            var aiaUrls  = new List <String>();
            var ocspUrls = new List <String>();
            var asn      = new Asn1Reader(rawData);

            if (asn.Tag != 48)
            {
                throw new Asn1InvalidTagException(asn.Offset);
            }
            asn.MoveNext();
            do
            {
                Int32 offset = asn.Offset;
                if (asn.Tag != 48)
                {
                    throw new Asn1InvalidTagException(asn.Offset);
                }
                asn.MoveNext();
                String oidString = Asn1Utils.DecodeObjectIdentifier(asn.GetTagRawData()).Value;
                asn.MoveNextAndExpectTags(0x86);
                switch (oidString)
                {
                case "1.3.6.1.5.5.7.48.2": aiaUrls.Add(Encoding.ASCII.GetString(asn.GetPayload())); break;

                case "1.3.6.1.5.5.7.48.1": ocspUrls.Add(Encoding.ASCII.GetString(asn.GetPayload())); break;
                }
                asn.MoveToPosition(offset);
            } while (asn.MoveNextCurrentLevel());
            CertificationAuthorityIssuer    = aiaUrls.ToArray();
            OnlineCertificateStatusProtocol = ocspUrls.ToArray();
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Decodes ASN.1 encoded byte array to an array of <see cref="X500RdnAttribute"/> objects.
        /// </summary>
        /// <param name="rawData">ASN.1-encoded byte array.</param>
        /// <exception cref="ArgumentNullException">
        /// <strong>rawData</strong> parameter is null.
        /// </exception>
        /// <exception cref="AccessViolationException">
        /// The collection is read-only and cannot be modified.
        /// </exception>
        /// <exception cref="Asn1InvalidTagException">
        /// The data in the <strong>rawData</strong> parameter is not valid array of <see cref="X500RdnAttribute"/> objects.
        /// </exception>
        public void Decode(Byte[] rawData)
        {
            if (IsReadOnly)
            {
                throw new AccessViolationException("An object is encoded and is write-protected.");
            }
            if (rawData == null)
            {
                throw new ArgumentNullException(nameof(rawData));
            }
            InternalList.Clear();
            Asn1Reader asn = new Asn1Reader(rawData);

            if (asn.Tag != 48)
            {
                throw new Asn1InvalidTagException(asn.Offset);
            }
            asn.MoveNext();
            do
            {
                if (asn.Tag != 49)
                {
                    throw new Asn1InvalidTagException(asn.Offset);
                }
                InternalList.Add(new X500RdnAttribute(asn.GetPayload()));
            } while (asn.MoveNextCurrentLevel());
            // reverse list to get attributes from leaf to root.
            InternalList.Reverse();
        }
 void getAttributes(Asn1Reader asn)
 {
     asn.MoveNext();
     if (asn.PayloadLength == 0)
     {
         return;
     }
     do
     {
         X509Attribute attribute = X509Attribute.Decode(asn.GetTagRawData());
         if (attribute.Oid.Value == X509ExtensionOid.CertificateExtensions)
         {
             //Extensions
             var extensions = new X509ExtensionCollection();
             extensions.Decode(attribute.RawData);
             foreach (X509Extension extension in extensions)
             {
                 _extensions.Add(extension);
             }
         }
         else
         {
             _attributes.Add(attribute);
         }
     } while (asn.MoveNextCurrentLevel());
 }
Ejemplo n.º 11
0
 void decode(Byte[] rawData) {
     Asn1Reader asn = new Asn1Reader(rawData);
     asn.MoveNext();
     ContentType = new Asn1ObjectIdentifier(asn.GetTagRawData()).Value;
     asn.MoveNextAndExpectTags(0xa0); // [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL, 0xa0
     asn.MoveNextAndExpectTags(0x30); // SEQUENCE OF ANY
     asn.MoveNextAndExpectTags((Byte)Asn1Type.INTEGER); // version
     Version = (Int32)new Asn1Integer(asn.GetTagRawData()).Value;
     asn.MoveNextCurrentLevelAndExpectTags(0x31);
     decodeDigestAlgorithms(asn);
     asn.MoveNextCurrentLevelAndExpectTags(0x30); // ContentInfo
     Byte[] content = extractContent(asn);
     while (asn.MoveNextCurrentLevel()) {
         switch (asn.Tag) {
             case 0xa0:
                 decodeCertificates(asn);
                 break;
             case 0xa1:
                 decodeCrls(asn);
                 break;
             case 0x31:
                 decodeSignerInfos(asn);
                 break;
             default:
                 throw new ArgumentException("Invalid type.");
         }
     }
     RawData = rawData;
     DecodeContent(content);
 }
Ejemplo n.º 12
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="rawData"></param>
        /// <returns></returns>
        /// <exception cref="ArgumentNullException"></exception>
        /// <exception cref="InvalidDataException"></exception>
        public static X509ExtensionCollection DecodeX509Extensions(Byte[] rawData)
        {
            if (rawData == null)
            {
                throw new ArgumentNullException("rawData");
            }
            Asn1Reader asn = new Asn1Reader(rawData);

            if (asn.Tag != 48)
            {
                throw new InvalidDataException();
            }
            X509ExtensionCollection exts = new X509ExtensionCollection();

            if (!asn.MoveNext())
            {
                throw new Asn1InvalidTagException();
            }
            if (asn.NextOffset == 0)
            {
                return(exts);
            }
            do
            {
                exts.Add(DecodeX509Extension(asn.GetTagRawData()));
            } while (asn.MoveNextCurrentLevel());
            return(exts);
        }
Ejemplo n.º 13
0
        public static X500RdnAttribute[] GetRdnAttributes(this X500DistinguishedName name)
        {
            if (name == null)
            {
                throw new ArgumentNullException("name");
            }
            if (name.RawData == null || name.RawData.Length == 0)
            {
                return(null);
            }
            Asn1Reader asn = new Asn1Reader(name.RawData);

            if (!asn.MoveNext())
            {
                return(null);
            }
            if (asn.NextCurrentLevelOffset == 0)
            {
                return(null);
            }
            var retValue = new List <X500RdnAttribute>();

            do
            {
                Asn1Reader asn2 = new Asn1Reader(asn.GetPayload());
                asn2.MoveNext();
                Oid oid = Asn1Utils.DecodeObjectIdentifier(asn2.GetTagRawData());
                asn2.MoveNext();
                String value = Asn1Utils.DecodeAnyString(asn2.GetTagRawData(), null);
                retValue.Add(new X500RdnAttribute(oid, value));
            } while (asn.MoveNextCurrentLevel());
            return(retValue.ToArray());
        }
        void m_decode(Byte[] rawData)
        {
            List <String> aiaUrls  = new List <String>();
            List <String> ocspUrls = new List <String>();
            Asn1Reader    asn      = new Asn1Reader(rawData);

            if (asn.Tag != 48)
            {
                throw new ArgumentException("The data is invalid");
            }
            asn.MoveNext();
            do
            {
                Asn1Reader asnurl = new Asn1Reader(asn.GetTagRawData());
                if (asnurl.Tag != 48)
                {
                    throw new ArgumentException("The data is invalid");
                }
                asnurl.MoveNext();
                String oidString = Asn1Utils.DecodeObjectIdentifier(asnurl.GetTagRawData()).Value;
                asnurl.MoveNext();
                if (asnurl.Tag != 134)
                {
                    throw new ArgumentException("The data is invalid");
                }
                switch (oidString)
                {
                case "1.3.6.1.5.5.7.48.2": aiaUrls.Add(Encoding.ASCII.GetString(asnurl.GetPayload())); break;

                case "1.3.6.1.5.5.7.48.1": ocspUrls.Add(Encoding.ASCII.GetString(asnurl.GetPayload())); break;
                }
            } while (asn.MoveNextCurrentLevel());
            CertificationAuthorityIssuer    = aiaUrls.ToArray();
            OnlineCertificateStatusProtocol = ocspUrls.ToArray();
        }
Ejemplo n.º 15
0
        void decodeResponse()
        {
            asn = new Asn1Reader(RawData);
            if (asn.Tag != 48)
            {
                throw new Asn1InvalidTagException("Response data is not valid ASN.1 encoded data.");
            }
            //response status
            asn.MoveNextAndExpectTags((Byte)Asn1Type.ENUMERATED);
            ResponseStatus = (OCSPResponseStatus)asn.GetPayload()[0];
            if (asn.NextOffset == 0)
            {
                return;
            }
            //responseBytesCS
            asn.MoveNextAndExpectTags(0xa0);
            asn.MoveNext();
            asn.MoveNext();
            decodeResponseType(new Asn1ObjectIdentifier(asn.GetTagRawData()).Value);
            asn.MoveNextAndExpectTags((Byte)Asn1Type.OCTET_STRING);
            //BasicOCSPResponse
            asn.MoveNextAndExpectTags(0x30);
            asn.MoveNext();
            //tbsResponseData
            Asn1Reader tbsResponseData = new Asn1Reader(asn.GetTagRawData());

            //decodetbsResponse(tbsResponseData);
            //signatureAlgorithm
            asn.MoveNextCurrentLevel();
            SignatureAlgorithm = new AlgorithmIdentifier(Asn1Utils.Encode(asn.GetPayload(), 48)).AlgorithmId;
            //signature
            asn.MoveNextCurrentLevel();
            Byte[] signature = asn.GetPayload().Skip(1).ToArray();
            // GenericArray.GetSubArray(asn1.Payload, 1, asn1.Payload.Length - 1);
            SignerCertificates = new X509Certificate2Collection();
            if (asn.MoveNext())
            {
                asn.MoveNext();
                Asn1Reader cert = new Asn1Reader(asn.GetPayload());
                do
                {
                    SignerCertificates.Add(new X509Certificate2(Asn1Utils.Encode(cert.GetPayload(), 48)));
                } while (cert.MoveNextCurrentLevel());
                verifySigner(SignerCertificates[0], true);
            } // optional. Find cert in store.
            verifyAll(tbsResponseData, signature, SignatureAlgorithm);
        }
Ejemplo n.º 16
0
		void m_decode(Byte[] rawData) {
			Asn1Reader asn = new Asn1Reader(rawData);
			if (asn.Tag != 48) { throw new ArgumentException("The data is invalid."); }
			asn.MoveNext();
			do {
				_oids.Add(Asn1Utils.DecodeObjectIdentifier(asn.GetPayload()));
			} while (asn.MoveNextCurrentLevel());
		}
Ejemplo n.º 17
0
 void decodeCrls(Asn1Reader asn) {
     if (asn.PayloadLength == 0) { return; }
     Int32 offset = asn.Offset;
     asn.MoveNext();
     do {
         _crls.Add(new X509CRL2(asn.GetTagRawData()));
     } while (asn.MoveNextCurrentLevel());
     asn.MoveToPoisition(offset);
 }
Ejemplo n.º 18
0
 void decodeSignerInfos(Asn1Reader asn) {
     if (asn.PayloadLength == 0) { return; }
     Int32 offset = asn.Offset;
     asn.MoveNext();
     do {
         _signerInfos.Add(new PkcsSignerInfo(asn.GetTagRawData()));
     } while (asn.MoveNextCurrentLevel());
     asn.MoveToPoisition(offset);
 }
Ejemplo n.º 19
0
        void decodeDigestAlgorithms(Asn1Reader asn) {
            // asn tag -> SET (0x31)
            Int32 offset = asn.Offset;
            if (asn.PayloadLength == 0) { return; }
            asn.MoveNext();
            do {
                _digestAlgorithms.Add(new AlgorithmIdentifier(asn.GetTagRawData()));
            } while (asn.MoveNextCurrentLevel());

            asn.MoveToPoisition(offset);
        }
Ejemplo n.º 20
0
 Byte[] extractContent(Asn1Reader asn) {
     Int32 offset = asn.Offset;
     asn.MoveNext();
     ContentType = new Asn1ObjectIdentifier(asn.GetTagRawData()).Value;
     if (asn.MoveNextCurrentLevel()) { // content [0] EXPLICIT ANY DEFINED BY contentType
         asn.MoveNextAndExpectTags((Byte)Asn1Type.OCTET_STRING); // octet string
         return asn.GetPayload();
     }
     asn.MoveToPoisition(offset);
     return null;
 }
Ejemplo n.º 21
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();
        }
Ejemplo n.º 22
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;
            }
        }
Ejemplo n.º 23
0
        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);
        }
Ejemplo n.º 24
0
        void m_decode(Byte[] rawData)
        {
            Asn1Reader asn = new Asn1Reader(rawData);

            asn.MoveNext();
            List <OidMapping> mappings = new List <OidMapping>();

            do
            {
                mappings.Add(new OidMapping(asn.GetTagRawData()));
            } while (asn.MoveNextCurrentLevel());
            OidMappings = mappings.ToArray();
        }
Ejemplo n.º 25
0
        static X509AlternativeNameCollection decodeNamesFromAsn(Byte[] rawData)
        {
            X509AlternativeNameCollection altNames = new X509AlternativeNameCollection();
            Asn1Reader asn = new Asn1Reader(rawData);

            asn.MoveNext();
            do
            {
                altNames.Add(new X509AlternativeName(asn.GetPayload()));
            } while (asn.MoveNextCurrentLevel());
            altNames.Close();
            return(altNames);
        }
Ejemplo n.º 26
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;
 }
Ejemplo n.º 27
0
        void m_decode(Byte[] rawData)
        {
            Asn1Reader asn = new Asn1Reader(rawData);

            if (asn.Tag != 48)
            {
                throw new ArgumentException("The data is invalid");
            }
            if (!asn.MoveNext())
            {
                throw new ArgumentException("The data is invalid");
            }
            ToBeSignedData = asn.GetTagRawData();
            if (!asn.MoveNextCurrentLevel())
            {
                throw new ArgumentException("The data is invalid");
            }
            SignatureAlgorithm = new AlgorithmIdentifier(asn.GetTagRawData());
            if (!asn.MoveNextCurrentLevel())
            {
                throw new ArgumentException("The data is invalid");
            }
            Signature = new Asn1BitString(asn);
        }
Ejemplo n.º 28
0
        /// <summary>
        /// Decodes ASN.1 encoded byte array to an array of <see cref="X509PolicyQualifier"/> objects.
        /// </summary>
        /// <param name="rawData">ASN.1-encoded byte array.</param>
        /// <exception cref="Asn1InvalidTagException">
        /// The data in the <strong>rawData</strong> parameter is not valid array of <see cref="X509PolicyQualifier"/> objects.
        /// </exception>
        public void Decode(Byte[] rawData)
        {
            InternalList.Clear();
            Asn1Reader asn = new Asn1Reader(rawData);

            if (asn.Tag != 48)
            {
                throw new Asn1InvalidTagException(asn.Offset);
            }
            asn.MoveNext();
            do
            {
                InternalList.Add(new X509PolicyQualifier(asn.GetTagRawData()));
            } while (asn.MoveNextCurrentLevel());
        }
Ejemplo n.º 29
0
        void m_decode(Byte[] rawData)
        {
            Asn1Reader asn = new Asn1Reader(rawData);

            asn.MoveNext();
            do
            {
                switch (asn.Tag)
                {
                case 0xa0: PermittedSubtree = decodeNamesFromAsn(asn.GetTagRawData()); break;

                case 0xa1: ExcludedSubtree = decodeNamesFromAsn(asn.GetTagRawData()); break;
                }
            } while (asn.MoveNextCurrentLevel());
        }
        /// <summary>
        /// Decodes ASN.1 encoded byte array to an array of <see cref="X509PolicyQualifier"/> objects.
        /// </summary>
        /// <param name="rawData">ASN.1-encoded byte array.</param>
        /// <exception cref="InvalidDataException">
        /// The data in the <strong>rawData</strong> parameter is not valid array of <see cref="X509PolicyQualifier"/> objects.
        /// </exception>
        public void Decode(Byte[] rawData)
        {
            _list.Clear();
            Asn1Reader asn = new Asn1Reader(rawData);

            if (asn.Tag != 48)
            {
                throw new InvalidDataException("The data is invalid.");
            }
            asn.MoveNext();
            do
            {
                _list.Add(new X509PolicyQualifier(asn.GetTagRawData()));
            } while (asn.MoveNextCurrentLevel());
        }