SignerInfoGeneratorBuilder
using Org.BouncyCastle.Asn1.Cms;
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.X509;
namespace Org.BouncyCastle.Cms
{
public class SignerInfoGeneratorBuilder
{
private bool m_directSignature;
private CmsAttributeTableGenerator m_signedGen;
private CmsAttributeTableGenerator m_unsignedGen;
public SignerInfoGeneratorBuilder SetDirectSignature(bool hasNoSignedAttributes)
{
m_directSignature = hasNoSignedAttributes;
return this;
}
public SignerInfoGeneratorBuilder WithSignedAttributeGenerator(CmsAttributeTableGenerator signedGen)
{
m_signedGen = signedGen;
return this;
}
public SignerInfoGeneratorBuilder WithUnsignedAttributeGenerator(CmsAttributeTableGenerator unsignedGen)
{
m_unsignedGen = unsignedGen;
return this;
}
public SignerInfoGenerator Build(ISignatureFactory contentSigner, X509Certificate certificate)
{
SignerIdentifier signerIdentifier = CmsUtilities.GetSignerIdentifier(certificate);
return CreateGenerator(contentSigner, signerIdentifier, certificate);
}
public SignerInfoGenerator Build(ISignatureFactory signerFactory, byte[] subjectKeyIdentifier)
{
SignerIdentifier signerIdentifier = CmsUtilities.GetSignerIdentifier(subjectKeyIdentifier);
return CreateGenerator(signerFactory, signerIdentifier, null);
}
private SignerInfoGenerator CreateGenerator(ISignatureFactory signatureFactory, SignerIdentifier sigID, X509Certificate certificate)
{
CmsAttributeTableGenerator cmsAttributeTableGenerator = m_signedGen;
CmsAttributeTableGenerator unsignedGen = m_unsignedGen;
if (m_directSignature) {
cmsAttributeTableGenerator = null;
unsignedGen = null;
} else if (cmsAttributeTableGenerator == null) {
cmsAttributeTableGenerator = new DefaultSignedAttributeTableGenerator();
}
return new SignerInfoGenerator(sigID, signatureFactory, cmsAttributeTableGenerator, unsignedGen, certificate);
}
}
}