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

CertificateResponseBuilder

Builder for CertificateResponse objects (the CertResponse CRMF equivalent).
using Org.BouncyCastle.Asn1; using Org.BouncyCastle.Asn1.Cmp; using Org.BouncyCastle.Asn1.Cms; using Org.BouncyCastle.Asn1.Crmf; using Org.BouncyCastle.Cms; using Org.BouncyCastle.X509; using System; namespace Org.BouncyCastle.Crmf { public class CertificateResponseBuilder { private readonly DerInteger m_certReqID; private readonly PkiStatusInfo m_statusInfo; private CertifiedKeyPair m_certKeyPair; private Asn1OctetString m_rspInfo; public CertificateResponseBuilder(DerInteger certReqID, PkiStatusInfo statusInfo) { m_certReqID = certReqID; m_statusInfo = statusInfo; } public virtual CertificateResponseBuilder WithCertificate(X509Certificate certificate) { if (m_certKeyPair != null) throw new InvalidOperationException("certificate in response already set"); CmpCertificate certificate2 = new CmpCertificate(certificate.CertificateStructure); m_certKeyPair = new CertifiedKeyPair(new CertOrEncCert(certificate2)); return this; } public virtual CertificateResponseBuilder WithCertificate(CmpCertificate cmpCertificate) { if (m_certKeyPair != null) throw new InvalidOperationException("certificate in response already set"); m_certKeyPair = new CertifiedKeyPair(new CertOrEncCert(cmpCertificate)); return this; } public virtual CertificateResponseBuilder WithCertificate(CmsEnvelopedData encryptedCertificate) { if (m_certKeyPair != null) throw new InvalidOperationException("certificate in response already set"); EncryptedKey encryptedKey = new EncryptedKey(EnvelopedData.GetInstance(encryptedCertificate.ContentInfo.Content)); m_certKeyPair = new CertifiedKeyPair(new CertOrEncCert(encryptedKey)); return this; } public virtual CertificateResponseBuilder WithResponseInfo(byte[] responseInfo) { if (m_rspInfo != null) throw new InvalidOperationException("response info already set"); m_rspInfo = DerOctetString.FromContents(responseInfo); return this; } public virtual CertificateResponse Build() { return new CertificateResponse(new CertResponse(m_certReqID, m_statusInfo, m_certKeyPair, m_rspInfo)); } } }