1e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrompackage org.bouncycastle.cms;
2e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
3e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport java.math.BigInteger;
4e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
5e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.x500.X500Name;
6e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.cert.selector.X509CertificateHolderSelector;
7e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.util.Selector;
8e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
9e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom/**
10e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom * a basic index for a signer.
11e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom */
12e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrompublic class SignerId
13e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    implements Selector
14e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom{
15e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    private X509CertificateHolderSelector baseSelector;
16e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
17e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    private SignerId(X509CertificateHolderSelector baseSelector)
18e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
19e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        this.baseSelector = baseSelector;
20e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
21e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
22e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    /**
23e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     * Construct a signer ID with the value of a public key's subjectKeyId.
24e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     *
25e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     * @param subjectKeyId a subjectKeyId
26e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     */
27e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public SignerId(byte[] subjectKeyId)
28e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
29e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        this(null, null, subjectKeyId);
30e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
31e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
32e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    /**
33e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     * Construct a signer ID based on the issuer and serial number of the signer's associated
34e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     * certificate.
35e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     *
36e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     * @param issuer the issuer of the signer's associated certificate.
37e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     * @param serialNumber the serial number of the signer's associated certificate.
38e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     */
39e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public SignerId(X500Name issuer, BigInteger serialNumber)
40e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
41e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        this(issuer, serialNumber, null);
42e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
43e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
44e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    /**
45e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     * Construct a signer ID based on the issuer and serial number of the signer's associated
46e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     * certificate.
47e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     *
48e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     * @param issuer the issuer of the signer's associated certificate.
49e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     * @param serialNumber the serial number of the signer's associated certificate.
50e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     * @param subjectKeyId the subject key identifier to use to match the signers associated certificate.
51e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom     */
52e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public SignerId(X500Name issuer, BigInteger serialNumber, byte[] subjectKeyId)
53e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
54e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        this(new X509CertificateHolderSelector(issuer, serialNumber, subjectKeyId));
55e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
56e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
57e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public X500Name getIssuer()
58e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
59e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        return baseSelector.getIssuer();
60e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
61e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
62e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public BigInteger getSerialNumber()
63e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
64e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        return baseSelector.getSerialNumber();
65e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
66e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
67e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public byte[] getSubjectKeyIdentifier()
68e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
69e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        return baseSelector.getSubjectKeyIdentifier();
70e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
71e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
72e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public int hashCode()
73e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
74e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        return baseSelector.hashCode();
75e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
76e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
77e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public boolean equals(
78e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        Object  o)
79e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
80e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        if (!(o instanceof SignerId))
81e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        {
82e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom            return false;
83e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        }
84e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
85e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        SignerId id = (SignerId)o;
86e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
87e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        return this.baseSelector.equals(id.baseSelector);
88e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
89e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
90e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public boolean match(Object obj)
91e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
92e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        if (obj instanceof SignerInformation)
93e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        {
94e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom            return ((SignerInformation)obj).getSID().equals(this);
95e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        }
96e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
97e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        return baseSelector.match(obj);
98e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
99e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
100e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public Object clone()
101e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
102e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        return new SignerId(this.baseSelector);
103e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
104e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom}
105