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.DERObject;
      8 import org.bouncycastle.asn1.DERSequence;
      9 import org.bouncycastle.asn1.DERTaggedObject;
     10 
     11 public class V2Form
     12     extends ASN1Encodable
     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 == null || obj instanceof V2Form)
     29         {
     30             return (V2Form)obj;
     31         }
     32         else if (obj instanceof ASN1Sequence)
     33         {
     34             return new V2Form((ASN1Sequence)obj);
     35         }
     36 
     37         throw new IllegalArgumentException("unknown object in factory");
     38     }
     39 
     40     public V2Form(
     41         GeneralNames    issuerName)
     42     {
     43         this.issuerName = issuerName;
     44     }
     45 
     46     public V2Form(
     47         ASN1Sequence seq)
     48     {
     49         if (seq.size() > 3)
     50         {
     51             throw new IllegalArgumentException("Bad sequence size: " + seq.size());
     52         }
     53 
     54         int    index = 0;
     55 
     56         if (!(seq.getObjectAt(0) instanceof ASN1TaggedObject))
     57         {
     58             index++;
     59             this.issuerName = GeneralNames.getInstance(seq.getObjectAt(0));
     60         }
     61 
     62         for (int i = index; i != seq.size(); i++)
     63         {
     64             ASN1TaggedObject o = ASN1TaggedObject.getInstance(seq.getObjectAt(i));
     65             if (o.getTagNo() == 0)
     66             {
     67                 baseCertificateID = IssuerSerial.getInstance(o, false);
     68             }
     69             else if (o.getTagNo() == 1)
     70             {
     71                 objectDigestInfo = ObjectDigestInfo.getInstance(o, false);
     72             }
     73             else
     74             {
     75                 throw new IllegalArgumentException("Bad tag number: "
     76                         + o.getTagNo());
     77             }
     78         }
     79     }
     80 
     81     public GeneralNames getIssuerName()
     82     {
     83         return issuerName;
     84     }
     85 
     86     public IssuerSerial getBaseCertificateID()
     87     {
     88         return baseCertificateID;
     89     }
     90 
     91     public ObjectDigestInfo getObjectDigestInfo()
     92     {
     93         return objectDigestInfo;
     94     }
     95 
     96     /**
     97      * Produce an object suitable for an ASN1OutputStream.
     98      * <pre>
     99      *  V2Form ::= SEQUENCE {
    100      *       issuerName            GeneralNames  OPTIONAL,
    101      *       baseCertificateID     [0] IssuerSerial  OPTIONAL,
    102      *       objectDigestInfo      [1] ObjectDigestInfo  OPTIONAL
    103      *         -- issuerName MUST be present in this profile
    104      *         -- baseCertificateID and objectDigestInfo MUST NOT
    105      *         -- be present in this profile
    106      *  }
    107      * </pre>
    108      */
    109     public DERObject toASN1Object()
    110     {
    111         ASN1EncodableVector  v = new ASN1EncodableVector();
    112 
    113         if (issuerName != null)
    114         {
    115             v.add(issuerName);
    116         }
    117 
    118         if (baseCertificateID != null)
    119         {
    120             v.add(new DERTaggedObject(false, 0, baseCertificateID));
    121         }
    122 
    123         if (objectDigestInfo != null)
    124         {
    125             v.add(new DERTaggedObject(false, 1, objectDigestInfo));
    126         }
    127 
    128         return new DERSequence(v);
    129     }
    130 }
    131