using System; using Org.BouncyCastle.Asn1; namespace Org.BouncyCastle.Asn1.X509 { public class AttributeCertificate : Asn1Encodable { private readonly AttributeCertificateInfo acinfo; private readonly AlgorithmIdentifier signatureAlgorithm; private readonly DerBitString signatureValue; /** * @param obj * @return */ public static AttributeCertificate GetInstance( object obj) { if (obj is AttributeCertificate) return (AttributeCertificate) obj; if (obj != null) return new AttributeCertificate(Asn1Sequence.GetInstance(obj)); return null; } public AttributeCertificate( AttributeCertificateInfo acinfo, AlgorithmIdentifier signatureAlgorithm, DerBitString signatureValue) { this.acinfo = acinfo; this.signatureAlgorithm = signatureAlgorithm; this.signatureValue = signatureValue; } private AttributeCertificate( Asn1Sequence seq) { if (seq.Count != 3) throw new ArgumentException("Bad sequence size: " + seq.Count); this.acinfo = AttributeCertificateInfo.GetInstance(seq[0]); this.signatureAlgorithm = AlgorithmIdentifier.GetInstance(seq[1]); this.signatureValue = DerBitString.GetInstance(seq[2]); } public AttributeCertificateInfo ACInfo { get { return acinfo; } } public AlgorithmIdentifier SignatureAlgorithm { get { return signatureAlgorithm; } } public DerBitString SignatureValue { get { return signatureValue; } } /** * Produce an object suitable for an Asn1OutputStream. *
* AttributeCertificate ::= Sequence { * acinfo AttributeCertificateInfo, * signatureAlgorithm AlgorithmIdentifier, * signatureValue BIT STRING * } **/ public override Asn1Object ToAsn1Object() { return new DerSequence(acinfo, signatureAlgorithm, signatureValue); } } }