18212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrompackage org.bouncycastle.asn1.x9;
28212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
38212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstromimport org.bouncycastle.asn1.ASN1Choice;
48212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstromimport org.bouncycastle.asn1.ASN1Null;
54c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1Object;
64c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1ObjectIdentifier;
74c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1Primitive;
88212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstromimport org.bouncycastle.asn1.ASN1TaggedObject;
98212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
108212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrompublic class X962Parameters
114c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    extends ASN1Object
128212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    implements ASN1Choice
138212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom{
144c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    private ASN1Primitive           params = null;
158212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
168212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    public static X962Parameters getInstance(
178212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        Object obj)
188212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    {
198212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        if (obj == null || obj instanceof X962Parameters)
208212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        {
218212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            return (X962Parameters)obj;
228212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        }
238212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
244c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        if (obj instanceof ASN1Primitive)
258212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        {
264c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            return new X962Parameters((ASN1Primitive)obj);
278212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        }
288212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
298212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        throw new IllegalArgumentException("unknown object in getInstance()");
308212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    }
318212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
328212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    public static X962Parameters getInstance(
338212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        ASN1TaggedObject obj,
348212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        boolean          explicit)
358212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    {
368212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        return getInstance(obj.getObject()); // must be explicitly tagged
378212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    }
388212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
398212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    public X962Parameters(
408212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        X9ECParameters      ecParameters)
418212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    {
424c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        this.params = ecParameters.toASN1Primitive();
438212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    }
448212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
458212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    public X962Parameters(
464c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        ASN1ObjectIdentifier  namedCurve)
478212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    {
488212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        this.params = namedCurve;
498212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    }
508212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
518212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    public X962Parameters(
524c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        ASN1Primitive           obj)
538212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    {
548212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        this.params = obj;
558212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    }
568212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
578212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    public boolean isNamedCurve()
588212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    {
594c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        return (params instanceof ASN1ObjectIdentifier);
608212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    }
618212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
628212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    public boolean isImplicitlyCA()
638212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    {
648212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        return (params instanceof ASN1Null);
658212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    }
668212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
674c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public ASN1Primitive getParameters()
688212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    {
698212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        return params;
708212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    }
718212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
728212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    /**
738212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom     * Produce an object suitable for an ASN1OutputStream.
748212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom     * <pre>
758212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom     * Parameters ::= CHOICE {
768212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom     *    ecParameters ECParameters,
778212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom     *    namedCurve   CURVES.&id({CurveNames}),
788212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom     *    implicitlyCA NULL
798212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom     * }
808212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom     * </pre>
818212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom     */
824c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public ASN1Primitive toASN1Primitive()
838212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    {
844c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        return (ASN1Primitive)params;
858212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    }
868212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom}
87