1 package org.bouncycastle.asn1.x509; 2 3 import org.bouncycastle.asn1.ASN1Encodable; 4 import org.bouncycastle.asn1.ASN1EncodableVector; 5 import org.bouncycastle.asn1.ASN1Sequence; 6 import org.bouncycastle.asn1.ASN1TaggedObject; 7 import org.bouncycastle.asn1.DERBitString; 8 import org.bouncycastle.asn1.DERInteger; 9 import org.bouncycastle.asn1.DERObject; 10 import org.bouncycastle.asn1.DERSequence; 11 12 public class IssuerSerial 13 extends ASN1Encodable 14 { 15 GeneralNames issuer; 16 DERInteger serial; 17 DERBitString issuerUID; 18 19 public static IssuerSerial getInstance( 20 Object obj) 21 { 22 if (obj == null || obj instanceof IssuerSerial) 23 { 24 return (IssuerSerial)obj; 25 } 26 27 if (obj instanceof ASN1Sequence) 28 { 29 return new IssuerSerial((ASN1Sequence)obj); 30 } 31 32 throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName()); 33 } 34 35 public static IssuerSerial getInstance( 36 ASN1TaggedObject obj, 37 boolean explicit) 38 { 39 return getInstance(ASN1Sequence.getInstance(obj, explicit)); 40 } 41 42 public IssuerSerial( 43 ASN1Sequence seq) 44 { 45 if (seq.size() != 2 && seq.size() != 3) 46 { 47 throw new IllegalArgumentException("Bad sequence size: " + seq.size()); 48 } 49 50 issuer = GeneralNames.getInstance(seq.getObjectAt(0)); 51 serial = DERInteger.getInstance(seq.getObjectAt(1)); 52 53 if (seq.size() == 3) 54 { 55 issuerUID = DERBitString.getInstance(seq.getObjectAt(2)); 56 } 57 } 58 59 public IssuerSerial( 60 GeneralNames issuer, 61 DERInteger serial) 62 { 63 this.issuer = issuer; 64 this.serial = serial; 65 } 66 67 public GeneralNames getIssuer() 68 { 69 return issuer; 70 } 71 72 public DERInteger getSerial() 73 { 74 return serial; 75 } 76 77 public DERBitString getIssuerUID() 78 { 79 return issuerUID; 80 } 81 82 /** 83 * Produce an object suitable for an ASN1OutputStream. 84 * <pre> 85 * IssuerSerial ::= SEQUENCE { 86 * issuer GeneralNames, 87 * serial CertificateSerialNumber, 88 * issuerUID UniqueIdentifier OPTIONAL 89 * } 90 * </pre> 91 */ 92 public DERObject toASN1Object() 93 { 94 ASN1EncodableVector v = new ASN1EncodableVector(); 95 96 v.add(issuer); 97 v.add(serial); 98 99 if (issuerUID != null) 100 { 101 v.add(issuerUID); 102 } 103 104 return new DERSequence(v); 105 } 106 } 107