public PkiMessage( PkiHeader header, PkiBody body, DerBitString protection) : this(header, body, protection, null) { }
private EncryptedValue(Asn1Sequence seq) { int index = 0; while (seq[index] is Asn1TaggedObject) { Asn1TaggedObject tObj = (Asn1TaggedObject)seq[index]; switch (tObj.TagNo) { case 0: intendedAlg = AlgorithmIdentifier.GetInstance(tObj, false); break; case 1: symmAlg = AlgorithmIdentifier.GetInstance(tObj, false); break; case 2: encSymmKey = DerBitString.GetInstance(tObj, false); break; case 3: keyAlg = AlgorithmIdentifier.GetInstance(tObj, false); break; case 4: valueHint = Asn1OctetString.GetInstance(tObj, false); break; } ++index; } encValue = DerBitString.GetInstance(seq[index]); }
public SubjectPublicKeyInfo( AlgorithmIdentifier algID, byte[] publicKey) { this.keyData = new DerBitString(publicKey); this.algID = algID; }
private AttributeCertificateInfo( Asn1Sequence seq) { if (seq.Count < 7 || seq.Count > 9) { throw new ArgumentException("Bad sequence size: " + seq.Count); } this.version = DerInteger.GetInstance(seq[0]); this.holder = Holder.GetInstance(seq[1]); this.issuer = AttCertIssuer.GetInstance(seq[2]); this.signature = AlgorithmIdentifier.GetInstance(seq[3]); this.serialNumber = DerInteger.GetInstance(seq[4]); this.attrCertValidityPeriod = AttCertValidityPeriod.GetInstance(seq[5]); this.attributes = Asn1Sequence.GetInstance(seq[6]); for (int i = 7; i < seq.Count; i++) { Asn1Encodable obj = (Asn1Encodable) seq[i]; if (obj is DerBitString) { this.issuerUniqueID = DerBitString.GetInstance(seq[i]); } else if (obj is Asn1Sequence || obj is X509Extensions) { this.extensions = X509Extensions.GetInstance(seq[i]); } } }
/** * Creates a new PKMACValue. * @param aid CMPObjectIdentifiers.passwordBasedMAC, with PBMParameter * @param value MAC of the DER-encoded SubjectPublicKeyInfo */ public PKMacValue( AlgorithmIdentifier algID, DerBitString macValue) { this.algID = algID; this.macValue = macValue; }
public OriginatorPublicKey( AlgorithmIdentifier algorithm, byte[] publicKey) { this.mAlgorithm = algorithm; this.mPublicKey = new DerBitString(publicKey); }
public SubjectPublicKeyInfo( AlgorithmIdentifier algID, Asn1Encodable publicKey) { this.keyData = new DerBitString(publicKey); this.algID = algID; }
public PkiStatusInfo( Asn1Sequence seq) { this.status = DerInteger.GetInstance(seq[0]); this.statusString = null; this.failInfo = null; if (seq.Count > 2) { this.statusString = PkiFreeText.GetInstance(seq[1]); this.failInfo = DerBitString.GetInstance(seq[2]); } else if (seq.Count > 1) { object obj = seq[1]; if (obj is DerBitString) { this.failInfo = DerBitString.GetInstance(obj); } else { this.statusString = PkiFreeText.GetInstance(obj); } } }
private DHValidationParms(Asn1Sequence seq) { if (seq.Count != 2) throw new ArgumentException("Bad sequence size: " + seq.Count, "seq"); this.seed = DerBitString.GetInstance(seq[0]); this.pgenCounter = DerInteger.GetInstance(seq[1]); }
private SubjectPublicKeyInfo( Asn1Sequence seq) { if (seq.Count != 2) throw new ArgumentException("Bad sequence size: " + seq.Count, "seq"); this.algID = AlgorithmIdentifier.GetInstance(seq[0]); this.keyData = DerBitString.GetInstance(seq[1]); }
/** * Creates a new Proof of Possession object for a signing key. * @param poposkIn the PopoSigningKeyInput structure, or null if the * CertTemplate includes both subject and publicKey values. * @param aid the AlgorithmIdentifier used to sign the proof of possession. * @param signature a signature over the DER-encoded value of poposkIn, * or the DER-encoded value of certReq if poposkIn is null. */ public PopoSigningKey( PopoSigningKeyInput poposkIn, AlgorithmIdentifier aid, DerBitString signature) { this.poposkInput = poposkIn; this.algorithmIdentifier = aid; this.signature = signature; }
public CertificationRequest( CertificationRequestInfo requestInfo, AlgorithmIdentifier algorithm, DerBitString signature) { this.reqInfo = requestInfo; this.sigAlgId = algorithm; this.sigBits = signature; }
public PkiStatusInfo( int status, PkiFreeText statusString, PkiFailureInfo failInfo) { this.status = new DerInteger(status); this.statusString = statusString; this.failInfo = failInfo; }
public CertificationRequest( Asn1Sequence seq) { if (seq.Count != 3) throw new ArgumentException("Wrong number of elements in sequence", "seq"); reqInfo = CertificationRequestInfo.GetInstance(seq[0]); sigAlgId = AlgorithmIdentifier.GetInstance(seq[1]); sigBits = DerBitString.GetInstance(seq[2]); }
public DHValidationParms(DerBitString seed, DerInteger pgenCounter) { if (seed == null) throw new ArgumentNullException("seed"); if (pgenCounter == null) throw new ArgumentNullException("pgenCounter"); this.seed = seed; this.pgenCounter = pgenCounter; }
private Signature( Asn1Sequence seq) { signatureAlgorithm = AlgorithmIdentifier.GetInstance(seq[0]); signatureValue = (DerBitString)seq[1]; if (seq.Count == 3) { certs = Asn1Sequence.GetInstance( (Asn1TaggedObject)seq[2], true); } }
private X509CertificateStructure( Asn1Sequence seq) { if (seq.Count != 3) throw new ArgumentException("sequence wrong size for a certificate", "seq"); // // correct x509 certficate // tbsCert = TbsCertificateStructure.GetInstance(seq[0]); sigAlgID = AlgorithmIdentifier.GetInstance(seq[1]); sig = DerBitString.GetInstance(seq[2]); }
/** * Creates a new PkiMessage. * * @param header message header * @param body message body * @param protection message protection (may be null) * @param extraCerts extra certificates (may be null) */ public PkiMessage( PkiHeader header, PkiBody body, DerBitString protection, CmpCertificate[] extraCerts) { this.header = header; this.body = body; this.protection = protection; if (extraCerts != null) { this.extraCerts = new DerSequence(extraCerts); } }
public Signature( AlgorithmIdentifier signatureAlgorithm, DerBitString signatureValue, Asn1Sequence certs) { if (signatureAlgorithm == null) throw new ArgumentException("signatureAlgorithm"); if (signatureValue == null) throw new ArgumentException("signatureValue"); this.signatureAlgorithm = signatureAlgorithm; this.signatureValue = signatureValue; this.certs = certs; }
private void DoTestZeroLengthStrings() { // basic construction DerBitString s1 = new DerBitString(new byte[0], 0); // check GetBytes() s1.GetBytes(); // check encoding/decoding DerBitString derBit = (DerBitString)Asn1Object.FromByteArray(s1.GetEncoded()); if (!Arrays.AreEqual(s1.GetEncoded(), Hex.Decode("030100"))) { Fail("zero encoding wrong"); } try { new DerBitString(null, 1); Fail("exception not thrown"); } catch (ArgumentNullException) { } try { new DerBitString(new byte[0], 1); Fail("exception not thrown"); } catch (ArgumentException) { } try { new DerBitString(new byte[1], 8); Fail("exception not thrown"); } catch (ArgumentException) { } DerBitString s2 = new DerBitString(0); if (!Arrays.AreEqual(s1.GetEncoded(), s2.GetEncoded())) { Fail("zero encoding wrong"); } }
private IssuerSerial( Asn1Sequence seq) { if (seq.Count != 2 && seq.Count != 3) { throw new ArgumentException("Bad sequence size: " + seq.Count); } issuer = GeneralNames.GetInstance(seq[0]); serial = DerInteger.GetInstance(seq[1]); if (seq.Count == 3) { issuerUid = DerBitString.GetInstance(seq[2]); } }
public X509CertificateStructure( TbsCertificateStructure tbsCert, AlgorithmIdentifier sigAlgID, DerBitString sig) { if (tbsCert == null) throw new ArgumentNullException("tbsCert"); if (sigAlgID == null) throw new ArgumentNullException("sigAlgID"); if (sig == null) throw new ArgumentNullException("sig"); this.tbsCert = tbsCert; this.sigAlgID = sigAlgID; this.sig = sig; }
/** * Constructor from given details. * <p> * If <code>digestedObjectType</code> is not {@link #publicKeyCert} or * {@link #publicKey} <code>otherObjectTypeID</code> must be given, * otherwise it is ignored.</p> * * @param digestedObjectType The digest object type. * @param otherObjectTypeID The object type ID for * <code>otherObjectDigest</code>. * @param digestAlgorithm The algorithm identifier for the hash. * @param objectDigest The hash value. */ public ObjectDigestInfo( int digestedObjectType, string otherObjectTypeID, AlgorithmIdentifier digestAlgorithm, byte[] objectDigest) { this.digestedObjectType = new DerEnumerated(digestedObjectType); if (digestedObjectType == OtherObjectDigest) { this.otherObjectTypeID = new DerObjectIdentifier(otherObjectTypeID); } this.digestAlgorithm = digestAlgorithm; this.objectDigest = new DerBitString(objectDigest); }
private PopoSigningKey(Asn1Sequence seq) { int index = 0; if (seq[index] is Asn1TaggedObject) { Asn1TaggedObject tagObj = (Asn1TaggedObject) seq[index++]; if (tagObj.TagNo != 0) { throw new ArgumentException( "Unknown PopoSigningKeyInput tag: " + tagObj.TagNo, "seq"); } poposkInput = PopoSigningKeyInput.GetInstance(tagObj.GetObject()); } algorithmIdentifier = AlgorithmIdentifier.GetInstance(seq[index++]); signature = DerBitString.GetInstance(seq[index]); }
private CertTemplate(Asn1Sequence seq) { this.seq = seq; foreach (Asn1TaggedObject tObj in seq) { switch (tObj.TagNo) { case 0: version = DerInteger.GetInstance(tObj, false); break; case 1: serialNumber = DerInteger.GetInstance(tObj, false); break; case 2: signingAlg = AlgorithmIdentifier.GetInstance(tObj, false); break; case 3: issuer = X509Name.GetInstance(tObj, true); // CHOICE break; case 4: validity = OptionalValidity.GetInstance(Asn1Sequence.GetInstance(tObj, false)); break; case 5: subject = X509Name.GetInstance(tObj, true); // CHOICE break; case 6: publicKey = SubjectPublicKeyInfo.GetInstance(tObj, false); break; case 7: issuerUID = DerBitString.GetInstance(tObj, false); break; case 8: subjectUID = DerBitString.GetInstance(tObj, false); break; case 9: extensions = X509Extensions.GetInstance(tObj, false); break; default: throw new ArgumentException("unknown tag: " + tObj.TagNo, "seq"); } } }
private PkiMessage(Asn1Sequence seq) { header = PkiHeader.GetInstance(seq[0]); body = PkiBody.GetInstance(seq[1]); for (int pos = 2; pos < seq.Count; ++pos) { Asn1TaggedObject tObj = (Asn1TaggedObject)seq[pos].ToAsn1Object(); if (tObj.TagNo == 0) { protection = DerBitString.GetInstance(tObj, true); } else { extraCerts = Asn1Sequence.GetInstance(tObj, true); } } }
private OobCertHash(Asn1Sequence seq) { int index = seq.Count - 1; hashVal = DerBitString.GetInstance(seq[index--]); for (int i = index; i >= 0; i--) { Asn1TaggedObject tObj = (Asn1TaggedObject)seq[i]; if (tObj.TagNo == 0) { hashAlg = AlgorithmIdentifier.GetInstance(tObj, true); } else { certId = CertId.GetInstance(tObj, true); } } }
public EncryptedValue( AlgorithmIdentifier intendedAlg, AlgorithmIdentifier symmAlg, DerBitString encSymmKey, AlgorithmIdentifier keyAlg, Asn1OctetString valueHint, DerBitString encValue) { if (encValue == null) { throw new ArgumentNullException("encValue"); } this.intendedAlg = intendedAlg; this.symmAlg = symmAlg; this.encSymmKey = encSymmKey; this.keyAlg = keyAlg; this.valueHint = valueHint; this.encValue = encValue; }
public PkiStatusInfo(int status, PkiFreeText statusString, PkiFailureInfo failInfo) { this.status = new DerInteger(status); this.statusString = statusString; this.failInfo = failInfo; }
public SubjectPublicKeyInfo(AlgorithmIdentifier algID, Asn1Encodable publicKey) { keyData = new DerBitString(publicKey); this.algID = algID; }
public SubjectPublicKeyInfo(AlgorithmIdentifier algID, byte[] publicKey) { keyData = new DerBitString(publicKey); this.algID = algID; }
/** * dump a Der object as a formatted string with indentation * * @param obj the Asn1Object to be dumped out. */ private static void AsString( string indent, bool verbose, Asn1Object obj, StringBuilder buf) { if (obj is Asn1Sequence) { string tab = indent + Tab; buf.Append(indent); if (obj is BerSequence) { buf.Append("BER Sequence"); } else if (obj is DerSequence) { buf.Append("DER Sequence"); } else { buf.Append("Sequence"); } buf.Append(NewLine); foreach (Asn1Encodable o in ((Asn1Sequence)obj)) { if (o == null || o is Asn1Null) { buf.Append(tab); buf.Append("NULL"); buf.Append(NewLine); } else { AsString(tab, verbose, o.ToAsn1Object(), buf); } } } else if (obj is DerTaggedObject) { 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.TagNo).ToString()); buf.Append(']'); if (!o.IsExplicit()) { buf.Append(" IMPLICIT "); } buf.Append(NewLine); if (o.IsEmpty()) { buf.Append(tab); buf.Append("EMPTY"); buf.Append(NewLine); } else { AsString(tab, verbose, o.GetObject(), buf); } } else if (obj is BerSet) { string tab = indent + Tab; buf.Append(indent); buf.Append("BER Set"); buf.Append(NewLine); foreach (Asn1Encodable o in ((Asn1Set)obj)) { if (o == null) { buf.Append(tab); buf.Append("NULL"); buf.Append(NewLine); } else { AsString(tab, verbose, o.ToAsn1Object(), buf); } } } else if (obj is DerSet) { string tab = indent + Tab; buf.Append(indent); buf.Append("DER Set"); buf.Append(NewLine); foreach (Asn1Encodable o in ((Asn1Set)obj)) { if (o == null) { buf.Append(tab); buf.Append("NULL"); buf.Append(NewLine); } else { AsString(tab, verbose, o.ToAsn1Object(), buf); } } } else if (obj is DerObjectIdentifier) { buf.Append(indent + "ObjectIdentifier(" + ((DerObjectIdentifier)obj).Id + ")" + NewLine); } else if (obj is DerBoolean) { buf.Append(indent + "Boolean(" + ((DerBoolean)obj).IsTrue + ")" + NewLine); } else if (obj is DerInteger) { buf.Append(indent + "Integer(" + ((DerInteger)obj).Value + ")" + NewLine); } else if (obj is BerOctetString) { byte[] octets = ((Asn1OctetString)obj).GetOctets(); string extra = verbose ? dumpBinaryDataAsString(indent, octets) : ""; buf.Append(indent + "BER Octet String" + "[" + octets.Length + "] " + extra + NewLine); } else if (obj is DerOctetString) { byte[] octets = ((Asn1OctetString)obj).GetOctets(); string extra = verbose ? dumpBinaryDataAsString(indent, octets) : ""; buf.Append(indent + "DER Octet String" + "[" + octets.Length + "] " + extra + NewLine); } else if (obj is DerBitString) { DerBitString bt = (DerBitString)obj; byte[] bytes = bt.GetBytes(); string extra = verbose ? dumpBinaryDataAsString(indent, bytes) : ""; buf.Append(indent + "DER Bit String" + "[" + bytes.Length + ", " + bt.PadBits + "] " + extra + NewLine); } else if (obj is DerIA5String) { buf.Append(indent + "IA5String(" + ((DerIA5String)obj).GetString() + ") " + NewLine); } else if (obj is DerUtf8String) { buf.Append(indent + "UTF8String(" + ((DerUtf8String)obj).GetString() + ") " + NewLine); } else if (obj is DerPrintableString) { buf.Append(indent + "PrintableString(" + ((DerPrintableString)obj).GetString() + ") " + NewLine); } else if (obj is DerVisibleString) { buf.Append(indent + "VisibleString(" + ((DerVisibleString)obj).GetString() + ") " + NewLine); } else if (obj is DerBmpString) { buf.Append(indent + "BMPString(" + ((DerBmpString)obj).GetString() + ") " + NewLine); } else if (obj is DerT61String) { buf.Append(indent + "T61String(" + ((DerT61String)obj).GetString() + ") " + NewLine); } else if (obj is DerUtcTime) { buf.Append(indent + "UTCTime(" + ((DerUtcTime)obj).TimeString + ") " + NewLine); } else if (obj is DerGeneralizedTime) { buf.Append(indent + "GeneralizedTime(" + ((DerGeneralizedTime)obj).GetTime() + ") " + NewLine); } else if (obj is DerUnknownTag) { string hex = Hex.ToHexString(((DerUnknownTag)obj).GetData()); buf.Append(indent + "Unknown " + ((int)((DerUnknownTag)obj).Tag).ToString("X") + " " + hex + NewLine); } else if (obj is BerApplicationSpecific) { buf.Append(outputApplicationSpecific("BER", indent, verbose, (BerApplicationSpecific)obj)); } else if (obj is DerApplicationSpecific) { buf.Append(outputApplicationSpecific("DER", indent, verbose, (DerApplicationSpecific)obj)); } else if (obj is DerEnumerated) { DerEnumerated en = (DerEnumerated)obj; buf.Append(indent + "DER Enumerated(" + en.Value + ")" + NewLine); } else if (obj is DerExternal) { DerExternal ext = (DerExternal)obj; buf.Append(indent + "External " + NewLine); string tab = indent + Tab; if (ext.DirectReference != null) { buf.Append(tab + "Direct Reference: " + ext.DirectReference.Id + NewLine); } if (ext.IndirectReference != null) { buf.Append(tab + "Indirect Reference: " + ext.IndirectReference.ToString() + NewLine); } if (ext.DataValueDescriptor != null) { AsString(tab, verbose, ext.DataValueDescriptor, buf); } buf.Append(tab + "Encoding: " + ext.Encoding + NewLine); AsString(tab, verbose, ext.ExternalContent, buf); } else { buf.Append(indent + obj.ToString() + NewLine); } }
public void SetIssuerUniqueID( DerBitString issuerUniqueID) { this.issuerUniqueID = issuerUniqueID; }
public PkiFailureInfo( DerBitString info) : base(info.GetBytes(), info.PadBits) { }
public Signature( AlgorithmIdentifier signatureAlgorithm, DerBitString signatureValue) : this(signatureAlgorithm, signatureValue, null) { }
public NetscapeCertType(DerBitString usage) : base(usage.GetBytes(), usage.PadBits) { }
/** * Read a Key Pair */ private object ReadPrivateKey(PemObject pemObject) { // // extract the key // Debug.Assert(Platform.EndsWith(pemObject.Type, "PRIVATE KEY")); string type = pemObject.Type.Substring(0, pemObject.Type.Length - "PRIVATE KEY".Length).Trim(); byte[] keyBytes = pemObject.Content; IDictionary fields = Platform.CreateHashtable(); foreach (PemHeader header in pemObject.Headers) { fields[header.Name] = header.Value; } string procType = (string)fields["Proc-Type"]; if (procType == "4,ENCRYPTED") { if (pFinder == null) { throw new PasswordException("No password finder specified, but a password is required"); } char[] password = pFinder.GetPassword(); if (password == null) { throw new PasswordException("Password is null, but a password is required"); } string dekInfo = (string)fields["DEK-Info"]; string[] tknz = dekInfo.Split(','); string dekAlgName = tknz[0].Trim(); byte[] iv = Hex.Decode(tknz[1].Trim()); keyBytes = PemUtilities.Crypt(false, keyBytes, password, dekAlgName, iv); } try { AsymmetricKeyParameter pubSpec, privSpec; Asn1Sequence seq = Asn1Sequence.GetInstance(keyBytes); switch (type) { case "RSA": { if (seq.Count != 9) { throw new PemException("malformed sequence in RSA private key"); } RsaPrivateKeyStructure rsa = RsaPrivateKeyStructure.GetInstance(seq); pubSpec = new RsaKeyParameters(false, rsa.Modulus, rsa.PublicExponent); privSpec = new RsaPrivateCrtKeyParameters( rsa.Modulus, rsa.PublicExponent, rsa.PrivateExponent, rsa.Prime1, rsa.Prime2, rsa.Exponent1, rsa.Exponent2, rsa.Coefficient); break; } case "DSA": { if (seq.Count != 6) { throw new PemException("malformed sequence in DSA private key"); } // TODO Create an ASN1 object somewhere for this? //DerInteger v = (DerInteger)seq[0]; DerInteger p = (DerInteger)seq[1]; DerInteger q = (DerInteger)seq[2]; DerInteger g = (DerInteger)seq[3]; DerInteger y = (DerInteger)seq[4]; DerInteger x = (DerInteger)seq[5]; DsaParameters parameters = new DsaParameters(p.Value, q.Value, g.Value); privSpec = new DsaPrivateKeyParameters(x.Value, parameters); pubSpec = new DsaPublicKeyParameters(y.Value, parameters); break; } case "EC": { ECPrivateKeyStructure pKey = ECPrivateKeyStructure.GetInstance(seq); AlgorithmIdentifier algId = new AlgorithmIdentifier( X9ObjectIdentifiers.IdECPublicKey, pKey.GetParameters()); PrivateKeyInfo privInfo = new PrivateKeyInfo(algId, pKey.ToAsn1Object()); // TODO Are the keys returned here ECDSA, as Java version forces? privSpec = PrivateKeyFactory.CreateKey(privInfo); DerBitString pubKey = pKey.GetPublicKey(); if (pubKey != null) { SubjectPublicKeyInfo pubInfo = new SubjectPublicKeyInfo(algId, pubKey.GetBytes()); // TODO Are the keys returned here ECDSA, as Java version forces? pubSpec = PublicKeyFactory.CreateKey(pubInfo); } else { pubSpec = ECKeyPairGenerator.GetCorrespondingPublicKey( (ECPrivateKeyParameters)privSpec); } break; } case "ENCRYPTED": { char[] password = pFinder.GetPassword(); if (password == null) { throw new PasswordException("Password is null, but a password is required"); } return(PrivateKeyFactory.DecryptKey(password, EncryptedPrivateKeyInfo.GetInstance(seq))); } case "": { return(PrivateKeyFactory.CreateKey(PrivateKeyInfo.GetInstance(seq))); } default: throw new ArgumentException("Unknown key type: " + type, "type"); } return(new AsymmetricCipherKeyPair(pubSpec, privSpec)); } catch (IOException e) { throw e; } catch (Exception e) { throw new PemException( "problem creating " + type + " private key: " + e.ToString()); } }
public NetscapeCertType(int usage) : base(DerBitString.GetBytes(usage), DerBitString.GetPadBits(usage)) { }
public void SignRequest(byte[] signedData) { //build the signature from the signed data sigBits = new DerBitString(signedData); }
public void SignRequest(DerBitString signedData) { //build the signature from the signed data sigBits = signedData; }
internal TbsCertificateStructure( Asn1Sequence seq) { int seqStart = 0; this.seq = seq; // // some certficates don't include a version number - we assume v1 // if (seq[0] is DerTaggedObject) { version = DerInteger.GetInstance((Asn1TaggedObject)seq[0], true); } else { seqStart = -1; // field 0 is missing! version = new DerInteger(0); } serialNumber = DerInteger.GetInstance(seq[seqStart + 1]); signature = AlgorithmIdentifier.GetInstance(seq[seqStart + 2]); issuer = X509Name.GetInstance(seq[seqStart + 3]); // // before and after dates // Asn1Sequence dates = (Asn1Sequence)seq[seqStart + 4]; startDate = Time.GetInstance(dates[0]); endDate = Time.GetInstance(dates[1]); subject = X509Name.GetInstance(seq[seqStart + 5]); // // public key info. // subjectPublicKeyInfo = SubjectPublicKeyInfo.GetInstance(seq[seqStart + 6]); for (int extras = seq.Count - (seqStart + 6) - 1; extras > 0; extras--) { DerTaggedObject extra = (DerTaggedObject) seq[seqStart + 6 + extras]; switch (extra.TagNo) { case 1: issuerUniqueID = DerBitString.GetInstance(extra, false); break; case 2: subjectUniqueID = DerBitString.GetInstance(extra, false); break; case 3: extensions = X509Extensions.GetInstance(extra); break; } } }
public ReasonFlags(DerBitString reasons) : base(reasons.GetBytes(), reasons.PadBits) { }