1package org.bouncycastle.cms.jcajce;
2
3import java.security.cert.CertificateEncodingException;
4import java.security.cert.X509Certificate;
5
6import org.bouncycastle.cert.X509CertificateHolder;
7import org.bouncycastle.cert.jcajce.JcaX509CertificateHolder;
8import org.bouncycastle.cms.CMSAttributeTableGenerator;
9import org.bouncycastle.cms.SignerInfoGenerator;
10import org.bouncycastle.cms.SignerInfoGeneratorBuilder;
11import org.bouncycastle.operator.ContentSigner;
12import org.bouncycastle.operator.DigestCalculatorProvider;
13import org.bouncycastle.operator.OperatorCreationException;
14
15public class JcaSignerInfoGeneratorBuilder
16{
17    private SignerInfoGeneratorBuilder builder;
18
19    public JcaSignerInfoGeneratorBuilder(DigestCalculatorProvider digestProvider)
20    {
21        builder = new SignerInfoGeneratorBuilder(digestProvider);
22    }
23
24    /**
25     * If the passed in flag is true, the signer signature will be based on the data, not
26     * a collection of signed attributes, and no signed attributes will be included.
27     *
28     * @return the builder object
29     */
30    public JcaSignerInfoGeneratorBuilder setDirectSignature(boolean hasNoSignedAttributes)
31    {
32        builder.setDirectSignature(hasNoSignedAttributes);
33
34        return this;
35    }
36
37    public JcaSignerInfoGeneratorBuilder setSignedAttributeGenerator(CMSAttributeTableGenerator signedGen)
38    {
39        builder.setSignedAttributeGenerator(signedGen);
40
41        return this;
42    }
43
44    public JcaSignerInfoGeneratorBuilder setUnsignedAttributeGenerator(CMSAttributeTableGenerator unsignedGen)
45    {
46        builder.setUnsignedAttributeGenerator(unsignedGen);
47
48        return this;
49    }
50
51    public SignerInfoGenerator build(ContentSigner contentSigner, X509CertificateHolder certHolder)
52        throws OperatorCreationException
53    {
54        return builder.build(contentSigner, certHolder);
55    }
56
57    public SignerInfoGenerator build(ContentSigner contentSigner, byte[] keyIdentifier)
58        throws OperatorCreationException
59    {
60        return builder.build(contentSigner, keyIdentifier);
61    }
62
63    public SignerInfoGenerator build(ContentSigner contentSigner, X509Certificate certificate)
64        throws OperatorCreationException, CertificateEncodingException
65    {
66        return this.build(contentSigner, new JcaX509CertificateHolder(certificate));
67    }
68}
69