Home | History | Annotate | Download | only in x509
      1 package org.bouncycastle.asn1.x509;
      2 
      3 import org.bouncycastle.asn1.ASN1EncodableVector;
      4 import org.bouncycastle.asn1.ASN1Object;
      5 import org.bouncycastle.asn1.ASN1Primitive;
      6 import org.bouncycastle.asn1.ASN1Sequence;
      7 import org.bouncycastle.asn1.ASN1TaggedObject;
      8 import org.bouncycastle.asn1.DERSequence;
      9 import org.bouncycastle.asn1.DERTaggedObject;
     10 
     11 public class V2Form
     12     extends ASN1Object
     13 {
     14     GeneralNames        issuerName;
     15     IssuerSerial        baseCertificateID;
     16     ObjectDigestInfo    objectDigestInfo;
     17 
     18     public static V2Form getInstance(
     19         ASN1TaggedObject obj,
     20         boolean          explicit)
     21     {
     22         return getInstance(ASN1Sequence.getInstance(obj, explicit));
     23     }
     24 
     25     public static V2Form getInstance(
     26         Object  obj)
     27     {
     28         if (obj instanceof V2Form)
     29         {
     30             return (V2Form)obj;
     31         }
     32         else if (obj != null)
     33         {
     34             return new V2Form(ASN1Sequence.getInstance(obj));
     35         }
     36 
     37         return null;
     38     }
     39 
     40     public V2Form(
     41         GeneralNames    issuerName)
     42     {
     43         this(issuerName, null, null);
     44     }
     45 
     46     public V2Form(
     47         GeneralNames    issuerName,
     48         IssuerSerial    baseCertificateID)
     49     {
     50         this(issuerName, baseCertificateID, null);
     51     }
     52 
     53     public V2Form(
     54         GeneralNames    issuerName,
     55         ObjectDigestInfo objectDigestInfo)
     56     {
     57         this(issuerName, null, objectDigestInfo);
     58     }
     59 
     60     public V2Form(
     61         GeneralNames    issuerName,
     62         IssuerSerial    baseCertificateID,
     63         ObjectDigestInfo objectDigestInfo)
     64     {
     65         this.issuerName = issuerName;
     66         this.baseCertificateID = baseCertificateID;
     67         this.objectDigestInfo = objectDigestInfo;
     68     }
     69 
     70     /**
     71      * @deprecated use getInstance().
     72      */
     73     public V2Form(
     74         ASN1Sequence seq)
     75     {
     76         if (seq.size() > 3)
     77         {
     78             throw new IllegalArgumentException("Bad sequence size: " + seq.size());
     79         }
     80 
     81         int    index = 0;
     82 
     83         if (!(seq.getObjectAt(0) instanceof ASN1TaggedObject))
     84         {
     85             index++;
     86             this.issuerName = GeneralNames.getInstance(seq.getObjectAt(0));
     87         }
     88 
     89         for (int i = index; i != seq.size(); i++)
     90         {
     91             ASN1TaggedObject o = ASN1TaggedObject.getInstance(seq.getObjectAt(i));
     92             if (o.getTagNo() == 0)
     93             {
     94                 baseCertificateID = IssuerSerial.getInstance(o, false);
     95             }
     96             else if (o.getTagNo() == 1)
     97             {
     98                 objectDigestInfo = ObjectDigestInfo.getInstance(o, false);
     99             }
    100             else
    101             {
    102                 throw new IllegalArgumentException("Bad tag number: "
    103                         + o.getTagNo());
    104             }
    105         }
    106     }
    107 
    108     public GeneralNames getIssuerName()
    109     {
    110         return issuerName;
    111     }
    112 
    113     public IssuerSerial getBaseCertificateID()
    114     {
    115         return baseCertificateID;
    116     }
    117 
    118     public ObjectDigestInfo getObjectDigestInfo()
    119     {
    120         return objectDigestInfo;
    121     }
    122 
    123     /**
    124      * Produce an object suitable for an ASN1OutputStream.
    125      * <pre>
    126      *  V2Form ::= SEQUENCE {
    127      *       issuerName            GeneralNames  OPTIONAL,
    128      *       baseCertificateID     [0] IssuerSerial  OPTIONAL,
    129      *       objectDigestInfo      [1] ObjectDigestInfo  OPTIONAL
    130      *         -- issuerName MUST be present in this profile
    131      *         -- baseCertificateID and objectDigestInfo MUST NOT
    132      *         -- be present in this profile
    133      *  }
    134      * </pre>
    135      */
    136     public ASN1Primitive toASN1Primitive()
    137     {
    138         ASN1EncodableVector  v = new ASN1EncodableVector();
    139 
    140         if (issuerName != null)
    141         {
    142             v.add(issuerName);
    143         }
    144 
    145         if (baseCertificateID != null)
    146         {
    147             v.add(new DERTaggedObject(false, 0, baseCertificateID));
    148         }
    149 
    150         if (objectDigestInfo != null)
    151         {
    152             v.add(new DERTaggedObject(false, 1, objectDigestInfo));
    153         }
    154 
    155         return new DERSequence(v);
    156     }
    157 }
    158