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

CertTemplate

public class CertTemplate : Asn1Encodable
using Org.BouncyCastle.Asn1.X509; using System; namespace Org.BouncyCastle.Asn1.Crmf { public class CertTemplate : Asn1Encodable { private readonly Asn1Sequence seq; private readonly DerInteger version; private readonly DerInteger serialNumber; private readonly AlgorithmIdentifier signingAlg; private readonly X509Name issuer; private readonly OptionalValidity validity; private readonly X509Name subject; private readonly SubjectPublicKeyInfo publicKey; private readonly DerBitString issuerUID; private readonly DerBitString subjectUID; private readonly X509Extensions extensions; public virtual int Version => version.IntValueExact; public virtual DerInteger SerialNumber => serialNumber; public virtual AlgorithmIdentifier SigningAlg => signingAlg; public virtual X509Name Issuer => issuer; public virtual OptionalValidity Validity => validity; public virtual X509Name Subject => subject; public virtual SubjectPublicKeyInfo PublicKey => publicKey; public virtual DerBitString IssuerUID => issuerUID; public virtual DerBitString SubjectUID => subjectUID; public virtual X509Extensions Extensions => extensions; private CertTemplate(Asn1Sequence seq) { this.seq = seq; foreach (Asn1TaggedObject item in seq) { switch (item.TagNo) { case 0: version = DerInteger.GetInstance(item, false); break; case 1: serialNumber = DerInteger.GetInstance(item, false); break; case 2: signingAlg = AlgorithmIdentifier.GetInstance(item, false); break; case 3: issuer = X509Name.GetInstance(item, true); break; case 4: validity = OptionalValidity.GetInstance(Asn1Sequence.GetInstance(item, false)); break; case 5: subject = X509Name.GetInstance(item, true); break; case 6: publicKey = SubjectPublicKeyInfo.GetInstance(item, false); break; case 7: issuerUID = DerBitString.GetInstance(item, false); break; case 8: subjectUID = DerBitString.GetInstance(item, false); break; case 9: extensions = X509Extensions.GetInstance(item, false); break; default: throw new ArgumentException("unknown tag: " + item.TagNo.ToString(), "seq"); } } } public static CertTemplate GetInstance(object obj) { if (obj is CertTemplate) return (CertTemplate)obj; if (obj != null) return new CertTemplate(Asn1Sequence.GetInstance(obj)); return null; } public override Asn1Object ToAsn1Object() { return seq; } } }