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 AttributeCertificateInfo
     13     extends ASN1Encodable
     14 {
     15     private DERInteger              version;
     16     private Holder                  holder;
     17     private AttCertIssuer           issuer;
     18     private AlgorithmIdentifier     signature;
     19     private DERInteger              serialNumber;
     20     private AttCertValidityPeriod   attrCertValidityPeriod;
     21     private ASN1Sequence            attributes;
     22     private DERBitString            issuerUniqueID;
     23     private X509Extensions          extensions;
     24 
     25     public static AttributeCertificateInfo getInstance(
     26         ASN1TaggedObject obj,
     27         boolean          explicit)
     28     {
     29         return getInstance(ASN1Sequence.getInstance(obj, explicit));
     30     }
     31 
     32     public static AttributeCertificateInfo getInstance(
     33         Object  obj)
     34     {
     35         if (obj instanceof AttributeCertificateInfo)
     36         {
     37             return (AttributeCertificateInfo)obj;
     38         }
     39         else if (obj instanceof ASN1Sequence)
     40         {
     41             return new AttributeCertificateInfo((ASN1Sequence)obj);
     42         }
     43 
     44         throw new IllegalArgumentException("unknown object in factory");
     45     }
     46 
     47     public AttributeCertificateInfo(
     48         ASN1Sequence   seq)
     49     {
     50         if (seq.size() < 7 || seq.size() > 9)
     51         {
     52             throw new IllegalArgumentException("Bad sequence size: " + seq.size());
     53         }
     54 
     55         this.version = DERInteger.getInstance(seq.getObjectAt(0));
     56         this.holder = Holder.getInstance(seq.getObjectAt(1));
     57         this.issuer = AttCertIssuer.getInstance(seq.getObjectAt(2));
     58         this.signature = AlgorithmIdentifier.getInstance(seq.getObjectAt(3));
     59         this.serialNumber = DERInteger.getInstance(seq.getObjectAt(4));
     60         this.attrCertValidityPeriod = AttCertValidityPeriod.getInstance(seq.getObjectAt(5));
     61         this.attributes = ASN1Sequence.getInstance(seq.getObjectAt(6));
     62 
     63         for (int i = 7; i < seq.size(); i++)
     64         {
     65             ASN1Encodable    obj = (ASN1Encodable)seq.getObjectAt(i);
     66 
     67             if (obj instanceof DERBitString)
     68             {
     69                 this.issuerUniqueID = DERBitString.getInstance(seq.getObjectAt(i));
     70             }
     71             else if (obj instanceof ASN1Sequence || obj instanceof X509Extensions)
     72             {
     73                 this.extensions = X509Extensions.getInstance(seq.getObjectAt(i));
     74             }
     75         }
     76     }
     77 
     78     public DERInteger getVersion()
     79     {
     80         return version;
     81     }
     82 
     83     public Holder getHolder()
     84     {
     85         return holder;
     86     }
     87 
     88     public AttCertIssuer getIssuer()
     89     {
     90         return issuer;
     91     }
     92 
     93     public AlgorithmIdentifier getSignature()
     94     {
     95         return signature;
     96     }
     97 
     98     public DERInteger getSerialNumber()
     99     {
    100         return serialNumber;
    101     }
    102 
    103     public AttCertValidityPeriod getAttrCertValidityPeriod()
    104     {
    105         return attrCertValidityPeriod;
    106     }
    107 
    108     public ASN1Sequence getAttributes()
    109     {
    110         return attributes;
    111     }
    112 
    113     public DERBitString getIssuerUniqueID()
    114     {
    115         return issuerUniqueID;
    116     }
    117 
    118     public X509Extensions getExtensions()
    119     {
    120         return extensions;
    121     }
    122 
    123     /**
    124      * Produce an object suitable for an ASN1OutputStream.
    125      * <pre>
    126      *  AttributeCertificateInfo ::= SEQUENCE {
    127      *       version              AttCertVersion -- version is v2,
    128      *       holder               Holder,
    129      *       issuer               AttCertIssuer,
    130      *       signature            AlgorithmIdentifier,
    131      *       serialNumber         CertificateSerialNumber,
    132      *       attrCertValidityPeriod   AttCertValidityPeriod,
    133      *       attributes           SEQUENCE OF Attribute,
    134      *       issuerUniqueID       UniqueIdentifier OPTIONAL,
    135      *       extensions           Extensions OPTIONAL
    136      *  }
    137      *
    138      *  AttCertVersion ::= INTEGER { v2(1) }
    139      * </pre>
    140      */
    141     public DERObject toASN1Object()
    142     {
    143         ASN1EncodableVector  v = new ASN1EncodableVector();
    144 
    145         v.add(version);
    146         v.add(holder);
    147         v.add(issuer);
    148         v.add(signature);
    149         v.add(serialNumber);
    150         v.add(attrCertValidityPeriod);
    151         v.add(attributes);
    152 
    153         if (issuerUniqueID != null)
    154         {
    155             v.add(issuerUniqueID);
    156         }
    157 
    158         if (extensions != null)
    159         {
    160             v.add(extensions);
    161         }
    162 
    163         return new DERSequence(v);
    164     }
    165 }
    166