<PackageReference Include="BouncyCastle.Cryptography" Version="2.5.1" />

SafeBag

public class SafeBag : Asn1Encodable
using System; namespace Org.BouncyCastle.Asn1.Pkcs { public class SafeBag : Asn1Encodable { private readonly DerObjectIdentifier m_bagID; private readonly Asn1Object m_bagValue; private readonly Asn1Set m_bagAttributes; public DerObjectIdentifier BagID => m_bagID; public Asn1Object BagValue => m_bagValue; public Asn1Set BagAttributes => m_bagAttributes; public static SafeBag GetInstance(object obj) { if (obj == null) return null; SafeBag safeBag = obj as SafeBag; if (safeBag != null) return safeBag; return new SafeBag(Asn1Sequence.GetInstance(obj)); } public static SafeBag GetInstance(Asn1TaggedObject taggedObject, bool declaredExplicit) { return new SafeBag(Asn1Sequence.GetInstance(taggedObject, declaredExplicit)); } public static SafeBag GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit) { return new SafeBag(Asn1Sequence.GetTagged(taggedObject, declaredExplicit)); } private SafeBag(Asn1Sequence seq) { int count = seq.Count; int sequencePosition = 0; if (count < 2 || count > 3) throw new ArgumentException("Bad sequence size: " + count.ToString(), "seq"); m_bagID = DerObjectIdentifier.GetInstance(seq[sequencePosition++]); m_bagValue = Asn1TaggedObject.GetInstance(seq[sequencePosition++], 128, 0).GetExplicitBaseObject().ToAsn1Object(); m_bagAttributes = Asn1Utilities.ReadOptional(seq, ref sequencePosition, Asn1Set.GetOptional); if (sequencePosition != count) throw new ArgumentException("Unexpected elements in sequence", "seq"); } public SafeBag(DerObjectIdentifier oid, Asn1Object obj) : this(oid, obj, null) { } public SafeBag(DerObjectIdentifier oid, Asn1Object obj, Asn1Set bagAttributes) { if (oid == null) throw new ArgumentNullException("oid"); m_bagID = oid; if (obj == null) throw new ArgumentNullException("obj"); m_bagValue = obj; m_bagAttributes = bagAttributes; } public override Asn1Object ToAsn1Object() { Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(3); asn1EncodableVector.Add(m_bagID, new DerTaggedObject(0, m_bagValue)); asn1EncodableVector.AddOptional(m_bagAttributes); return new DerSequence(asn1EncodableVector); } } }