Home | History | Annotate | Download | only in x509
      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