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

AuthorityKeyIdentifierStructure

using Org.BouncyCastle.Asn1; using Org.BouncyCastle.Asn1.X509; using Org.BouncyCastle.Crypto; using Org.BouncyCastle.Security; using Org.BouncyCastle.Security.Certificates; using System; namespace Org.BouncyCastle.X509.Extension { public class AuthorityKeyIdentifierStructure : AuthorityKeyIdentifier { public AuthorityKeyIdentifierStructure(Asn1OctetString encodedValue) : base((Asn1Sequence)X509ExtensionUtilities.FromExtensionValue(encodedValue)) { } private static Asn1Sequence FromCertificate(X509Certificate certificate) { try { GeneralName name = new GeneralName(certificate.IssuerDN); if (certificate.Version == 3) { Asn1OctetString extensionValue = certificate.GetExtensionValue(X509Extensions.SubjectKeyIdentifier); if (extensionValue != null) return (Asn1Sequence)new AuthorityKeyIdentifier(((Asn1OctetString)X509ExtensionUtilities.FromExtensionValue(extensionValue)).GetOctets(), new GeneralNames(name), certificate.SerialNumber).ToAsn1Object(); } return (Asn1Sequence)new AuthorityKeyIdentifier(SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(certificate.GetPublicKey()), new GeneralNames(name), certificate.SerialNumber).ToAsn1Object(); } catch (Exception innerException) { throw new CertificateParsingException("Exception extracting certificate details", innerException); } } private static Asn1Sequence FromKey(AsymmetricKeyParameter pubKey) { try { return (Asn1Sequence)new AuthorityKeyIdentifier(SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(pubKey)).ToAsn1Object(); } catch (Exception ex) { throw new InvalidKeyException("can't process key: " + ex?.ToString()); } } public AuthorityKeyIdentifierStructure(X509Certificate certificate) : base(FromCertificate(certificate)) { } public AuthorityKeyIdentifierStructure(AsymmetricKeyParameter pubKey) : base(FromKey(pubKey)) { } } }