1e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrompackage org.bouncycastle.asn1.cms; 2e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 3e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport java.math.BigInteger; 4e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 5e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.ASN1EncodableVector; 6e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.ASN1Integer; 7e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.ASN1Object; 8e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.ASN1Primitive; 9e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.ASN1Sequence; 10e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.DERSequence; 11e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.x500.X500Name; 12e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.x509.Certificate; 13e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.x509.X509CertificateStructure; 14e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.x509.X509Name; 15e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 165db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root/** 175db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root * <a href="http://tools.ietf.org/html/rfc5652#section-10.2.4">RFC 5652</a>: IssuerAndSerialNumber object. 185db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root * <p> 195db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root * <pre> 205db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root * IssuerAndSerialNumber ::= SEQUENCE { 215db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root * issuer Name, 225db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root * serialNumber CertificateSerialNumber 235db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root * } 245db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root * 255db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root * CertificateSerialNumber ::= INTEGER -- See RFC 5280 265db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root * </pre> 275db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root */ 28e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrompublic class IssuerAndSerialNumber 29e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom extends ASN1Object 30e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom{ 31e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom private X500Name name; 32e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom private ASN1Integer serialNumber; 33e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 345db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root /** 355db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root * Return an IssuerAndSerialNumber object from the given object. 365db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root * <p> 375db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root * Accepted inputs: 385db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root * <ul> 395db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root * <li> null → null 405db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root * <li> {@link IssuerAndSerialNumber} object 415db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root * <li> {@link org.bouncycastle.asn1.ASN1Sequence#getInstance(java.lang.Object) ASN1Sequence} input formats with IssuerAndSerialNumber structure inside 425db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root * </ul> 435db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root * 445db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root * @param obj the object we want converted. 455db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root * @exception IllegalArgumentException if the object cannot be converted. 465db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root */ 47e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom public static IssuerAndSerialNumber getInstance( 48e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom Object obj) 49e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 50e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom if (obj instanceof IssuerAndSerialNumber) 51e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 52e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom return (IssuerAndSerialNumber)obj; 53e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 54e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom else if (obj != null) 55e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 56e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom return new IssuerAndSerialNumber(ASN1Sequence.getInstance(obj)); 57e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 58e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 59e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom return null; 60e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 61e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 62a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom /** 63a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom * @deprecated use getInstance() method. 64a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom */ 65e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom public IssuerAndSerialNumber( 66e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom ASN1Sequence seq) 67e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 68e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom this.name = X500Name.getInstance(seq.getObjectAt(0)); 69e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom this.serialNumber = (ASN1Integer)seq.getObjectAt(1); 70e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 71e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 72e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom public IssuerAndSerialNumber( 73e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom Certificate certificate) 74e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 75e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom this.name = certificate.getIssuer(); 76e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom this.serialNumber = certificate.getSerialNumber(); 77e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 78e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 795db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root /** 805db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root * @deprecated use constructor taking Certificate 815db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root */ 82e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom public IssuerAndSerialNumber( 83e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom X509CertificateStructure certificate) 84e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 85e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom this.name = certificate.getIssuer(); 86e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom this.serialNumber = certificate.getSerialNumber(); 87e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 88e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 89e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom public IssuerAndSerialNumber( 90e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom X500Name name, 91e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom BigInteger serialNumber) 92e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 93e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom this.name = name; 94e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom this.serialNumber = new ASN1Integer(serialNumber); 95e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 96e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 97e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom /** 98e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom * @deprecated use X500Name constructor 99e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom */ 100e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom public IssuerAndSerialNumber( 101e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom X509Name name, 102e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom BigInteger serialNumber) 103e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 104e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom this.name = X500Name.getInstance(name); 105e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom this.serialNumber = new ASN1Integer(serialNumber); 106e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 107e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 108e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom /** 109e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom * @deprecated use X500Name constructor 110e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom */ 111e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom public IssuerAndSerialNumber( 112e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom X509Name name, 113e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom ASN1Integer serialNumber) 114e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 115e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom this.name = X500Name.getInstance(name); 116e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom this.serialNumber = serialNumber; 117e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 118e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 119e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom public X500Name getName() 120e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 121e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom return name; 122e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 123e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 124e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom public ASN1Integer getSerialNumber() 125e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 126e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom return serialNumber; 127e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 128e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 129e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom public ASN1Primitive toASN1Primitive() 130e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { 131e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom ASN1EncodableVector v = new ASN1EncodableVector(); 132e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 133e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom v.add(name); 134e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom v.add(serialNumber); 135e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 136e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom return new DERSequence(v); 137e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 138e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom} 139