/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package java.security.spec; import java.math.BigInteger; /** * The parameter specification used with Elliptic Curve Cryptography (ECC). */ public class ECParameterSpec implements AlgorithmParameterSpec { // Elliptic curve for which this is parameter private final EllipticCurve curve; // Distinguished point on the elliptic curve called generator or base point private final ECPoint generator; // Order of the generator private final BigInteger order; // Cofactor private final int cofactor; // Name of curve if available. private String curveName; /** * Creates a new {@code ECParameterSpec} with the specified elliptic curve, * the base point, the order of the generator (or base point) and the * co-factor. * * @param curve * the elliptic curve. * @param generator * the generator (or base point). * @param order * the order of the generator. * @param cofactor * the co-factor. * @throws IllegalArgumentException * if {@code order <= zero} or {@code cofactor <= zero}. */ public ECParameterSpec(EllipticCurve curve, ECPoint generator, BigInteger order, int cofactor) { this.curve = curve; this.generator = generator; this.order = order; this.cofactor = cofactor; // throw NullPointerException if curve, generator or order is null if (this.curve == null) { throw new NullPointerException("curve == null"); } if (this.generator == null) { throw new NullPointerException("generator == null"); } if (this.order == null) { throw new NullPointerException("order == null"); } // throw IllegalArgumentException if order or cofactor is not positive if (!(this.order.compareTo(BigInteger.ZERO) > 0)) { throw new IllegalArgumentException("order <= 0"); } if (!(this.cofactor > 0)) { throw new IllegalArgumentException("cofactor <= 0"); } } /** * Returns the {@code cofactor}. * * @return the {@code cofactor}. */ public int getCofactor() { return cofactor; } /** * Returns the elliptic curve. * * @return the elliptic curve. */ public EllipticCurve getCurve() { return curve; } /** * Returns the generator (or base point). * * @return the generator (or base point). */ public ECPoint getGenerator() { return generator; } /** * Returns the order of the generator. * * @return the order of the generator. */ public BigInteger getOrder() { return order; } /** * 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; } }