1561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/*
2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Licensed to the Apache Software Foundation (ASF) under one or more
3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  contributor license agreements.  See the NOTICE file distributed with
4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  this work for additional information regarding copyright ownership.
5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  The ASF licenses this file to You under the Apache License, Version 2.0
6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  (the "License"); you may not use this file except in compliance with
7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  the License.  You may obtain a copy of the License at
8561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
10561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Unless required by applicable law or agreed to in writing, software
12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  distributed under the License is distributed on an "AS IS" BASIS,
13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  See the License for the specific language governing permissions and
15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  limitations under the License.
16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/**
198d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath * @author Vladimir N. Molotkov
208d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath */
21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.security.tests.java.security.spec;
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.math.BigInteger;
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.spec.ECFieldF2m;
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Arrays;
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase;
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/**
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Tests for <code>ECFieldF2m</code> class fields and methods.
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class ECFieldF2mTest extends TestCase {
34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Support class for this test.
37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Encapsulates <code>ECFieldF2m</code> testing
388d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * domain parameters.
39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static final class ECFieldF2mDomainParams {
41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        /**
43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         * <code>NPE</code> reference object of class NullPointerException.
44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         * NullPointerException must be thrown by <code>ECFieldF2m</code>
45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         * ctors in some circumstances
46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         */
47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        static final NullPointerException NPE = new NullPointerException();
48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        /**
49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         * <code>IArgE</code> reference object of class IllegalArgumentException.
50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         * IllegalArgumentException must be thrown by <code>ECFieldF2m</code>
51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         * ctors in some circumstances
52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         */
53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        static final IllegalArgumentException IArgE = new IllegalArgumentException();
548d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        /**
56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         * The <code>m</code> parameter for <code>ECFieldF2m</code>
57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         * ctor for the current test.
58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         */
59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        final int m;
60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        /**
61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         * The <code>rp</code> parameter for <code>ECFieldF2m</code>
62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         * ctor for the current test.
63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         */
64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        final BigInteger rp;
65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        /**
66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         * The <code>ks</code> parameter for <code>ECFieldF2m</code>
67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         * ctor for the current test.
68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         */
69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        final int[] ks;
708d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
718d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        /**
73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         * Exception expected with this parameters set or <code>null</code>
74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         * if no exception expected.
75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         */
76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        final Exception x;
778d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        /**
79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         * Constructs ECFieldF2mDomainParams
808d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath         *
81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         * @param m
82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         * @param rp
83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         * @param ks
84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         * @param expectedException
85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         */
86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ECFieldF2mDomainParams(final int m,
87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                final BigInteger rp,
88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                final int[] ks,
89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                final Exception expectedException) {
90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            this.m = m;
91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            this.rp = rp;
92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            this.ks = ks;
93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            this.x = expectedException;
94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Constructor for ECFieldF2mTest.
998d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     *
100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @param name
101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public ECFieldF2mTest(String name) {
103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        super(name);
104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    //
107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // Tests
108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    //
109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Set of parameters used for <code>ECFieldF2m(int)</code>
112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * constructor tests.
113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private final ECFieldF2mDomainParams[] intCtorTestParameters =
1158d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            new ECFieldF2mDomainParams[] {
1168d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    // set 0: valid m
1178d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    new ECFieldF2mDomainParams(1, null, null, null),
1188d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    // set 1: valid m
1198d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    new ECFieldF2mDomainParams(Integer.MAX_VALUE, null, null, null),
1208d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    // set 2: invalid m
1218d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    new ECFieldF2mDomainParams(0, null, null, ECFieldF2mDomainParams.IArgE),
1228d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    // set 3: invalid m
1238d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    new ECFieldF2mDomainParams(-1, null, null, ECFieldF2mDomainParams.IArgE)
1248d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            };
125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Tests for constructor <code>ECFieldF2m(int)</code><br>
1288d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * <p/>
129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: constructs new <code>ECFieldF2m</code> object
130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * using valid parameter m.
1318d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * <p/>
132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: IllegalArgumentException if m is not positive.
133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testECFieldF2mint() {
1358d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        for (int i = 0; i < intCtorTestParameters.length; i++) {
136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ECFieldF2mDomainParams tp = intCtorTestParameters[i];
137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // perform test
139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new ECFieldF2m(tp.m);
1408d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                if (tp.x != null) {
142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    // exception has been expected
143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    fail(getName() + ", set " + i +
144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            " FAILED: expected exception has not been thrown");
145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
1468d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            } catch (Exception e) {
147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                if (tp.x == null || !e.getClass().isInstance(tp.x)) {
148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    // exception: failure
149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    // if it has not been expected
150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    // or wrong one has been thrown
151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    fail(getName() + ", set " + i +
152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            " FAILED: unexpected " + e);
153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Set of parameters used for <code>ECFieldF2m(int, BigInteger)</code>
160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * constructor tests.
161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private final ECFieldF2mDomainParams[] intIntArrayCtorTestParameters =
1638d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            new ECFieldF2mDomainParams[] {
1648d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    // set 0: valid m and ks - trinomial basis params
1658d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    new ECFieldF2mDomainParams(
1668d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            1999,
1678d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            null,
1688d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            new int[] { 367 },
1698d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            null),
1708d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    // set 1: valid m and ks - pentanomial basis params
1718d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    new ECFieldF2mDomainParams(
1728d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            2000,
1738d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            null,
1748d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            new int[] { 981, 2, 1 },
1758d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            null),
1768d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    // set 2: valid m, invalid (null) ks
1778d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    new ECFieldF2mDomainParams(
1788d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            1963,
1798d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            null,
1808d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            null,
1818d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            ECFieldF2mDomainParams.NPE),
1828d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    // set 3: valid m, invalid ks - wrong length
1838d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    new ECFieldF2mDomainParams(
1848d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            1963,
1858d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            null,
1868d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            new int[] { 981, 2 },
1878d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            ECFieldF2mDomainParams.IArgE),
1888d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    // set 4: valid m, invalid ks - wrong length
1898d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    new ECFieldF2mDomainParams(
1908d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            1963,
1918d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            null,
1928d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            new int[] { 981, 124, 2, 1 },
1938d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            ECFieldF2mDomainParams.IArgE),
1948d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    // set 5: valid m, invalid ks - wrong value
1958d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    new ECFieldF2mDomainParams(
1968d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            1999,
1978d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            null,
1988d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            new int[] { 1999 },
1998d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            ECFieldF2mDomainParams.IArgE),
2008d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    // set 6: valid m, invalid ks - wrong value
2018d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    new ECFieldF2mDomainParams(
2028d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            1999,
2038d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            null,
2048d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            new int[] { 0 },
2058d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            ECFieldF2mDomainParams.IArgE),
2068d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    // set 7: valid m, invalid ks - wrong values
2078d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    new ECFieldF2mDomainParams(
2088d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            2000,
2098d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            null,
2108d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            new int[] { 2000, 2, 1 },
2118d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            ECFieldF2mDomainParams.IArgE),
2128d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    // set 8: valid m, invalid ks - wrong values
2138d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    new ECFieldF2mDomainParams(
2148d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            2000,
2158d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            null,
2168d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            new int[] { 981, 2, 0 },
2178d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            ECFieldF2mDomainParams.IArgE),
2188d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    // set 9: invalid m
2198d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    new ECFieldF2mDomainParams(
2208d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            -5,
2218d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            null,
2228d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            new int[] { 981, 2, 1 },
2238d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            ECFieldF2mDomainParams.IArgE),
2248d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    // set 10: valid m, invalid ks - wrong order
2258d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    new ECFieldF2mDomainParams(
2268d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            2000,
2278d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            null,
2288d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            new int[] { 981, 1, 2 },
2298d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            ECFieldF2mDomainParams.IArgE),
2308d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    // set 11: valid m, invalid ks - no content
2318d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    new ECFieldF2mDomainParams(
2328d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            2000,
2338d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            null,
2348d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            new int[3],
2358d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            ECFieldF2mDomainParams.IArgE),
2368d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    // set 12: valid m, invalid ks - length is 0
2378d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    new ECFieldF2mDomainParams(
2388d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            2000,
2398d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            null,
2408d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            new int[0],
2418d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            ECFieldF2mDomainParams.IArgE),
2428d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            };
243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Tests for constructor <code>ECFieldF2m(int m, int[] ks)</code><br>
2468d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * <p/>
247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: constructs new <code>ECFieldF2m</code> object
248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * using valid parameters m and rp. ks represents trinomial basis.
2498d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * <p/>
250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: constructs new <code>ECFieldF2m</code> object
251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * using valid parameters m and ks. ks represents pentanomial basis.
2528d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * <p/>
253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: IllegalArgumentException if m is not positive.
2548d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * <p/>
255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: NullPointerException if ks is null.
2568d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * <p/>
257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: IllegalArgumentException if ks is invalid.
258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testECFieldF2mintintArray() {
2608d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        for (int i = 0; i < intIntArrayCtorTestParameters.length; i++) {
261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ECFieldF2mDomainParams tp = intIntArrayCtorTestParameters[i];
262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // perform test
264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new ECFieldF2m(tp.m, tp.ks);
2658d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                if (tp.x != null) {
267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    // exception has been expected
268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    fail(getName() + ", set " + i +
269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            " FAILED: expected exception has not been thrown");
270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
2718d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            } catch (Exception e) {
272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                if (tp.x == null || !e.getClass().isInstance(tp.x)) {
273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    // exception: failure
274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    // if it has not been expected
275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    // or wrong one has been thrown
276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    fail(getName() + ", set " + i +
277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            " FAILED: unexpected " + e);
278561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
279561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
283561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
284561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test #1 for <code>hashCode()</code> method.<br>
2858d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * <p/>
286561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: must return the same value if invoked
2878d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * repeatedly on the same object.
288561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
289561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testHashCode01() {
290561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ECFieldF2m f = new ECFieldF2m(2000);
291561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int hc = f.hashCode();
292561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(hc == f.hashCode() &&
2938d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                hc == f.hashCode() &&
2948d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                hc == f.hashCode() &&
2958d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                hc == f.hashCode() &&
2968d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                hc == f.hashCode() &&
2978d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                hc == f.hashCode() &&
2988d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                hc == f.hashCode() &&
2998d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                hc == f.hashCode());
300561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
301561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
302561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
303561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test #2 for <code>hashCode()</code> method.<br>
3048d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * <p/>
305561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: must return the same value if invoked
3068d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * repeatedly on the same object.
307561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
308561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testHashCode02() {
3098d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        ECFieldF2m f = new ECFieldF2m(2000, new int[] { 981, 2, 1 });
310561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int hc = f.hashCode();
311561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(hc == f.hashCode() &&
3128d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                hc == f.hashCode() &&
3138d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                hc == f.hashCode() &&
3148d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                hc == f.hashCode() &&
3158d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                hc == f.hashCode() &&
3168d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                hc == f.hashCode() &&
3178d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                hc == f.hashCode() &&
3188d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                hc == f.hashCode());
319561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
320561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
321561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
322561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test #3 for <code>hashCode()</code> method.<br>
3238d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * <p/>
324561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: must return the same value if invoked
3258d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * on equal (according to the <code>equals(Object)</code> method) objects.
326561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
327561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testHashCode03() {
328561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(new ECFieldF2m(111).hashCode() ==
3298d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                new ECFieldF2m(111).hashCode());
330561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
331561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
332561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
333561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test #4 for <code>hashCode()</code> method.<br>
3348d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * <p/>
335561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: must return the same value if invoked
3368d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * on equal (according to the <code>equals(Object)</code> method) objects.
337561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
338561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testHashCode04() {
3398d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(new ECFieldF2m(2000, new int[] { 981, 2, 1 }).hashCode() ==
3408d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                new ECFieldF2m(2000, new int[] { 981, 2, 1 }).hashCode());
341561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
342561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
343561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
344561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test #5 for <code>hashCode()</code> method.<br>
3458d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * <p/>
346561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: must return the same value if invoked
3478d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * on equal (according to the <code>equals(Object)</code> method) objects.
348561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
349561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testHashCode05() {
3508d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(new ECFieldF2m(2000, new int[] { 981, 2, 1 }).hashCode() ==
3518d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                new ECFieldF2m(2000, BigInteger.valueOf(0L).
3528d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                        setBit(0).setBit(1).setBit(2).
3538d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                        setBit(981).setBit(2000)).hashCode());
354561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
355561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
356561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
357561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test #1 for <code>equals()</code> method.<br>
3588d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * <p/>
3598d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * Assertion: object equals to itself.
360561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
361561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testEqualsObject01() {
3628d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        ECFieldF2m obj = new ECFieldF2m(1999, new int[] { 367 });
363561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(obj.equals(obj));
364561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
365561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
366561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
367561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test #2 for <code>equals()</code> method.<br>
3688d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * <p/>
3698d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * Assertion: normal basis - objects equal if their m are equal.
370561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
371561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testEqualsObject02() {
372561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(new ECFieldF2m(43).equals(new ECFieldF2m(43)));
373561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
374561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
375561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
376561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test #3 for <code>equals()</code> method.<br>
3778d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * <p/>
378561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: trinomial basis - objects equal if their m, and rp
3798d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * are mutually equal.
380561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
381561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testEqualsObject03() {
3828d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(new ECFieldF2m(1999, new int[] { 367 }).equals(
3838d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                new ECFieldF2m(1999, BigInteger.valueOf(0L).
3848d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                        setBit(0).setBit(367).setBit(1999))));
385561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
386561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
387561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
388561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test #4 for <code>equals()</code> method.<br>
3898d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * <p/>
390561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: pentanomial basis - objects equal if their m, and rp
3918d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * are mutually equal.
392561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
393561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testEqualsObject04() {
3948d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        ECFieldF2m f1 = new ECFieldF2m(2000, new int[] { 981, 2, 1 });
395561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ECFieldF2m f2 = new ECFieldF2m(2000, BigInteger.valueOf(0L).
396561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                setBit(0).setBit(1).setBit(2).
3978d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                setBit(981).setBit(2000));
398561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(f1.equals(f2) && f2.equals(f1));
399561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
400561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
401561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
402561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test #5 for <code>equals()</code> method.<br>
4038d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * <p/>
4048d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * Assertion: objects equal if their m, and rp are mutually equal.
405561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
406561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testEqualsObject05() {
407561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ECFieldF2m f1 = new ECFieldF2m(2000);
408561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ECFieldF2m f2 = new ECFieldF2m(2000, BigInteger.valueOf(0L).
409561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                setBit(0).setBit(1).setBit(2).
4108d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                setBit(981).setBit(2000));
411561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(f1.equals(f2) || f2.equals(f1));
412561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
413561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
414561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
415561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test #6 for <code>equals(Object obj)</code> method.<br>
4168d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * <p/>
417561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: returns false if obj is <code>null</code>
418561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
419561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testEqualsObject06() {
420561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(new ECFieldF2m(2000).equals(null));
421561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
422561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
423561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
424561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test #7 for <code>equals(Object obj)</code> method.<br>
4258d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * <p/>
426561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: returns false if obj is not instance of <code>ECFieldF2m</code>
427561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
428561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testEqualsObject07() {
429561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(new ECFieldF2m(2000).equals(new Object()));
430561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
431561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
432561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
433561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test for <code>getFieldSize()</code> method.<br>
4348d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * <p/>
435561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: returns m value for <code>ECFieldF2m</code>
436561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
437561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testGetFieldSize() {
438561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(2000, new ECFieldF2m(2000).getFieldSize());
439561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
440561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
441561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
442561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test for <code>getM()</code> method.<br>
4438d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * <p/>
444561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: returns m value for <code>ECFieldF2m</code>
445561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
446561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testGetM() {
447561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(2000, new ECFieldF2m(2000).getM());
448561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
449561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
450561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
451561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test #1 for <code>getMidTermsOfReductionPolynomial()</code> method.<br>
4528d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * <p/>
453561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: returns mid terms of reduction polynomial
454561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
455561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testGetMidTermsOfReductionPolynomial01() {
4568d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        int[] a = new int[] { 981, 2, 1 };
457561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int[] b = new ECFieldF2m(2000,
458561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                BigInteger.valueOf(0L).setBit(0).setBit(1).
4598d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                        setBit(2).setBit(981).setBit(2000)).
460561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                getMidTermsOfReductionPolynomial();
461561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(Arrays.equals(a, b));
462561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
463561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
464561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
465561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test #2 for <code>getMidTermsOfReductionPolynomial()</code> method.<br>
4668d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * <p/>
467561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: returns null for normal basis
468561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
469561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testGetMidTermsOfReductionPolynomial02() {
470561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull(new ECFieldF2m(2000).getMidTermsOfReductionPolynomial());
471561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
472561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
473561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
474561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test #3 for <code>getMidTermsOfReductionPolynomial()</code> method.<br>
4758d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * <p/>
476561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: returns mid terms of reduction polynomial
477561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
478561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testGetMidTermsOfReductionPolynomial03() {
4798d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        int[] a = new int[] { 367 };
480561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int[] b = new ECFieldF2m(1999, a).getMidTermsOfReductionPolynomial();
481561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(Arrays.equals(a, b));
482561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
483561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
484561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
485561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test #1 for <code>getReductionPolynomial()</code> method.<br>
4868d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * <p/>
487561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: returns reduction polynomial
488561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
489561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testGetReductionPolynomial01() {
490561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        BigInteger rp = BigInteger.valueOf(0L).setBit(0).setBit(1).setBit(2).
4918d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                setBit(981).setBit(2000);
492561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(new ECFieldF2m(2000, rp).getReductionPolynomial().equals(rp));
493561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
494561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
495561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
496561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test #2 for <code>getReductionPolynomial()</code> method.<br>
4978d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * <p/>
498561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: returns null for normal basis
499561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
500561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testGetReductionPolynomial02() {
501561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull(new ECFieldF2m(2000).getReductionPolynomial());
502561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
503561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
504561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
505561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Tests that object state is preserved against modifications
506561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * through array reference passed to the constructor.
507561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
508561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testIsStatePreserved01() {
509561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // reference array
5108d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        int[] a = new int[] { 367 };
511561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // reference array copy
512561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int[] aCopy = a.clone();
513561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // create obj using copy
514561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ECFieldF2m f = new ECFieldF2m(1999, aCopy);
515561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // modify copy
516561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        aCopy[0] = 5;
517561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // compare reference with returned array
5188d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(Arrays.equals(a, f.getMidTermsOfReductionPolynomial()));
519561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
520561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
521561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
522561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Tests that object state is preserved against
523561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * modifications through array reference returned by
524561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * <code>getMidTermsOfReductionPolynomial()</code> method.
525561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
526561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testIsStatePreserved02() {
527561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // reference array
5288d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        int[] a = new int[] { 981, 2, 1 };
529561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // reference array copy
530561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int[] aCopy = a.clone();
531561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // create obj using copy
532561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ECFieldF2m f = new ECFieldF2m(2000, aCopy);
533561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // get array reference and modify returned array
534561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        f.getMidTermsOfReductionPolynomial()[0] = 1532;
535561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // compare reference with returned for the second time array
5368d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(Arrays.equals(a, f.getMidTermsOfReductionPolynomial()));
537561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
538561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
539561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
540