1e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrompackage org.bouncycastle.asn1.cms; 2e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 3e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.ASN1Choice; 4e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.ASN1Encodable; 5e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.ASN1Object; 6e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.ASN1OctetString; 7e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.ASN1Primitive; 8e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.ASN1TaggedObject; 9e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.DERTaggedObject; 10e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 11e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrompublic class SignerIdentifier 12e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom extends ASN1Object 13e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom implements ASN1Choice 14e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom{ 15e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom private ASN1Encodable id; 16e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 17e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom public SignerIdentifier( 18e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom IssuerAndSerialNumber id) 19e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 20e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom this.id = id; 21e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 22e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 23e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom public SignerIdentifier( 24e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom ASN1OctetString id) 25e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 26e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom this.id = new DERTaggedObject(false, 0, id); 27e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 28e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 29e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom public SignerIdentifier( 30e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom ASN1Primitive id) 31e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 32e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom this.id = id; 33e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 34e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 35e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom /** 36e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom * return a SignerIdentifier object from the given object. 37e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom * 38e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom * @param o the object we want converted. 39e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom * @exception IllegalArgumentException if the object cannot be converted. 40e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom */ 41e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom public static SignerIdentifier getInstance( 42e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom Object o) 43e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 44e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom if (o == null || o instanceof SignerIdentifier) 45e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 46e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom return (SignerIdentifier)o; 47e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 48e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 49e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom if (o instanceof IssuerAndSerialNumber) 50e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 51e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom return new SignerIdentifier((IssuerAndSerialNumber)o); 52e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 53e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 54e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom if (o instanceof ASN1OctetString) 55e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 56e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom return new SignerIdentifier((ASN1OctetString)o); 57e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 58e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 59e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom if (o instanceof ASN1Primitive) 60e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 61e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom return new SignerIdentifier((ASN1Primitive)o); 62e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 63e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 64e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom throw new IllegalArgumentException( 65e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom "Illegal object in SignerIdentifier: " + o.getClass().getName()); 66e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 67e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 68e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom public boolean isTagged() 69e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 70e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom return (id instanceof ASN1TaggedObject); 71e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 72e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 73e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom public ASN1Encodable getId() 74e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 75e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom if (id instanceof ASN1TaggedObject) 76e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 77e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom return ASN1OctetString.getInstance((ASN1TaggedObject)id, false); 78e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 79e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 80e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom return id; 81e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 82e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 83e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom /** 84e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom * Produce an object suitable for an ASN1OutputStream. 85e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom * <pre> 86e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom * SignerIdentifier ::= CHOICE { 87e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom * issuerAndSerialNumber IssuerAndSerialNumber, 88e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom * subjectKeyIdentifier [0] SubjectKeyIdentifier 89e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom * } 90e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom * 91e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom * SubjectKeyIdentifier ::= OCTET STRING 92e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom * </pre> 93e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom */ 94e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom public ASN1Primitive toASN1Primitive() 95e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 96e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom return id.toASN1Primitive(); 97e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 98e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom} 99