1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  Licensed to the Apache Software Foundation (ASF) under one or more
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  contributor license agreements.  See the NOTICE file distributed with
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  this work for additional information regarding copyright ownership.
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  The ASF licenses this file to You under the Apache License, Version 2.0
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  (the "License"); you may not use this file except in compliance with
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  the License.  You may obtain a copy of the License at
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  See the License for the specific language governing permissions and
15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  limitations under the License.
16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage tests.security.spec;
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargets;
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestLevel;
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetNew;
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetClass;
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport junit.framework.TestCase;
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.math.BigInteger;
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.spec.ECField;
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.spec.ECFieldF2m;
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.spec.ECFieldFp;
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.spec.EllipticCurve;
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Arrays;
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/**
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Tests for <code>EllipticCurve</code> class fields and methods.
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@TestTargetClass(EllipticCurve.class)
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class EllipticCurveTest extends TestCase {
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test #1 for <code>EllipticCurve(ECField, BigInteger, BigInteger, byte[])</code>
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * constructor<br>
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Assertion: creates instance of EllipticCurve<br>
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test preconditions: valid parameters passed<br>
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Expected: must pass without any exceptions
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies positive cases.",
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "EllipticCurve",
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.security.spec.ECField.class, java.math.BigInteger.class, java.math.BigInteger.class, byte[].class}
53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public final void testEllipticCurveECFieldBigIntegerBigIntegerbyteArray01() {
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // test case 1 parameters set
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ECFieldFp f = new ECFieldFp(BigInteger.valueOf(23L));
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        BigInteger a = BigInteger.ONE;
58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        BigInteger b = BigInteger.valueOf(19L);
59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        byte[] seed = new byte[24];
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // perform test case 1
61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new EllipticCurve(f, a, b, seed);
62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // test case 2 parameters set
64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ECFieldF2m f1 = new ECFieldF2m(5);
65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        a = BigInteger.ZERO;
66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        b = BigInteger.valueOf(23L);
67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // perform test case 2
68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new EllipticCurve(f1, a, b, seed);
69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // test case 3 parameters set,
71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // the seed parameter may be null
72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        f = new ECFieldFp(BigInteger.valueOf(23L));
73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        a = BigInteger.ONE;
74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        b = BigInteger.valueOf(19L);
75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        seed = null;
76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // perform test case 3
77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new EllipticCurve(f, a, b, seed);
78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test #2 for <code>EllipticCurve(ECField, BigInteger, BigInteger, byte[])</code>
82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * constructor<br>
83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Assertion: throws <code>NullPointerException</code> if <code>field</code>,
84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <code>a</code> or <code>b</code> is <code>null</code><br>
85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test preconditions: pass <code>null</code> as mentioned parameters<br>
86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Expected: must throw <code>NullPointerException</code>
87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies NullPointerException.",
91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "EllipticCurve",
92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.security.spec.ECField.class, java.math.BigInteger.class, java.math.BigInteger.class, byte[].class}
93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public final void testEllipticCurveECFieldBigIntegerBigIntegerbyteArray02() {
95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // test case 1 parameters set
96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ECFieldFp f = null;
97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        BigInteger a = BigInteger.ONE;
98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        BigInteger b = BigInteger.valueOf(19L);
99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        byte[] seed = new byte[24];
100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // perform test case 1
102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new EllipticCurve(f, a, b, seed);
104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("#1: Expected NPE not thrown");
105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (NullPointerException ok) {}
106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // test case 2 parameters set,
108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        f = new ECFieldFp(BigInteger.valueOf(23L));
109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        a = null;
110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        b = BigInteger.valueOf(19L);
111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        seed = new byte[24];
112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // perform test case 2
113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new EllipticCurve(f, a, b, seed);
115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("#2: Expected NPE not thrown");
116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (NullPointerException ok) {}
117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // test case 3 parameters set,
119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        f = new ECFieldFp(BigInteger.valueOf(23L));
120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        a = BigInteger.ONE;
121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        b = null;
122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        seed = new byte[24];
123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // perform test case 2
124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new EllipticCurve(f, a, b, seed);
126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("#3: Expected NPE not thrown");
127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (NullPointerException ok) {}
128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test #3 for <code>EllipticCurve(ECField, BigInteger, BigInteger, byte[])</code>
132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * constructor<br>
133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Assertion: throws <code>IllegalArgumentException</code> if
134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <code>a</code> or <code>b</code> is not <code>null</code> and not in
135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * the <code>field</code><br>
136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test preconditions: pass <code>a</code>, <code>b</code> which are
137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * not in the <code>field</code> of type <code>ECFieldFp</code><br>
138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Expected: must throw <code>IllegalArgumentException</code>
139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies IllegalArgumentException.",
143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "EllipticCurve",
144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.security.spec.ECField.class, java.math.BigInteger.class, java.math.BigInteger.class, byte[].class}
145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public final void testEllipticCurveECFieldBigIntegerBigIntegerbyteArray03() {
147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // test case 1 parameters set,
148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // a is not in field
149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ECFieldFp f = new ECFieldFp(BigInteger.valueOf(23L));
150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        BigInteger a = BigInteger.valueOf(24L);
151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        BigInteger b = BigInteger.valueOf(19L);
152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        byte[] seed = new byte[24];
153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // perform test case 1
155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new EllipticCurve(f, a, b, seed);
157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("#1: Expected IAE not thrown");
158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IllegalArgumentException ok) {}
159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // test case 1.1 parameters set,
161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // b is not in field
162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        f = new ECFieldFp(BigInteger.valueOf(23L));
163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        a = BigInteger.valueOf(1L);
164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        b = BigInteger.valueOf(23L);
165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        seed = new byte[24];
166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // perform test case 1.1
167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new EllipticCurve(f, a, b, seed);
169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("#1.1: Expected IAE not thrown");
170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IllegalArgumentException ok) {}
171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // test case 2 parameters set,
173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // b is not in field
174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        f = new ECFieldFp(BigInteger.valueOf(23L));
175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        a = BigInteger.valueOf(19L);
176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        b = BigInteger.valueOf(24L);
177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        seed = new byte[24];
178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // perform test case 2
179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new EllipticCurve(f, a, b, seed);
181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("#2: Expected IAE not thrown");
182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IllegalArgumentException ok) {}
183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // test case 3 parameters set,
185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // both a and b are not in field
186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        f = new ECFieldFp(BigInteger.valueOf(23L));
187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        a = BigInteger.valueOf(25L);
188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        b = BigInteger.valueOf(240L);
189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        seed = new byte[24];
190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // perform test case 3
191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new EllipticCurve(f, a, b, seed);
193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("#3: Expected IAE not thrown");
194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IllegalArgumentException ok) {}
195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test #4 for <code>EllipticCurve(ECField, BigInteger, BigInteger, byte[])</code>
199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * constructor<br>
200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Assertion: throws <code>IllegalArgumentException</code> if
201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <code>a</code> or <code>b</code> is not <code>null</code> and not in
202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * the <code>field</code><br>
203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test preconditions: pass <code>a</code>, <code>b</code> which are
204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * not in the <code>field</code> of type <code>ECFieldF2m</code><br>
205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Expected: must throw <code>IllegalArgumentException</code>
206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies IllegalArgumentException.",
210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "EllipticCurve",
211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.security.spec.ECField.class, java.math.BigInteger.class, java.math.BigInteger.class, byte[].class}
212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public final void testEllipticCurveECFieldBigIntegerBigIntegerbyteArray04() {
214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // test case 1 parameters set,
215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // a is not in field
216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ECFieldF2m f = new ECFieldF2m(5);
217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        BigInteger a = BigInteger.valueOf(32L);
218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        BigInteger b = BigInteger.valueOf(19L);
219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        byte[] seed = new byte[24];
220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // perform test case 1
222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new EllipticCurve(f, a, b, seed);
224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("#1: Expected IAE not thrown");
225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IllegalArgumentException ok) {}
226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // test case 2 parameters set,
228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // b is not in field
229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        f = new ECFieldF2m(5);
230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        a = BigInteger.valueOf(19L);
231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        b = BigInteger.valueOf(32L);
232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        seed = new byte[24];
233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // perform test case 2
234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new EllipticCurve(f, a, b, seed);
236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("#2: Expected IAE not thrown");
237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IllegalArgumentException ok) {}
238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // test case 3 parameters set,
240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // both a and b are not in field
241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        f = new ECFieldF2m(5);
242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        a = BigInteger.valueOf(32L);
243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        b = BigInteger.valueOf(43L);
244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        seed = new byte[24];
245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // perform test case 3
246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new EllipticCurve(f, a, b, seed);
248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("#3: Expected IAE not thrown");
249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IllegalArgumentException ok) {}
250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test #5 for <code>EllipticCurve(ECField, BigInteger, BigInteger, byte[])</code>
254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * constructor<br>
255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Assertion: array <code>seed</code> is copied to prevent subsequent modification<br>
256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test preconditions: pass <code>seed</code> to the ctor then modify it<br>
257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Expected: getSeed() must return unmodified array
258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies that byte array of EllipticCurve can't be modified",
262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "EllipticCurve",
263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.security.spec.ECField.class, java.math.BigInteger.class, java.math.BigInteger.class, byte[].class}
264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public final void testEllipticCurveECFieldBigIntegerBigIntegerbyteArray05() {
266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ECFieldF2m f = new ECFieldF2m(5);
267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        BigInteger a = BigInteger.valueOf(0L);
268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        BigInteger b = BigInteger.valueOf(19L);
269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        byte[] seed = new byte[24];
270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        byte[] seedCopy = seed.clone();
271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        EllipticCurve c = new EllipticCurve(f, a, b, seedCopy);
272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // modify array passed
273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        seedCopy[0] = (byte) 1;
274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // check that above modification did not changed
275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // internal state of test object
276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(Arrays.equals(seed, c.getSeed()));
277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test #1 for <code>EllipticCurve(ECField, BigInteger, BigInteger)</code>
281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * constructor<br>
282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Assertion: creates instance of EllipticCurve<br>
283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test preconditions: valid parameters passed, field type is ECFieldFp<br>
284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Expected: must pass without any exceptions
285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Doesn't verify exceptions.",
289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "EllipticCurve",
290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.security.spec.ECField.class, java.math.BigInteger.class, java.math.BigInteger.class}
291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public final void testEllipticCurveECFieldBigIntegerBigInteger01() {
293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // test case 1 parameters set
294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ECFieldFp f = new ECFieldFp(BigInteger.valueOf(23L));
295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        BigInteger a = BigInteger.ONE;
296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        BigInteger b = BigInteger.valueOf(19L);
297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // perform test case 1
298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new EllipticCurve(f, a, b);
299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // test case 2 parameters set
301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ECFieldF2m f1 = new ECFieldF2m(5);
302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        a = BigInteger.ZERO;
303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        b = BigInteger.valueOf(23L);
304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // perform test case 2
305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new EllipticCurve(f1, a, b);
306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // test case 3 parameters set,
308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // the seed parameter may be null
309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        f = new ECFieldFp(BigInteger.valueOf(23L));
310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        a = BigInteger.ONE;
311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        b = BigInteger.valueOf(19L);
312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // perform test case 3
313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new EllipticCurve(f, a, b);
314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test #2 for <code>EllipticCurve(ECField, BigInteger, BigInteger)</code>
318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * constructor<br>
319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Assertion: throws <code>NullPointerException</code> if <code>field</code>,
320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <code>a</code> or <code>b</code> is <code>null</code><br>
321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test preconditions: pass <code>null</code> as mentioned parameters<br>
322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Expected: must throw <code>NullPointerException</code>
323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies NullPointerException.",
327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "EllipticCurve",
328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.security.spec.ECField.class, java.math.BigInteger.class, java.math.BigInteger.class}
329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public final void testEllipticCurveECFieldBigIntegerBigInteger02() {
331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // test case 1 parameters set
332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ECFieldFp f = null;
333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        BigInteger a = BigInteger.ONE;
334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        BigInteger b = BigInteger.valueOf(19L);
335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // perform test case 1
337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new EllipticCurve(f, a, b);
339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("#1: Expected NPE not thrown");
340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (NullPointerException ok) {}
341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // test case 2 parameters set,
343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        f = new ECFieldFp(BigInteger.valueOf(23L));
344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        a = null;
345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        b = BigInteger.valueOf(19L);
346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // perform test case 2
347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new EllipticCurve(f, a, b);
349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("#2: Expected NPE not thrown");
350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (NullPointerException ok) {}
351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // test case 3 parameters set,
353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        f = new ECFieldFp(BigInteger.valueOf(23L));
354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        a = BigInteger.ONE;
355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        b = null;
356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // perform test case 3
357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new EllipticCurve(f, a, b);
359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("#3: Expected NPE not thrown");
360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (NullPointerException ok) {}
361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test #3 for <code>EllipticCurve(ECField, BigInteger, BigInteger)</code>
365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * constructor<br>
366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Assertion: throws <code>IllegalArgumentException</code> if
367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <code>a</code> or <code>b</code> is not <code>null</code> and not in
368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * the <code>field</code><br>
369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test preconditions: pass <code>a</code>, <code>b</code> which are
370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * not in the <code>field</code> of type <code>ECFieldFp</code><br>
371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Expected: must throw <code>IllegalArgumentException</code>
372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies IllegalArgumentException.",
376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "EllipticCurve",
377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.security.spec.ECField.class, java.math.BigInteger.class, java.math.BigInteger.class}
378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public final void testEllipticCurveECFieldBigIntegerBigInteger03() {
380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // test case 1 parameters set,
381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // a is not in field
382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ECFieldFp f = new ECFieldFp(BigInteger.valueOf(23L));
383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        BigInteger a = BigInteger.valueOf(24L);
384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        BigInteger b = BigInteger.valueOf(19L);
385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // perform test case 1
387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new EllipticCurve(f, a, b);
389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("#1: Expected IAE not thrown");
390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IllegalArgumentException ok) {}
391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // test case 1.1 parameters set,
393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // a is not in field
394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        f = new ECFieldFp(BigInteger.valueOf(23L));
395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        a = BigInteger.valueOf(23L);
396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        b = BigInteger.valueOf(19L);
397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // perform test case 1.1
398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new EllipticCurve(f, a, b);
400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("#1.1: Expected IAE not thrown");
401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IllegalArgumentException ok) {}
402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // test case 2 parameters set,
404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // b is not in field
405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        f = new ECFieldFp(BigInteger.valueOf(23L));
406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        a = BigInteger.valueOf(19L);
407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        b = BigInteger.valueOf(24L);
408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // perform test case 2
409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new EllipticCurve(f, a, b);
411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("#2: Expected IAE not thrown");
412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IllegalArgumentException ok) {}
413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // test case 3 parameters set,
415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // both a and b are not in field
416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        f = new ECFieldFp(BigInteger.valueOf(23L));
417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        a = BigInteger.valueOf(25L);
418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        b = BigInteger.valueOf(240L);
419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // perform test case 3
420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new EllipticCurve(f, a, b);
422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("#3: Expected IAE not thrown");
423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IllegalArgumentException ok) {}
424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test #4 for <code>EllipticCurve(ECField, BigInteger, BigInteger, byte[])</code>
428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * constructor<br>
429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Assertion: throws <code>IllegalArgumentException</code> if
430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <code>a</code> or <code>b</code> is not <code>null</code> and not in
431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * the <code>field</code><br>
432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test preconditions: pass <code>a</code>, <code>b</code> which are
433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * not in the <code>field</code> of type <code>ECFieldF2m</code><br>
434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Expected: must throw <code>IllegalArgumentException</code>
435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies IllegalArgumentException.",
439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "EllipticCurve",
440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.security.spec.ECField.class, java.math.BigInteger.class, java.math.BigInteger.class}
441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public final void testEllipticCurveECFieldBigIntegerBigInteger04() {
443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // test case 1 parameters set,
444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // a is not in field
445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ECFieldF2m f = new ECFieldF2m(5);
446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        BigInteger a = BigInteger.valueOf(32L);
447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        BigInteger b = BigInteger.valueOf(19L);
448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // perform test case 1
449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new EllipticCurve(f, a, b);
451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("#1: Expected IAE not thrown");
452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IllegalArgumentException ok) {}
453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // test case 2 parameters set,
455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // b is not in field
456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        f = new ECFieldF2m(5);
457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        a = BigInteger.valueOf(19L);
458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        b = BigInteger.valueOf(32L);
459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // perform test case 2
460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new EllipticCurve(f, a, b);
462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("#2: Expected IAE not thrown");
463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IllegalArgumentException ok) {}
464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // test case 3 parameters set,
466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // both a and b are not in field
467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        f = new ECFieldF2m(5);
468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        a = BigInteger.valueOf(32L);
469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        b = BigInteger.valueOf(43L);
470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // perform test case 3
471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new EllipticCurve(f, a, b);
473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("#3: Expected IAE not thrown");
474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IllegalArgumentException ok) {}
475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test for <code>getA()</code> method<br>
479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Assertion: returns coefficient <code>a</code><br>
480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test preconditions: <code>ECFieldF2m</code> instance
481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * created using valid parameters<br>
482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Expected: must return coefficient <code>a</code> which is equal
483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * to the one passed to the constructor; (both must refer
484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * the same object)
485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "getA",
490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public final void testGetA() {
493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ECFieldF2m f = new ECFieldF2m(5);
494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        BigInteger a = BigInteger.valueOf(5L);
495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        BigInteger b = BigInteger.valueOf(19L);
496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        EllipticCurve c = new EllipticCurve(f, a, b);
497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(a, c.getA());
498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(a, c.getA());
499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java/security/spec/EllipticCurve#EllipticCurve(EcField,BigInteger,BigInteger)
503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Regression test.",
507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "EllipticCurve",
508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.security.spec.ECField.class, java.math.BigInteger.class, java.math.BigInteger.class}
509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public final void testEllipticCurveECFieldBigIntegerBigInteger05() {
511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Regression for Harmony-731
512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        EllipticCurve ec = new EllipticCurve(new testECField(), BigInteger
513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .valueOf(4L), BigInteger.ONE);
514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("incorrect a", ec.getA(), BigInteger.valueOf(4L));
515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("incorrect b", ec.getB(), BigInteger.ONE);
516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("incorrect size", ec.getField().getFieldSize(), 2);
517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test for <code>getB()</code> method<br>
521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Assertion: returns coefficient <code>b</code><br>
522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test preconditions: <code>ECFieldF2m</code> instance
523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * created using valid parameters<br>
524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Expected: must return coefficient <code>b</code> which is equal
525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * to the one passed to the constructor; (both must refer
526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * the same object)
527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "getB",
532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public final void testGetB() {
535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ECFieldF2m f = new ECFieldF2m(5);
536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        BigInteger a = BigInteger.valueOf(5L);
537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        BigInteger b = BigInteger.valueOf(19L);
538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        EllipticCurve c = new EllipticCurve(f, a, b);
539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(b, c.getB());
540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(b, c.getB());
541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test for <code>getField()</code> method<br>
545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Assertion: returns <code>field</code><br>
546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test preconditions: <code>ECFieldF2m</code> instance
547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * created using valid parameters<br>
548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Expected: must return <code>field</code> which is equal
549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * to the one passed to the constructor; (both must refer
550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * the same object)
551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "getField",
556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public final void testGetField() {
559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ECFieldF2m f = new ECFieldF2m(5);
560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        BigInteger a = BigInteger.valueOf(5L);
561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        BigInteger b = BigInteger.valueOf(19L);
562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        EllipticCurve c = new EllipticCurve(f, a, b);
563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(f, c.getField());
564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertSame(f, c.getField());
565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test #1 for <code>getSeed()</code> method<br>
569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Assertion: returns <code>seed</code><br>
570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test preconditions: <code>ECFieldF2m</code> instance
571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * created using valid parameters<br>
572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Expected: must return <code>seed</code> which is equal
573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * to the one passed to the constructor
574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies positive case.",
578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "getSeed",
579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public final void testGetSeed01() {
582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ECFieldFp f = new ECFieldFp(BigInteger.valueOf(23L));
583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        BigInteger a = BigInteger.ONE;
584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        BigInteger b = BigInteger.valueOf(19L);
585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        byte[] seed = new byte[24];
586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        EllipticCurve c = new EllipticCurve(f, a, b, seed);
587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        byte[] seedRet = c.getSeed();
588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNotNull(seedRet);
589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(Arrays.equals(seed, seedRet));
590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test #2 for <code>getSeed()</code> method<br>
594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Assertion: returned array is copied to prevent subsequent modification<br>
595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test preconditions: <code>ECFieldF2m</code> instance
596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * created using valid parameters; <code>getSeed()</code>
597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * called and then returned array modified<br>
598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Expected: internal state must not be affected by the modification
599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies that modification of byte array  doesn't change internal state of test object.",
603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "getSeed",
604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public final void testGetSeed02() {
607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ECFieldFp f = new ECFieldFp(BigInteger.valueOf(23L));
608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        BigInteger a = BigInteger.ONE;
609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        BigInteger b = BigInteger.valueOf(19L);
610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        byte[] seed = new byte[24];
611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        EllipticCurve c = new EllipticCurve(f, a, b, seed.clone());
612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        byte[] seedRet = c.getSeed();
613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // modify returned array
614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        seedRet[0] = (byte) 1;
615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // check that above modification did not changed
616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // internal state of test object
617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(Arrays.equals(seed, c.getSeed()));
618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test #3 for <code>getSeed()</code> method<br>
622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Assertion: returned array is copied to prevent subsequent modification<br>
623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test preconditions: <code>ECFieldF2m</code> instance
624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * created using valid parameters<br>
625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Expected: repeated method calls must return different refs
626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies that repeated calls of getSeed method must return different refs.",
630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "getSeed",
631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public final void testGetSeed03() {
634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ECFieldFp f = new ECFieldFp(BigInteger.valueOf(23L));
635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        BigInteger a = BigInteger.ONE;
636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        BigInteger b = BigInteger.valueOf(19L);
637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        byte[] seed = new byte[24];
638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        EllipticCurve c = new EllipticCurve(f, a, b, seed);
639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        c.getSeed();
640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNotSame(c.getSeed(), c.getSeed());
641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.security.spec.EllipticCurve#getSeed()
645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Assertion: null if not specified
646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Regression test.",
650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "getSeed",
651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public final void testGetSeed04() {
654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        //Regression for HARMONY-732
655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ECFieldFp f = new ECFieldFp(BigInteger.valueOf(23L));
656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        BigInteger a = BigInteger.ONE;
657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(new EllipticCurve(f, a, a).getSeed());
658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test #1 for <code>equals(Object other)</code> method<br>
662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Assertion: return true if this and other objects are equal<br>
663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test preconditions: see test comments<br>
664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Expected: all objects in this test must be equal
665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "equals",
670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.lang.Object.class}
671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public final void testEqualsObject01() {
673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // test case 1: must be equal to itself
674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        EllipticCurve c2 = null, c1 = new EllipticCurve(new ECFieldFp(
675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                BigInteger.valueOf(23L)), BigInteger.ONE, BigInteger
676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .valueOf(19L));
677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(c1.equals(c1));
678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // test case 2: equal objects
680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        c1 = new EllipticCurve(new ECFieldFp(BigInteger.valueOf(23L)),
681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                BigInteger.ONE, BigInteger.valueOf(19L));
682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        c2 = new EllipticCurve(new ECFieldFp(BigInteger.valueOf(23L)),
683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                BigInteger.valueOf(1L), BigInteger.valueOf(19L));
684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(c1.equals(c2) && c2.equals(c1));
685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // test case 3: equal objects with seed not null
687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        c1 = new EllipticCurve(new ECFieldFp(BigInteger.valueOf(23L)),
688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                BigInteger.ONE, BigInteger.valueOf(19L), new byte[24]);
689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        c2 = new EllipticCurve(new ECFieldFp(BigInteger.valueOf(23L)),
690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                BigInteger.valueOf(1L), BigInteger.valueOf(19L), new byte[24]);
691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(c1.equals(c2) && c2.equals(c1));
692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // test case 4: equal object and subclass object
694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        c1 = new EllipticCurve(new ECFieldFp(BigInteger.valueOf(23L)),
695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                BigInteger.ONE, BigInteger.valueOf(19L), new byte[24]);
696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        MyEllipticCurve c3 = new MyEllipticCurve(new ECFieldFp(BigInteger
697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .valueOf(23L)), BigInteger.ONE, BigInteger.valueOf(19L),
698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                new byte[24]);
699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(c1.equals(c3) && c3.equals(c1));
700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // test case 5: equal objects
702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        c1 = new EllipticCurve(new ECFieldFp(BigInteger.valueOf(23L)),
703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                BigInteger.ONE, BigInteger.valueOf(19L));
704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        c2 = new EllipticCurve(new ECFieldFp(BigInteger.valueOf(23L)),
705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                BigInteger.valueOf(1L), BigInteger.valueOf(19L), null);
706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(c1.equals(c2) && c2.equals(c1));
707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test #1 for <code>hashCode()</code> method.<br>
711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Assertion: must return the same value if invoked
713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * repeatedly on the same object.
714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies that several calls of hashCode method for the same objects return the same values.",
718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "hashCode",
719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public final void testHashCode01() {
722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int hc = 0;
723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        EllipticCurve f = new EllipticCurve(new ECFieldFp(BigInteger
724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .valueOf(23L)), BigInteger.ONE, BigInteger.valueOf(19L),
725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                new byte[24]);
726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        hc = f.hashCode();
727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(hc == f.hashCode() && hc == f.hashCode()
728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                && hc == f.hashCode() && hc == f.hashCode()
729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                && hc == f.hashCode() && hc == f.hashCode()
730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                && hc == f.hashCode() && hc == f.hashCode());
731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Test #2 for <code>hashCode()</code> method.<br>
735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Assertion: must return the same value if invoked
737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * on equal (according to the <code>equals(Object)</code> method) objects.
738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "hashCode",
743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public final void testHashCode02() {
746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(new EllipticCurve(new ECFieldFp(BigInteger.valueOf(23L)),
747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                BigInteger.ONE, BigInteger.valueOf(19L), new byte[24])
748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .hashCode(), new EllipticCurve(new ECFieldFp(BigInteger
749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .valueOf(23L)), BigInteger.ONE, BigInteger.valueOf(19L),
750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                new byte[24]).hashCode());
751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //
754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    // Private stuff
755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //
756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    class testECField implements ECField {
758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public int getFieldSize() {
760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return 2;
761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * EllipticCurve subclass for testing purposes
766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private static class MyEllipticCurve extends EllipticCurve {
769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        MyEllipticCurve(ECField f, BigInteger a, BigInteger b, byte[] seed) {
771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            super(f, a, b, seed);
772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
775