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

SignerInfoGenerator

public class SignerInfoGenerator
using Org.BouncyCastle.Asn1.Cms; using Org.BouncyCastle.Crypto; using Org.BouncyCastle.X509; namespace Org.BouncyCastle.Cms { public class SignerInfoGenerator { private readonly SignerIdentifier m_sigID; private readonly ISignatureFactory m_signatureFactory; private readonly CmsAttributeTableGenerator m_signedGen; private readonly CmsAttributeTableGenerator m_unsignedGen; private readonly X509Certificate m_certificate; public X509Certificate Certificate => m_certificate; public int GeneratedVersion { get { if (!m_sigID.IsTagged) return 1; return 3; } } public ISignatureFactory SignatureFactory => m_signatureFactory; public CmsAttributeTableGenerator SignedAttributeTableGenerator => m_signedGen; public SignerIdentifier SignerID => m_sigID; public CmsAttributeTableGenerator UnsignedAttributeTableGenerator => m_unsignedGen; internal SignerInfoGenerator(SignerIdentifier sigID, ISignatureFactory signatureFactory, CmsAttributeTableGenerator signedGen, CmsAttributeTableGenerator unsignedGen, X509Certificate certificate) { m_sigID = sigID; m_signatureFactory = signatureFactory; m_signedGen = signedGen; m_unsignedGen = unsignedGen; m_certificate = certificate; } public SignerInfoGeneratorBuilder NewBuilder() { SignerInfoGeneratorBuilder signerInfoGeneratorBuilder = new SignerInfoGeneratorBuilder(); signerInfoGeneratorBuilder.WithSignedAttributeGenerator(m_signedGen); signerInfoGeneratorBuilder.WithUnsignedAttributeGenerator(m_unsignedGen); signerInfoGeneratorBuilder.SetDirectSignature(m_signedGen == null); return signerInfoGeneratorBuilder; } } }