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