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