Ejemplo n.º 1
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.º 2
0
        void m_decode(Byte[] rawData)
        {
            Asn1Reader asn = new Asn1Reader(rawData);

            if (asn.Tag != 48)
            {
                throw new Asn1InvalidTagException(asn.Offset);
            }
            asn.MoveNextAndExpectTags(0x30);
            ToBeSignedData = asn.GetTagRawData();
            asn.MoveNextCurrentLevelAndExpectTags(0x30);
            SignatureAlgorithm = new AlgorithmIdentifier(asn.GetTagRawData());
            asn.MoveNextCurrentLevelAndExpectTags((Byte)Asn1Type.BIT_STRING);
            Signature = new Asn1BitString(asn);
        }
Ejemplo n.º 3
0
        void decodeCms(Asn1Reader asn)
        {
            asn.MoveNextAndExpectTags(48, (Byte)Asn1Type.OBJECT_IDENTIFIER);
            if (asn.Tag == 48)
            {
                Status = new TspStatusInfo(asn.GetTagRawData());
                if (Status.ResponseStatus != TspResponseStatus.Granted && Status.ResponseStatus != TspResponseStatus.GrantedWithModifications)
                {
                    return;
                }
                asn.MoveNextCurrentLevelAndExpectTags(48);
            }
            else
            {
                asn.MoveToPosition(0);
            }
            signedCms = new DefaultSignedPkcs7(asn.GetTagRawData());

            ResponseType = signedCms.ContentType;
            switch (ResponseType.Value)
            {
            // TimeStamp Token
            case "1.2.840.113549.1.9.16.1.4":
                decodeTstInfo(new Asn1Reader(signedCms.Content));
                break;

            // PKCS 7 DATA
            case "1.2.840.113549.1.7.1":
                break;
            }
            getSigningTime();
            _rawData.AddRange(asn.GetRawData());
            validate();
        }
Ejemplo n.º 4
0
 void decode(Asn1Reader asn)
 {
     asn.MoveNextAndExpectTags(48);
     AlgorithmIdentifier = new AlgorithmIdentifier(asn.GetTagRawData());
     asn.MoveNextCurrentLevelAndExpectTags((Byte)Asn1Type.OCTET_STRING);
     _msgHash.AddRange(new Asn1OctetString(asn).Value);
 }
Ejemplo n.º 5
0
 void getSubject(Asn1Reader asn)
 {
     asn.MoveNextCurrentLevelAndExpectTags(0x30);
     if (asn.PayloadLength != 0)
     {
         SubjectName = new X500DistinguishedName(asn.GetTagRawData());
     }
 }
Ejemplo n.º 6
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);
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Decodes embedded payload of the CMC message. Current implementation supports only PKCS#10 certificate
        /// request objects.
        /// </summary>
        /// <inheritdoc select="param"/>
        /// <remarks>This member cannot be inherited or overriden.</remarks>
        protected override void DecodeContent(Byte[] rawData)
        {
            var asn = new Asn1Reader(rawData);

            asn.MoveNextAndExpectTags(0x30);             // ControlSequence  ::=    SEQUENCE OF TaggedAttribute
            asn.MoveNextCurrentLevelAndExpectTags(0x30); // ReqSequence      ::=    SEQUENCE OF TaggedRequest
            asn.MoveNextAndExpectTags(0xa0);
            asn.MoveNextAndExpectTags((Byte)Asn1Type.INTEGER);
            asn.MoveNextAndExpectTags(0x30);
            // theoretically, it is a sequence, but we pick only first request. Never seen an array of requests
            Content = new X509CertificateRequestPkcs10(asn.GetTagRawData());
        }
Ejemplo n.º 8
0
        void initializeFromAsn(Byte[] rawData)
        {
            Asn1Reader asn = new Asn1Reader(rawData);

            if (asn.Tag != 48)
            {
                throw new Asn1InvalidTagException(asn.Offset);
            }
            asn.MoveNext();
            HashingAlgorithm = new AlgorithmIdentifier(Asn1Utils.Encode(asn.GetPayload(), 48)).AlgorithmId;
            asn.MoveNextCurrentLevelAndExpectTags((Byte)Asn1Type.OCTET_STRING);
            // issuerNameHash
            IssuerNameId = AsnFormatter.BinaryToString(asn.GetPayload()).Trim();
            asn.MoveNextCurrentLevelAndExpectTags((Byte)Asn1Type.OCTET_STRING);
            // issuerKeyId
            IssuerKeyId = AsnFormatter.BinaryToString(asn.GetPayload()).Trim();
            asn.MoveNextCurrentLevelAndExpectTags((Byte)Asn1Type.INTEGER);
            // serialnumber
            serialNumber = asn.GetPayload();
            IsReadOnly   = true;
        }
Ejemplo n.º 9
0
        void decodeTstInfo(Asn1Reader asn)
        {
            asn.MoveNextAndExpectTags((Byte)Asn1Type.INTEGER);
            Version = (Int32) new Asn1Integer(asn).Value;
            asn.MoveNextAndExpectTags((Byte)Asn1Type.OBJECT_IDENTIFIER);
            PolicyID = new Asn1ObjectIdentifier(asn).Value;
            asn.MoveNextAndExpectTags(48);
            RequestMessage = new TspMessageImprint(asn.GetTagRawData());
            asn.MoveNextCurrentLevelAndExpectTags((Byte)Asn1Type.INTEGER);
            SerialNumber = new Asn1Integer(asn).Value;
            asn.MoveNextAndExpectTags((Byte)Asn1Type.GeneralizedTime);
            GenerationTimestamp = new Asn1GeneralizedTime(asn).Value;

            decodeOptionalFields(asn);
        }