content: /*
   * Copyright (C) 2014 The Android Open Source Project
   * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   *
   * This code is free software; you can redistribute it and/or modify it
   * under the terms of the GNU General Public License version 2 only, as
   * published by the Free Software Foundation.  Oracle designates this
   * particular file as subject to the "Classpath" exception as provided
   * by Oracle in the LICENSE file that accompanied this code.
   *
   * This code is distributed in the hope that it will be useful, but WITHOUT
   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
   * version 2 for more details (a copy is included in the LICENSE file that
   * accompanied this code).
   *
   * You should have received a copy of the GNU General Public License version
   * 2 along with this work; if not, write to the Free Software Foundation,
   * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
   *
   * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
   * or visit www.oracle.com if you need additional information or have any
   * questions.
   */
  package java.security.spec;
  
  import java.math.BigInteger;
  
  /**
   * This immutable class specifies the set of domain parameters
   * used with elliptic curve cryptography (ECC).
   *
   * @see AlgorithmParameterSpec
   *
   * @author Valerie Peng
   *
   * @since 1.5
   */
  public class ECParameterSpec implements AlgorithmParameterSpec {
  
      private final EllipticCurve curve;
      private final ECPoint g;
      private final BigInteger n;
      private final int h;
  
      /**
       * Creates elliptic curve domain parameters based on the
       * specified values.
       * @param curve the elliptic curve which this parameter
       * defines.
       * @param g the generator which is also known as the base point.
       * @param n the order of the generator {@code g}.
       * @param h the cofactor.
       * @exception NullPointerException if {@code curve},
       * {@code g}, or {@code n} is null.
       * @exception IllegalArgumentException if {@code n}
       * or {@code h} is not positive.
       */
      public ECParameterSpec(EllipticCurve curve, ECPoint g,
                             BigInteger n, int h) {
          if (curve == null) {
              throw new NullPointerException("curve is null");
          }
          if (g == null) {
              throw new NullPointerException("g is null");
          }
          if (n == null) {
              throw new NullPointerException("n is null");
          }
          if (n.signum() != 1) {
              throw new IllegalArgumentException("n is not positive");
          }
          if (h <= 0) {
              throw new IllegalArgumentException("h is not positive");
          }
          this.curve = curve;
          this.g = g;
          this.n = n;
          this.h = h;
      }
  
      /**
       * Returns the elliptic curve that this parameter defines.
       * @return the elliptic curve that this parameter defines.
       */
      public EllipticCurve getCurve() {
          return curve;
      }
  
      /**
       * Returns the generator which is also known as the base point.
       * @return the generator which is also known as the base point.
       */
      public ECPoint getGenerator() {
          return g;
      }
  
      /**
       * Returns the order of the generator.
       * @return the order of the generator.
       */
      public BigInteger getOrder() {
          return n;
      }
  
      /**
       * Returns the cofactor.
       * @return the cofactor.
       */
      public int getCofactor() {
          return h;
      }
      // BEGIN Android-added: Store the curve name as part of the parameters
      // Knowing the name of the curve sometimes allows implementations to operate
      // more efficiently.
      private String curveName;
  
      /**
       * Used to set the curve name if available.
       *
       * @hide
       */
      public void setCurveName(String curveName) {
          this.curveName = curveName;
      }
  
      /**
       * Returns the name of the curve if this is a named curve. Returns
       * {@code null} if this is not known to be a named curve.
       *
       * @hide
       */
      public String getCurveName() {
          return curveName;
      }
      // END Android-added: Store the curve name as part of the parameters
  }
  