1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership. 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License. You may obtain a copy of the License at 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage java.security.spec; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 21f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * The parameters specifying an Elliptic Curve (EC) public key. 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class ECPublicKeySpec implements KeySpec { 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // The public point 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private final ECPoint w; 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // The associated elliptic curve domain parameters 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private final ECParameterSpec params; 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Creates a new {@code ECPublicKey} with the specified public elliptic 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * curve point and parameter specification. 32f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param w 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the public elliptic curve point {@code W}. 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param params 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the domain parameter specification. 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the specified point {@code W} is at infinity. 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ECPublicKeySpec(ECPoint w, ECParameterSpec params) { 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.w = w; 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.params = params; 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // throw NullPointerException if w or params is null 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (this.w == null) { 45897538a36c18f4db8f9f68ee566aec0bda842e9fElliott Hughes throw new NullPointerException("w == null"); 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (this.params == null) { 48897538a36c18f4db8f9f68ee566aec0bda842e9fElliott Hughes throw new NullPointerException("params == null"); 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // throw IllegalArgumentException if w is point at infinity 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (this.w.equals(ECPoint.POINT_INFINITY)) { 52897538a36c18f4db8f9f68ee566aec0bda842e9fElliott Hughes throw new IllegalArgumentException("the w parameter is point at infinity"); 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the domain parameter specification. 58f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the domain parameter specification. 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ECParameterSpec getParams() { 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return params; 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the public elliptic curve point {@code W}. 67f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the public elliptic curve point {@code W}. 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ECPoint getW() { 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return w; 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 74