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

OriginatorIdentifierOrKey

using Org.BouncyCastle.Asn1.X509; using Org.BouncyCastle.Utilities; using System; namespace Org.BouncyCastle.Asn1.Cms { public class OriginatorIdentifierOrKey : Asn1Encodable, IAsn1Choice { private readonly Asn1Encodable m_id; public Asn1Encodable ID => m_id; public IssuerAndSerialNumber IssuerAndSerialNumber => m_id as IssuerAndSerialNumber; public SubjectKeyIdentifier SubjectKeyIdentifier { get { Asn1TaggedObject asn1TaggedObject = m_id as Asn1TaggedObject; if (asn1TaggedObject != null && asn1TaggedObject.HasContextTag(0)) return SubjectKeyIdentifier.GetInstance(asn1TaggedObject, false); return null; } } public OriginatorPublicKey OriginatorPublicKey { get { Asn1TaggedObject asn1TaggedObject = m_id as Asn1TaggedObject; if (asn1TaggedObject != null && asn1TaggedObject.HasContextTag(1)) return OriginatorPublicKey.GetInstance(asn1TaggedObject, false); return null; } } public static OriginatorIdentifierOrKey GetInstance(object o) { if (o == null) return null; OriginatorIdentifierOrKey originatorIdentifierOrKey = o as OriginatorIdentifierOrKey; if (originatorIdentifierOrKey != null) return originatorIdentifierOrKey; IssuerAndSerialNumber issuerAndSerialNumber = o as IssuerAndSerialNumber; if (issuerAndSerialNumber != null) return new OriginatorIdentifierOrKey(issuerAndSerialNumber); Asn1Sequence asn1Sequence = o as Asn1Sequence; if (asn1Sequence != null) return new OriginatorIdentifierOrKey(IssuerAndSerialNumber.GetInstance(asn1Sequence)); Asn1TaggedObject asn1TaggedObject = o as Asn1TaggedObject; if (asn1TaggedObject != null) { if (asn1TaggedObject.HasContextTag(0)) return new OriginatorIdentifierOrKey(SubjectKeyIdentifier.GetInstance(asn1TaggedObject, false)); if (asn1TaggedObject.HasContextTag(1)) return new OriginatorIdentifierOrKey(OriginatorPublicKey.GetInstance(asn1TaggedObject, false)); } throw new ArgumentException("Invalid OriginatorIdentifierOrKey: " + Platform.GetTypeName(o), "o"); } public static OriginatorIdentifierOrKey GetInstance(Asn1TaggedObject o, bool explicitly) { return Asn1Utilities.GetInstanceFromChoice(o, explicitly, GetInstance); } public OriginatorIdentifierOrKey(IssuerAndSerialNumber id) { m_id = id; } public OriginatorIdentifierOrKey(SubjectKeyIdentifier id) { m_id = new DerTaggedObject(false, 0, id); } public OriginatorIdentifierOrKey(OriginatorPublicKey id) { m_id = new DerTaggedObject(false, 1, id); } public override Asn1Object ToAsn1Object() { return m_id.ToAsn1Object(); } } }