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

AuthorityKeyIdentifier

using Org.BouncyCastle.Asn1.Oiw; using Org.BouncyCastle.Math; using Org.BouncyCastle.Security; using Org.BouncyCastle.Utilities.Encoders; using System; namespace Org.BouncyCastle.Asn1.X509 { public class AuthorityKeyIdentifier : Asn1Encodable { private readonly Asn1OctetString m_keyIdentifier; private readonly GeneralNames m_authorityCertIssuer; private readonly DerInteger m_authorityCertSerialNumber; public GeneralNames AuthorityCertIssuer => m_authorityCertIssuer; public BigInteger AuthorityCertSerialNumber => m_authorityCertSerialNumber?.Value; public Asn1OctetString KeyIdentifier => m_keyIdentifier; public static AuthorityKeyIdentifier GetInstance(object obj) { if (obj == null) return null; AuthorityKeyIdentifier authorityKeyIdentifier = obj as AuthorityKeyIdentifier; if (authorityKeyIdentifier != null) return authorityKeyIdentifier; X509Extension x509Extension = obj as X509Extension; if (x509Extension != null) return GetInstance(X509Extension.ConvertValueToObject(x509Extension)); return new AuthorityKeyIdentifier(Asn1Sequence.GetInstance(obj)); } public static AuthorityKeyIdentifier GetInstance(Asn1TaggedObject obj, bool explicitly) { return new AuthorityKeyIdentifier(Asn1Sequence.GetInstance(obj, explicitly)); } public static AuthorityKeyIdentifier GetTagged(Asn1TaggedObject taggedObject, bool declaredExplicit) { return new AuthorityKeyIdentifier(Asn1Sequence.GetTagged(taggedObject, declaredExplicit)); } public static AuthorityKeyIdentifier FromExtensions(X509Extensions extensions) { return GetInstance(X509Extensions.GetExtensionParsedValue(extensions, X509Extensions.AuthorityKeyIdentifier)); } [Obsolete("Use 'GetInstance' instead")] protected internal AuthorityKeyIdentifier(Asn1Sequence seq) { int count = seq.Count; int sequencePosition = 0; if (count < 0 || count > 3) throw new ArgumentException("Bad sequence size: " + count.ToString(), "seq"); m_keyIdentifier = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 0, false, Asn1OctetString.GetTagged); m_authorityCertIssuer = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 1, false, GeneralNames.GetTagged); m_authorityCertSerialNumber = Asn1Utilities.ReadOptionalContextTagged(seq, ref sequencePosition, 2, false, DerInteger.GetTagged); if (sequencePosition != count) throw new ArgumentException("Unexpected elements in sequence", "seq"); } [Obsolete("Use 'X509ExtensionUtilities' methods instead")] public AuthorityKeyIdentifier(SubjectPublicKeyInfo spki) : this(spki, null, null) { } [Obsolete("Use 'X509ExtensionUtilities' methods instead")] public AuthorityKeyIdentifier(SubjectPublicKeyInfo spki, GeneralNames name, BigInteger serialNumber) : this(DigestUtilities.CalculateDigest(OiwObjectIdentifiers.IdSha1, spki.PublicKey.GetBytes()), name, serialNumber) { } public AuthorityKeyIdentifier(GeneralNames name, BigInteger serialNumber) : this((byte[])null, name, serialNumber) { } public AuthorityKeyIdentifier(byte[] keyIdentifier) : this(keyIdentifier, null, null) { } public AuthorityKeyIdentifier(byte[] keyIdentifier, GeneralNames name, BigInteger serialNumber) { m_keyIdentifier = DerOctetString.FromContentsOptional(keyIdentifier); m_authorityCertIssuer = name; m_authorityCertSerialNumber = ((serialNumber == null) ? null : new DerInteger(serialNumber)); } public AuthorityKeyIdentifier(Asn1OctetString keyIdentifier) : this(keyIdentifier, null, null) { } public AuthorityKeyIdentifier(Asn1OctetString keyIdentifier, GeneralNames authorityCertIssuer, DerInteger authorityCertSerialNumber) { m_keyIdentifier = keyIdentifier; m_authorityCertIssuer = authorityCertIssuer; m_authorityCertSerialNumber = authorityCertSerialNumber; } public byte[] GetKeyIdentifier() { return m_keyIdentifier?.GetOctets(); } public override Asn1Object ToAsn1Object() { Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(3); asn1EncodableVector.AddOptionalTagged(false, 0, m_keyIdentifier); asn1EncodableVector.AddOptionalTagged(false, 1, m_authorityCertIssuer); asn1EncodableVector.AddOptionalTagged(false, 2, m_authorityCertSerialNumber); return new DerSequence(asn1EncodableVector); } public override string ToString() { string str = (m_keyIdentifier == null) ? "null" : Hex.ToHexString(m_keyIdentifier.GetOctets()); return "AuthorityKeyIdentifier: KeyID(" + str + ")"; } } }