Home | History | Annotate | Download | only in cms
      1 package org.bouncycastle.asn1.cms;
      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.DERSequence;
     11 import org.bouncycastle.asn1.x500.X500Name;
     12 import org.bouncycastle.asn1.x509.Certificate;
     13 import org.bouncycastle.asn1.x509.X509CertificateStructure;
     14 import org.bouncycastle.asn1.x509.X509Name;
     15 
     16 /**
     17  * <a href="http://tools.ietf.org/html/rfc5652#section-10.2.4">RFC 5652</a>: IssuerAndSerialNumber object.
     18  * <p>
     19  * <pre>
     20  * IssuerAndSerialNumber ::= SEQUENCE {
     21  *     issuer Name,
     22  *     serialNumber CertificateSerialNumber
     23  * }
     24  *
     25  * CertificateSerialNumber ::= INTEGER  -- See RFC 5280
     26  * </pre>
     27  */
     28 public class IssuerAndSerialNumber
     29     extends ASN1Object
     30 {
     31     private X500Name    name;
     32     private ASN1Integer  serialNumber;
     33 
     34     /**
     35      * Return an IssuerAndSerialNumber object from the given object.
     36      * <p>
     37      * Accepted inputs:
     38      * <ul>
     39      * <li> null &rarr; null
     40      * <li> {@link IssuerAndSerialNumber} object
     41      * <li> {@link org.bouncycastle.asn1.ASN1Sequence#getInstance(java.lang.Object) ASN1Sequence} input formats with IssuerAndSerialNumber structure inside
     42      * </ul>
     43      *
     44      * @param obj the object we want converted.
     45      * @exception IllegalArgumentException if the object cannot be converted.
     46      */
     47     public static IssuerAndSerialNumber getInstance(
     48         Object  obj)
     49     {
     50         if (obj instanceof IssuerAndSerialNumber)
     51         {
     52             return (IssuerAndSerialNumber)obj;
     53         }
     54         else if (obj != null)
     55         {
     56             return new IssuerAndSerialNumber(ASN1Sequence.getInstance(obj));
     57         }
     58 
     59         return null;
     60     }
     61 
     62     /**
     63      * @deprecated  use getInstance() method.
     64      */
     65     public IssuerAndSerialNumber(
     66         ASN1Sequence    seq)
     67     {
     68         this.name = X500Name.getInstance(seq.getObjectAt(0));
     69         this.serialNumber = (ASN1Integer)seq.getObjectAt(1);
     70     }
     71 
     72     public IssuerAndSerialNumber(
     73         Certificate certificate)
     74     {
     75         this.name = certificate.getIssuer();
     76         this.serialNumber = certificate.getSerialNumber();
     77     }
     78 
     79     /**
     80      * @deprecated use constructor taking Certificate
     81      */
     82     public IssuerAndSerialNumber(
     83         X509CertificateStructure certificate)
     84     {
     85         this.name = certificate.getIssuer();
     86         this.serialNumber = certificate.getSerialNumber();
     87     }
     88 
     89     public IssuerAndSerialNumber(
     90         X500Name name,
     91         BigInteger  serialNumber)
     92     {
     93         this.name = name;
     94         this.serialNumber = new ASN1Integer(serialNumber);
     95     }
     96 
     97     /**
     98      * @deprecated use X500Name constructor
     99      */
    100     public IssuerAndSerialNumber(
    101         X509Name    name,
    102         BigInteger  serialNumber)
    103     {
    104         this.name = X500Name.getInstance(name);
    105         this.serialNumber = new ASN1Integer(serialNumber);
    106     }
    107 
    108     /**
    109      * @deprecated use X500Name constructor
    110      */
    111     public IssuerAndSerialNumber(
    112         X509Name    name,
    113         ASN1Integer  serialNumber)
    114     {
    115         this.name = X500Name.getInstance(name);
    116         this.serialNumber = serialNumber;
    117     }
    118 
    119     public X500Name getName()
    120     {
    121         return name;
    122     }
    123 
    124     public ASN1Integer getSerialNumber()
    125     {
    126         return serialNumber;
    127     }
    128 
    129     public ASN1Primitive toASN1Primitive()
    130     {
    131         ASN1EncodableVector    v = new ASN1EncodableVector();
    132 
    133         v.add(name);
    134         v.add(serialNumber);
    135 
    136         return new DERSequence(v);
    137     }
    138 }
    139