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

V3TbsCertificateGenerator

using System; namespace Org.BouncyCastle.Asn1.X509 { public class V3TbsCertificateGenerator { private static readonly DerTaggedObject Version = new DerTaggedObject(0, DerInteger.Two); internal DerInteger serialNumber; internal AlgorithmIdentifier signature; internal X509Name issuer; internal Validity validity; internal Time startDate; internal Time endDate; internal X509Name subject; internal SubjectPublicKeyInfo subjectPublicKeyInfo; internal X509Extensions extensions; private bool altNamePresentAndCritical; private DerBitString issuerUniqueID; private DerBitString subjectUniqueID; public void SetSerialNumber(DerInteger serialNumber) { this.serialNumber = serialNumber; } public void SetSignature(AlgorithmIdentifier signature) { this.signature = signature; } public void SetIssuer(X509Name issuer) { this.issuer = issuer; } public void SetValidity(Validity validity) { this.validity = validity; startDate = null; endDate = null; } public void SetStartDate(Time startDate) { validity = null; this.startDate = startDate; } public void SetStartDate(Asn1UtcTime startDate) { SetStartDate(new Time(startDate)); } public void SetEndDate(Time endDate) { validity = null; this.endDate = endDate; } public void SetEndDate(Asn1UtcTime endDate) { SetEndDate(new Time(endDate)); } public void SetSubject(X509Name subject) { this.subject = subject; } public void SetIssuerUniqueID(DerBitString uniqueID) { issuerUniqueID = uniqueID; } public void SetSubjectUniqueID(DerBitString uniqueID) { subjectUniqueID = uniqueID; } public void SetSubjectPublicKeyInfo(SubjectPublicKeyInfo pubKeyInfo) { subjectPublicKeyInfo = pubKeyInfo; } public void SetExtensions(X509Extensions extensions) { this.extensions = extensions; if (extensions != null) { X509Extension extension = extensions.GetExtension(X509Extensions.SubjectAlternativeName); if (extension != null && extension.IsCritical) altNamePresentAndCritical = true; } } public Asn1Sequence GeneratePreTbsCertificate() { if (signature != null) throw new InvalidOperationException("signature field should not be set in PreTBSCertificate"); if (serialNumber == null || issuer == null || (validity == null && (startDate == null || endDate == null)) || (subject == null && !altNamePresentAndCritical) || subjectPublicKeyInfo == null) throw new InvalidOperationException("not all mandatory fields set in V3 TBScertificate generator"); Asn1EncodableVector asn1EncodableVector = new Asn1EncodableVector(9); asn1EncodableVector.Add(Version); asn1EncodableVector.Add(serialNumber); asn1EncodableVector.Add(issuer); asn1EncodableVector.Add(validity ?? new Validity(startDate, endDate)); asn1EncodableVector.Add(subject ?? X509Name.GetInstance(DerSequence.Empty)); asn1EncodableVector.Add(subjectPublicKeyInfo); asn1EncodableVector.AddOptionalTagged(false, 1, issuerUniqueID); asn1EncodableVector.AddOptionalTagged(false, 2, subjectUniqueID); asn1EncodableVector.AddOptionalTagged(true, 3, extensions); return new DerSequence(asn1EncodableVector); } public TbsCertificateStructure GenerateTbsCertificate() { if (serialNumber == null || signature == null || issuer == null || (validity == null && (startDate == null || endDate == null)) || (subject == null && !altNamePresentAndCritical) || subjectPublicKeyInfo == null) throw new InvalidOperationException("not all mandatory fields set in V3 TBScertificate generator"); return new TbsCertificateStructure(DerInteger.Two, serialNumber, signature, issuer, validity ?? new Validity(startDate, endDate), subject ?? X509Name.GetInstance(DerSequence.Empty), subjectPublicKeyInfo, issuerUniqueID, subjectUniqueID, extensions); } } }