2003/02/12 06:21:04
[org.ibex.core.git] / src / org / bouncycastle / asn1 / x509 / TBSCertificateStructure.java
index d5c7cf7..fa4b06d 100644 (file)
@@ -25,21 +25,43 @@ import org.bouncycastle.asn1.pkcs.*;
 public class TBSCertificateStructure
     implements DEREncodable, X509ObjectIdentifiers, PKCSObjectIdentifiers
 {
-    DERConstructedSequence  seq;
+    ASN1Sequence            seq;
 
     DERInteger              version;
     DERInteger              serialNumber;
     AlgorithmIdentifier     signature;
     X509Name                issuer;
-    DERUTCTime              startDate, endDate;
+    Time                    startDate, endDate;
     X509Name                subject;
     SubjectPublicKeyInfo    subjectPublicKeyInfo;
     DERBitString            issuerUniqueId;
     DERBitString            subjectUniqueId;
     X509Extensions          extensions;
 
+    public static TBSCertificateStructure getInstance(
+        ASN1TaggedObject obj,
+        boolean          explicit)
+    {
+        return getInstance(ASN1Sequence.getInstance(obj, explicit));
+    }
+
+    public static TBSCertificateStructure getInstance(
+        Object  obj)
+    {
+        if (obj instanceof TBSCertificateStructure)
+        {
+            return (TBSCertificateStructure)obj;
+        }
+        else if (obj instanceof ASN1Sequence)
+        {
+            return new TBSCertificateStructure((ASN1Sequence)obj);
+        }
+
+        throw new IllegalArgumentException("unknown object in factory");
+    }
+
     public TBSCertificateStructure(
-        DERConstructedSequence  seq)
+        ASN1Sequence  seq)
     {
         int         seqStart = 0;
 
@@ -50,7 +72,7 @@ public class TBSCertificateStructure
         //
         if (seq.getObjectAt(0) instanceof DERTaggedObject)
         {
-            version = (DERInteger)((DERTaggedObject)seq.getObjectAt(0)).getObject();
+            version = DERInteger.getInstance(seq.getObjectAt(0));
         }
         else
         {
@@ -58,68 +80,40 @@ public class TBSCertificateStructure
             version = new DERInteger(0);
         }
 
-        serialNumber = (DERInteger)seq.getObjectAt(seqStart + 1);
+        serialNumber = DERInteger.getInstance(seq.getObjectAt(seqStart + 1));
 
-        if (seq.getObjectAt(seqStart + 2) instanceof AlgorithmIdentifier)
-        {
-            signature = (AlgorithmIdentifier)seq.getObjectAt(seqStart + 2);
-        }
-        else
-        {
-            signature = new AlgorithmIdentifier((DERConstructedSequence)seq.getObjectAt(seqStart + 2));
-        }
-
-        if (seq.getObjectAt(seqStart + 3) instanceof X509Name)
-        {
-            issuer = (X509Name)seq.getObjectAt(seqStart + 3);
-        }
-        else
-        {
-            issuer = new X509Name((DERConstructedSequence)seq.getObjectAt(seqStart + 3));
-        }
+        signature = AlgorithmIdentifier.getInstance(seq.getObjectAt(seqStart + 2));
+        issuer = X509Name.getInstance(seq.getObjectAt(seqStart + 3));
 
         //
         // before and after dates
         //
-        DERConstructedSequence  dates = (DERConstructedSequence)seq.getObjectAt(seqStart + 4);
-        startDate = (DERUTCTime)dates.getObjectAt(0);
-        endDate = (DERUTCTime)dates.getObjectAt(1);
+        ASN1Sequence  dates = (ASN1Sequence)seq.getObjectAt(seqStart + 4);
 
-        if (seq.getObjectAt(seqStart + 5) instanceof X509Name)
-        {
-            subject = (X509Name)seq.getObjectAt(seqStart + 5);
-        }
-        else
-        {
-            subject = new X509Name((DERConstructedSequence)seq.getObjectAt(seqStart + 5));
-        }
+        startDate = Time.getInstance(dates.getObjectAt(0));
+        endDate = Time.getInstance(dates.getObjectAt(1));
+
+        subject = X509Name.getInstance(seq.getObjectAt(seqStart + 5));
 
         //
         // public key info.
         //
-        if (seq.getObjectAt(seqStart + 6) instanceof SubjectPublicKeyInfo)
-        {
-            subjectPublicKeyInfo = (SubjectPublicKeyInfo)seq.getObjectAt(seqStart + 6);
-        }
-        else
-        {
-            subjectPublicKeyInfo = new SubjectPublicKeyInfo((DERConstructedSequence)seq.getObjectAt(seqStart + 6));
-        }
+        subjectPublicKeyInfo = SubjectPublicKeyInfo.getInstance(seq.getObjectAt(seqStart + 6));
 
-        for (int extras = seq.getSize() - (seqStart + 6) - 1; extras > 0; extras--)
+        for (int extras = seq.size() - (seqStart + 6) - 1; extras > 0; extras--)
         {
             DERTaggedObject extra = (DERTaggedObject)seq.getObjectAt(seqStart + 6 + extras);
 
             switch (extra.getTagNo())
             {
             case 1:
-                issuerUniqueId = (DERBitString)extra.getObject();
+                issuerUniqueId = DERBitString.getInstance(extra);
                 break;
             case 2:
-                subjectUniqueId = (DERBitString)extra.getObject();
+                subjectUniqueId = DERBitString.getInstance(extra);
                 break;
             case 3:
-                extensions = new X509Extensions((DERConstructedSequence)extra.getObject());
+                extensions = X509Extensions.getInstance(extra);
             }
         }
     }
@@ -149,12 +143,12 @@ public class TBSCertificateStructure
         return issuer;
     }
 
-    public DERUTCTime getStartDate()
+    public Time getStartDate()
     {
         return startDate;
     }
 
-    public DERUTCTime getEndDate()
+    public Time getEndDate()
     {
         return endDate;
     }