public AuthorityKeyIdentifier( ASN1Sequence seq) { IEnumerator e = seq.getObjects(); while (e.MoveNext()) { DERTaggedObject o = (DERTaggedObject)e.Current; switch ((int)o.getTagNo()) { case 0: this.keyidentifier = ASN1OctetString.getInstance(o, false); break; case 1: this.certissuer = GeneralNames.getInstance(o, false); break; case 2: this.certserno = DERInteger.getInstance(o, false); break; default: throw new ArgumentException("illegal tag"); } } }
public TBSCertificateStructure( ASN1Sequence seq) { int seqStart = 0; this.seq = seq; // // some certficates don't include a version number - we assume v1 // if (seq.getObjectAt(0) is DERTaggedObject) { version = DERInteger.getInstance(seq.getObjectAt(0)); } else { seqStart = -1; // field 0 is missing! version = new DERInteger(0); } serialNumber = DERInteger.getInstance(seq.getObjectAt(seqStart + 1)); signature = AlgorithmIdentifier.getInstance(seq.getObjectAt(seqStart + 2)); issuer = X509Name.getInstance(seq.getObjectAt(seqStart + 3)); // // before and after dates // ASN1Sequence dates = (ASN1Sequence)seq.getObjectAt(seqStart + 4); startDate = Time.getInstance(dates.getObjectAt(0)); endDate = Time.getInstance(dates.getObjectAt(1)); subject = X509Name.getInstance(seq.getObjectAt(seqStart + 5)); // // public key info. // subjectPublicKeyInfo = SubjectPublicKeyInfo.getInstance(seq.getObjectAt(seqStart + 6)); for (int extras = seq.size() - (seqStart + 6) - 1; extras > 0; extras--) { DERTaggedObject extra = (DERTaggedObject)seq.getObjectAt(seqStart + 6 + extras); switch ((int)extra.getTagNo()) { case 1: issuerUniqueId = DERBitString.getInstance(extra, false); break; case 2: subjectUniqueId = DERBitString.getInstance(extra, false); break; case 3: extensions = X509Extensions.getInstance(extra); break; } } }
public SignedData( ASN1Sequence seq) { IEnumerator e = seq.getObjects(); e.MoveNext(); version = (DERInteger)e.Current; e.MoveNext(); digestAlgorithms = ((ASN1Set)e.Current); e.MoveNext(); contentInfo = ContentInfo.getInstance(e.Current); while (e.MoveNext()) { ASN1Object o = (ASN1Object)e.Current; // // an interesting feature of SignedData is that there appear to be varying implementations... // for the moment we ignore anything which doesn't fit. // if (o is DERTaggedObject) { DERTaggedObject tagged = (DERTaggedObject)o; switch ((int)tagged.getTagNo()) { case 0: certificates = ASN1Set.getInstance(tagged, false); break; case 1: crls = ASN1Set.getInstance(tagged, false); break; default: throw new ArgumentException("unknown tag value " + tagged.getTagNo()); } } else { signerInfos = (ASN1Set)o; } } }
public OtherInfo( ASN1Sequence seq) { IEnumerator e = seq.getObjects(); e.MoveNext(); keyInfo = new KeySpecificInfo((ASN1Sequence)e.Current); while (e.MoveNext()) { DERTaggedObject o = (DERTaggedObject)e.Current; if (o.getTagNo() == 0) { partyAInfo = (ASN1OctetString)o.getObject(); } else if ((int)o.getTagNo() == 2) { suppPubInfo = (ASN1OctetString)o.getObject(); } } }
/** * dump a DER object as a formatted string with indentation * * @param obj the ASN1Object to be dumped out. */ public static string _dumpAsString( string indent, ASN1Object obj) { if (obj is ASN1Sequence) { StringBuilder buf = new StringBuilder(); IEnumerator e = ((ASN1Sequence)obj).getObjects(); string tab = indent + TAB; buf.Append(indent); if (obj is DERSequence) { buf.Append("DER Sequence"); } else if (obj is BERSequence) { buf.Append("BER Sequence"); } else { buf.Append("Sequence"); } buf.Append(Environment.NewLine); while (e.MoveNext()) { object o = e.Current; if (o == null || o.Equals(new DERNull())) { buf.Append(tab); buf.Append("NULL"); buf.Append(Environment.NewLine); } else if (o is ASN1Object) { buf.Append(_dumpAsString(tab, (ASN1Object)o)); } else { buf.Append(_dumpAsString(tab, ((ASN1Encodable)o).toASN1Object())); } } return(buf.ToString()); } else if (obj is DERTaggedObject) { StringBuilder buf = new StringBuilder(); string tab = indent + TAB; buf.Append(indent); if (obj is BERTaggedObject) { buf.Append("BER Tagged ["); } else { buf.Append("Tagged ["); } DERTaggedObject o = (DERTaggedObject)obj; buf.Append(((int)o.getTagNo()).ToString()); buf.Append("]"); if (!o.isExplicit()) { buf.Append(" IMPLICIT "); } buf.Append(Environment.NewLine); if (o.isEmpty()) { buf.Append(tab); buf.Append("EMPTY"); buf.Append(Environment.NewLine); } else { buf.Append(_dumpAsString(tab, o.getObject())); } return(buf.ToString()); } else if (obj is BERSet) { StringBuilder buf = new StringBuilder(); IEnumerator e = ((ASN1Set)obj).getObjects(); string tab = indent + TAB; buf.Append(indent); buf.Append("BER Set"); buf.Append(Environment.NewLine); while (e.MoveNext()) { object o = e.Current; if (o == null) { buf.Append(tab); buf.Append("NULL"); buf.Append(Environment.NewLine); } else if (o is ASN1Object) { buf.Append(_dumpAsString(tab, (ASN1Object)o)); } else { buf.Append(_dumpAsString(tab, ((ASN1Encodable)o).toASN1Object())); } } return(buf.ToString()); } else if (obj is DERSet) { StringBuilder buf = new StringBuilder(); IEnumerator e = ((ASN1Set)obj).getObjects(); string tab = indent + TAB; buf.Append(indent); buf.Append("DER Set"); buf.Append(Environment.NewLine); while (e.MoveNext()) { object o = e.Current; if (o == null) { buf.Append(tab); buf.Append("NULL"); buf.Append(Environment.NewLine); } else if (o is ASN1Object) { buf.Append(_dumpAsString(tab, (ASN1Object)o)); } else { buf.Append(_dumpAsString(tab, ((ASN1Encodable)o).toASN1Object())); } } return(buf.ToString()); } else if (obj is DERObjectIdentifier) { return(indent + "ObjectIdentifier(" + ((DERObjectIdentifier)obj).getId() + ")" + Environment.NewLine); } else if (obj is DERBoolean) { return(indent + "Boolean(" + ((DERBoolean)obj).isTrue() + ")" + Environment.NewLine); } else if (obj is DERInteger) { return(indent + "Integer(" + ((DERInteger)obj).getValue() + ")" + Environment.NewLine); } else if (obj is DEROctetString) { return(indent + obj.ToString() + "[" + ((ASN1OctetString)obj).getOctets().Length + "] " + Environment.NewLine); } else if (obj is DERIA5String) { return(indent + "IA5String(" + ((DERIA5String)obj).getString() + ") " + Environment.NewLine); } else if (obj is DERPrintableString) { return(indent + "PrintableString(" + ((DERPrintableString)obj).getString() + ") " + Environment.NewLine); } else if (obj is DERVisibleString) { return(indent + "VisibleString(" + ((DERVisibleString)obj).getString() + ") " + Environment.NewLine); } else if (obj is DERBMPString) { return(indent + "BMPString(" + ((DERBMPString)obj).getString() + ") " + Environment.NewLine); } else if (obj is DERT61String) { return(indent + "T61String(" + ((DERT61String)obj).getString() + ") " + Environment.NewLine); } else if (obj is DERUTCTime) { return(indent + "UTCTime(" + ((DERUTCTime)obj).getTime() + ") " + Environment.NewLine); } else if (obj is DERUnknownTag) { return(indent + "Unknown " + ((int)((DERUnknownTag)obj).getTag()).ToString("X") + " " + ByteArray2String(Hex.encode(((DERUnknownTag)obj).getData())) + Environment.NewLine); } else { return(indent + obj.ToString() + Environment.NewLine); } }