001package org.apache.commons.ssl.org.bouncycastle.asn1.x9;
002
003import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Choice;
004import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Null;
005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object;
006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1ObjectIdentifier;
007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive;
008import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1TaggedObject;
009
010public class X962Parameters
011    extends ASN1Object
012    implements ASN1Choice
013{
014    private ASN1Primitive           params = null;
015
016    public static X962Parameters getInstance(
017        Object obj)
018    {
019        if (obj == null || obj instanceof X962Parameters) 
020        {
021            return (X962Parameters)obj;
022        }
023        
024        if (obj instanceof ASN1Primitive) 
025        {
026            return new X962Parameters((ASN1Primitive)obj);
027        }
028        
029        throw new IllegalArgumentException("unknown object in getInstance()");
030    }
031    
032    public static X962Parameters getInstance(
033        ASN1TaggedObject obj,
034        boolean          explicit)
035    {
036        return getInstance(obj.getObject()); // must be explicitly tagged
037    }
038    
039    public X962Parameters(
040        X9ECParameters      ecParameters)
041    {
042        this.params = ecParameters.toASN1Primitive();
043    }
044
045    public X962Parameters(
046        ASN1ObjectIdentifier  namedCurve)
047    {
048        this.params = namedCurve;
049    }
050
051    public X962Parameters(
052        ASN1Primitive           obj)
053    {
054        this.params = obj;
055    }
056
057    public boolean isNamedCurve()
058    {
059        return (params instanceof ASN1ObjectIdentifier);
060    }
061
062    public boolean isImplicitlyCA()
063    {
064        return (params instanceof ASN1Null);
065    }
066
067    public ASN1Primitive getParameters()
068    {
069        return params;
070    }
071
072    /**
073     * Produce an object suitable for an ASN1OutputStream.
074     * <pre>
075     * Parameters ::= CHOICE {
076     *    ecParameters ECParameters,
077     *    namedCurve   CURVES.&amp;id({CurveNames}),
078     *    implicitlyCA NULL
079     * }
080     * </pre>
081     */
082    public ASN1Primitive toASN1Primitive()
083    {
084        return (ASN1Primitive)params;
085    }
086}