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); }
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); }
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(); }
void decode(Asn1Reader asn) { asn.MoveNextAndExpectTags(48); AlgorithmIdentifier = new AlgorithmIdentifier(asn.GetTagRawData()); asn.MoveNextCurrentLevelAndExpectTags((Byte)Asn1Type.OCTET_STRING); _msgHash.AddRange(new Asn1OctetString(asn).Value); }
void getSubject(Asn1Reader asn) { asn.MoveNextCurrentLevelAndExpectTags(0x30); if (asn.PayloadLength != 0) { SubjectName = new X500DistinguishedName(asn.GetTagRawData()); } }
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); }
/// <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()); }
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; }
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); }