Home | History | Annotate | Download | only in x9
      1 package org.bouncycastle.asn1.x9;
      2 
      3 import java.io.IOException;
      4 
      5 import org.bouncycastle.asn1.ASN1Choice;
      6 import org.bouncycastle.asn1.ASN1Null;
      7 import org.bouncycastle.asn1.ASN1Object;
      8 import org.bouncycastle.asn1.ASN1ObjectIdentifier;
      9 import org.bouncycastle.asn1.ASN1Primitive;
     10 import org.bouncycastle.asn1.ASN1TaggedObject;
     11 
     12 /**
     13  * The Parameters ASN.1 CHOICE from X9.62.
     14  */
     15 public class X962Parameters
     16     extends ASN1Object
     17     implements ASN1Choice
     18 {
     19     private ASN1Primitive           params = null;
     20 
     21     public static X962Parameters getInstance(
     22         Object obj)
     23     {
     24         if (obj == null || obj instanceof X962Parameters)
     25         {
     26             return (X962Parameters)obj;
     27         }
     28 
     29         if (obj instanceof ASN1Primitive)
     30         {
     31             return new X962Parameters((ASN1Primitive)obj);
     32         }
     33 
     34         if (obj instanceof byte[])
     35         {
     36             try
     37             {
     38                 return new X962Parameters(ASN1Primitive.fromByteArray((byte[])obj));
     39             }
     40             catch (Exception e)
     41             {
     42                 throw new IllegalArgumentException("unable to parse encoded data: " + e.getMessage());
     43             }
     44         }
     45 
     46         throw new IllegalArgumentException("unknown object in getInstance()");
     47     }
     48 
     49     public static X962Parameters getInstance(
     50         ASN1TaggedObject obj,
     51         boolean          explicit)
     52     {
     53         return getInstance(obj.getObject()); // must be explicitly tagged
     54     }
     55 
     56     public X962Parameters(
     57         X9ECParameters      ecParameters)
     58     {
     59         this.params = ecParameters.toASN1Primitive();
     60     }
     61 
     62     public X962Parameters(
     63         ASN1ObjectIdentifier  namedCurve)
     64     {
     65         this.params = namedCurve;
     66     }
     67 
     68     public X962Parameters(
     69         ASN1Null           obj)
     70     {
     71         this.params = obj;
     72     }
     73 
     74     /**
     75      * @deprecated use getInstance()
     76      */
     77     public X962Parameters(
     78         ASN1Primitive           obj)
     79     {
     80         this.params = obj;
     81     }
     82 
     83     public boolean isNamedCurve()
     84     {
     85         return (params instanceof ASN1ObjectIdentifier);
     86     }
     87 
     88     public boolean isImplicitlyCA()
     89     {
     90         return (params instanceof ASN1Null);
     91     }
     92 
     93     public ASN1Primitive getParameters()
     94     {
     95         return params;
     96     }
     97 
     98     /**
     99      * Produce an object suitable for an ASN1OutputStream.
    100      * <pre>
    101      * Parameters ::= CHOICE {
    102      *    ecParameters ECParameters,
    103      *    namedCurve   CURVES.&amp;id({CurveNames}),
    104      *    implicitlyCA NULL
    105      * }
    106      * </pre>
    107      */
    108     public ASN1Primitive toASN1Primitive()
    109     {
    110         return params;
    111     }
    112 }
    113