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