Home | History | Annotate | Download | only in x509
      1 package org.bouncycastle.asn1.x509;
      2 
      3 import java.math.BigInteger;
      4 
      5 import org.bouncycastle.asn1.ASN1EncodableVector;
      6 import org.bouncycastle.asn1.ASN1Integer;
      7 import org.bouncycastle.asn1.ASN1Object;
      8 import org.bouncycastle.asn1.ASN1Primitive;
      9 import org.bouncycastle.asn1.ASN1Sequence;
     10 import org.bouncycastle.asn1.ASN1TaggedObject;
     11 import org.bouncycastle.asn1.DERBitString;
     12 import org.bouncycastle.asn1.DERSequence;
     13 import org.bouncycastle.asn1.x500.X500Name;
     14 
     15 public class IssuerSerial
     16     extends ASN1Object
     17 {
     18     GeneralNames            issuer;
     19     ASN1Integer              serial;
     20     DERBitString            issuerUID;
     21 
     22     public static IssuerSerial getInstance(
     23             Object  obj)
     24     {
     25         if (obj instanceof IssuerSerial)
     26         {
     27             return (IssuerSerial)obj;
     28         }
     29 
     30         if (obj != null)
     31         {
     32             return new IssuerSerial(ASN1Sequence.getInstance(obj));
     33         }
     34 
     35         return null;
     36     }
     37 
     38     public static IssuerSerial getInstance(
     39         ASN1TaggedObject obj,
     40         boolean          explicit)
     41     {
     42         return getInstance(ASN1Sequence.getInstance(obj, explicit));
     43     }
     44 
     45     private IssuerSerial(
     46         ASN1Sequence    seq)
     47     {
     48         if (seq.size() != 2 && seq.size() != 3)
     49         {
     50             throw new IllegalArgumentException("Bad sequence size: " + seq.size());
     51         }
     52 
     53         issuer = GeneralNames.getInstance(seq.getObjectAt(0));
     54         serial = ASN1Integer.getInstance(seq.getObjectAt(1));
     55 
     56         if (seq.size() == 3)
     57         {
     58             issuerUID = DERBitString.getInstance(seq.getObjectAt(2));
     59         }
     60     }
     61 
     62     public IssuerSerial(
     63         X500Name   issuer,
     64         BigInteger serial)
     65     {
     66         this(new GeneralNames(new GeneralName(issuer)), new ASN1Integer(serial));
     67     }
     68 
     69     public IssuerSerial(
     70         GeneralNames    issuer,
     71         BigInteger serial)
     72     {
     73         this(issuer, new ASN1Integer(serial));
     74     }
     75 
     76     public IssuerSerial(
     77         GeneralNames    issuer,
     78         ASN1Integer      serial)
     79     {
     80         this.issuer = issuer;
     81         this.serial = serial;
     82     }
     83 
     84     public GeneralNames getIssuer()
     85     {
     86         return issuer;
     87     }
     88 
     89     public ASN1Integer getSerial()
     90     {
     91         return serial;
     92     }
     93 
     94     public DERBitString getIssuerUID()
     95     {
     96         return issuerUID;
     97     }
     98 
     99     /**
    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 }
    124