content: package local.org.bouncycastle.asn1.x9;
  
  import local.org.bouncycastle.asn1.ASN1Choice;
  import local.org.bouncycastle.asn1.ASN1Null;
  import local.org.bouncycastle.asn1.ASN1Object;
  import local.org.bouncycastle.asn1.ASN1ObjectIdentifier;
  import local.org.bouncycastle.asn1.ASN1Primitive;
  import local.org.bouncycastle.asn1.ASN1TaggedObject;
  
  public class X962Parameters
      extends ASN1Object
      implements ASN1Choice
  {
      private ASN1Primitive           params = null;
  
      public static X962Parameters getInstance(
          Object obj)
      {
          if (obj == null || obj instanceof X962Parameters) 
          {
              return (X962Parameters)obj;
          }
          
          if (obj instanceof ASN1Primitive) 
          {
              return new X962Parameters((ASN1Primitive)obj);
          }
          
          throw new IllegalArgumentException("unknown object in getInstance()");
      }
      
      public static X962Parameters getInstance(
          ASN1TaggedObject obj,
          boolean          explicit)
      {
          return getInstance(obj.getObject()); // must be explicitly tagged
      }
      
      public X962Parameters(
          X9ECParameters      ecParameters)
      {
          this.params = ecParameters.toASN1Primitive();
      }
  
      public X962Parameters(
          ASN1ObjectIdentifier  namedCurve)
      {
          this.params = namedCurve;
      }
  
      public X962Parameters(
          ASN1Primitive           obj)
      {
          this.params = obj;
      }
  
      public boolean isNamedCurve()
      {
          return (params instanceof ASN1ObjectIdentifier);
      }
  
      public boolean isImplicitlyCA()
      {
          return (params instanceof ASN1Null);
      }
  
      public ASN1Primitive getParameters()
      {
          return params;
      }
  
      /**
       * Produce an object suitable for an ASN1OutputStream.
       * <pre>
       * Parameters ::= CHOICE {
       *    ecParameters ECParameters,
       *    namedCurve   CURVES.&id({CurveNames}),
       *    implicitlyCA NULL
       * }
       * </pre>
       */
      public ASN1Primitive toASN1Primitive()
      {
          return (ASN1Primitive)params;
      }
  }
  