using System; namespace Org.BouncyCastle.Asn1.Pkcs { public class AttributePkcs : Asn1Encodable { public static AttributePkcs GetInstance(object obj) { if (obj == null) return null; if (obj is AttributePkcs attributePkcs) return attributePkcs; return new AttributePkcs(Asn1Sequence.GetInstance(obj)); } public static AttributePkcs GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) { return new AttributePkcs(Asn1Sequence.GetInstance(taggedObject, declaredExplicit)); } private readonly DerObjectIdentifier m_attrType; private readonly Asn1Set m_attrValues; private AttributePkcs(Asn1Sequence seq) { int count = seq.Count; if (count != 2) throw new ArgumentException("Bad sequence size: " + count, nameof(seq)); m_attrType = DerObjectIdentifier.GetInstance(seq[0]); m_attrValues = Asn1Set.GetInstance(seq[1]); } public AttributePkcs(DerObjectIdentifier attrType, Asn1Set attrValues) { m_attrType = attrType ?? throw new ArgumentNullException(nameof(attrType)); m_attrValues = attrValues ?? throw new ArgumentNullException(nameof(attrValues)); } public DerObjectIdentifier AttrType => m_attrType; public Asn1Set AttrValues => m_attrValues; /** * Produce an object suitable for an Asn1OutputStream. *
         * Attr ::= Sequence {
         *     attrType OBJECT IDENTIFIER,
         *     attrValues Set OF AttributeValue
         * }
         * 
*/ public override Asn1Object ToAsn1Object() => new DerSequence(m_attrType, m_attrValues); } }