001package org.apache.commons.ssl.org.bouncycastle.asn1.x509; 002 003import java.math.BigInteger; 004 005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector; 006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Integer; 007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object; 008import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive; 009import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence; 010import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1TaggedObject; 011import org.apache.commons.ssl.org.bouncycastle.asn1.DERBitString; 012import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence; 013import org.apache.commons.ssl.org.bouncycastle.asn1.x500.X500Name; 014 015public class IssuerSerial 016 extends ASN1Object 017{ 018 GeneralNames issuer; 019 ASN1Integer serial; 020 DERBitString issuerUID; 021 022 public static IssuerSerial getInstance( 023 Object obj) 024 { 025 if (obj instanceof IssuerSerial) 026 { 027 return (IssuerSerial)obj; 028 } 029 030 if (obj != null) 031 { 032 return new IssuerSerial(ASN1Sequence.getInstance(obj)); 033 } 034 035 return null; 036 } 037 038 public static IssuerSerial getInstance( 039 ASN1TaggedObject obj, 040 boolean explicit) 041 { 042 return getInstance(ASN1Sequence.getInstance(obj, explicit)); 043 } 044 045 private IssuerSerial( 046 ASN1Sequence seq) 047 { 048 if (seq.size() != 2 && seq.size() != 3) 049 { 050 throw new IllegalArgumentException("Bad sequence size: " + seq.size()); 051 } 052 053 issuer = GeneralNames.getInstance(seq.getObjectAt(0)); 054 serial = ASN1Integer.getInstance(seq.getObjectAt(1)); 055 056 if (seq.size() == 3) 057 { 058 issuerUID = DERBitString.getInstance(seq.getObjectAt(2)); 059 } 060 } 061 062 public IssuerSerial( 063 X500Name issuer, 064 BigInteger serial) 065 { 066 this(new GeneralNames(new GeneralName(issuer)), new ASN1Integer(serial)); 067 } 068 069 public IssuerSerial( 070 GeneralNames issuer, 071 BigInteger serial) 072 { 073 this(issuer, new ASN1Integer(serial)); 074 } 075 076 public IssuerSerial( 077 GeneralNames issuer, 078 ASN1Integer serial) 079 { 080 this.issuer = issuer; 081 this.serial = serial; 082 } 083 084 public GeneralNames getIssuer() 085 { 086 return issuer; 087 } 088 089 public ASN1Integer getSerial() 090 { 091 return serial; 092 } 093 094 public DERBitString getIssuerUID() 095 { 096 return issuerUID; 097 } 098 099 /** 100 * Produce an object suitable for an ASN1OutputStream. 101 * <pre> 102 * IssuerSerial ::= SEQUENCE { 103 * issuer GeneralNames, 104 * serial CertificateSerialNumber, 105 * issuerUID UniqueIdentifier OPTIONAL 106 * } 107 * </pre> 108 */ 109 public ASN1Primitive toASN1Primitive() 110 { 111 ASN1EncodableVector v = new ASN1EncodableVector(); 112 113 v.add(issuer); 114 v.add(serial); 115 116 if (issuerUID != null) 117 { 118 v.add(issuerUID); 119 } 120 121 return new DERSequence(v); 122 } 123}