1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/*
2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  Licensed to the Apache Software Foundation (ASF) under one or more
3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  contributor license agreements.  See the NOTICE file distributed with
4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  this work for additional information regarding copyright ownership.
5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  The ASF licenses this file to You under the Apache License, Version 2.0
6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  (the "License"); you may not use this file except in compliance with
7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  the License.  You may obtain a copy of the License at
8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  See the License for the specific language governing permissions and
15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  limitations under the License.
16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/**
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project* @author Vladimir N. Molotkov
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project* @version $Revision$
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project*/
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage tests.security.spec;
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestCase;
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.math.BigInteger;
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.spec.ECFieldF2m;
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Arrays;
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Random;
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/**
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Tests for <code>ECFieldF2m</code> class fields and methods.
34f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes *
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class ECFieldF2mTest extends TestCase {
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Support class for this test.
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Encapsulates <code>ECFieldF2m</code> testing
41f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * domain parameters.
42f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static final class ECFieldF2mDomainParams {
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * <code>NPE</code> reference object of class NullPointerException.
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * NullPointerException must be thrown by <code>ECFieldF2m</code>
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * ctors in some circumstances
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        static final NullPointerException NPE = new NullPointerException();
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * <code>IArgE</code> reference object of class IllegalArgumentException.
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * IllegalArgumentException must be thrown by <code>ECFieldF2m</code>
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * ctors in some circumstances
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        static final IllegalArgumentException IArgE = new IllegalArgumentException();
58f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * The <code>m</code> parameter for <code>ECFieldF2m</code>
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * ctor for the current test.
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        final int m;
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * The <code>rp</code> parameter for <code>ECFieldF2m</code>
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * ctor for the current test.
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        final BigInteger rp;
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * The <code>ks</code> parameter for <code>ECFieldF2m</code>
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * ctor for the current test.
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        final int[] ks;
74f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
75f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * Exception expected with this parameters set or <code>null</code>
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * if no exception expected.
79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        final Exception x;
81f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * Constructs ECFieldF2mDomainParams
84f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes         *
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * @param m
86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * @param rp
87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * @param ks
88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * @param expectedException
89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ECFieldF2mDomainParams(final int m,
91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                final BigInteger rp,
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                final int[] ks,
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                final Exception expectedException) {
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.m = m;
95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.rp = rp;
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.ks = ks;
97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.x = expectedException;
98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    //
102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    // Tests
103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    //
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Set of parameters used for <code>ECFieldF2m(int)</code>
107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * constructor tests.
108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private final ECFieldF2mDomainParams[] intCtorTestParameters =
110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        new ECFieldF2mDomainParams[] {
111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // set 0: valid m
112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            new ECFieldF2mDomainParams(1, null, null, null),
113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // set 1: valid m
114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            new ECFieldF2mDomainParams(Integer.MAX_VALUE, null, null, null),
115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // set 2: invalid m
116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            new ECFieldF2mDomainParams(0, null, null, ECFieldF2mDomainParams.IArgE),
117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // set 3: invalid m
118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            new ECFieldF2mDomainParams(-1, null, null, ECFieldF2mDomainParams.IArgE)
119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        };
120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Tests for constructor <code>ECFieldF2m(int)</code><br>
123f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion: constructs new <code>ECFieldF2m</code> object
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * using valid parameter m.
126f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion: IllegalArgumentException if m is not positive.
128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void testECFieldF2mint() {
130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for(int i=0; i<intCtorTestParameters.length; i++) {
131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ECFieldF2mDomainParams tp = intCtorTestParameters[i];
132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                // perform test
134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                new ECFieldF2m(tp.m);
135f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                if (tp.x != null) {
137f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes                    // exception has been expected
138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    fail(getName() + ", set " + i +
139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                            " FAILED: expected exception has not been thrown");
140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (Exception e){
142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                if (tp.x == null || !e.getClass().isInstance(tp.x)) {
143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    // exception: failure
144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    // if it has not been expected
145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    // or wrong one has been thrown
146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    fail(getName() + ", set " + i +
147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                            " FAILED: unexpected " + e);
148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Set of parameters used for <code>ECFieldF2m(int, int[] ks)</code>
155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * constructor tests.
156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private final ECFieldF2mDomainParams[] constructorTestParameters =
158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        new ECFieldF2mDomainParams[] {
159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // set 0: valid m and ks - trinomial basis params
160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            new ECFieldF2mDomainParams(
161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    1999,
162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    new BigInteger("57406534763712726211641660058884099201115885104434760023882136841288313069618515692832974315825313495922298231949373138672355948043152766571296567808332659269564994572656140000344389574120022435714463495031743122390807731823194181973658513020233176985452498279081199404472314802811655824768082110985166340672084454492229252801189742403957029450467388250214501358353312915261004066118140645880633941658603299497698209063510889929202021079926591625770444716951045960277478891794836019580040978908928741972740865961716524153209532713803393514722581342474556943840519615081302148762454520131486413662191617"),
163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    new int[] {367},
164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    null),
165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // set 1: valid m and ks - pentanomial basis params
166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            new ECFieldF2mDomainParams(
167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    2000,
168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    new BigInteger("114813069527425452423283320117768198402231770208869520047764273682576626139237031385665948631650626991844596463898746277344711896086305533142593135616665318539129989145312280000688779148240044871428926990063486244781615463646388363947317026040466353970904996558162398808944629605623311649536164221970332681364606313754094036473740741389411285817465477407288087941692709593079057904974473325399237449961796178150263073811552931156681807161003582337510008648338765664631815874608789366699668224806907571505750798647855797220056285479869767291137153732790597348308446887230584637235716444920907512810569735"),
169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    new int[] {981,2,1},
170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    null),
171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // set 2: valid m, invalid (null) pr, invalid (null) ks
172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            new ECFieldF2mDomainParams(
173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    1963,
174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    null,
175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    null,
176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    ECFieldF2mDomainParams.NPE),
177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // set 3: valid m, invalid pr, invalid ks - wrong length
178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            new ECFieldF2mDomainParams(
179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    1963,
180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    new BigInteger("114813069527425452423283320117768198402231770208869520047764273682576626139237031385665948631650626991844596463898746277344711896086305533142593135616665318539129989145312280000688779148240044871428926990063486244781615463646388363947317026040466353970904996558162398808944629605623311649536164221970332681364606313754094036473740741389411285817465477407288087941692709593079057904974473325399237449961796178150263073811552931156681807161003582337510008648338765664631815874608789366699668224806907571505750798647855797220056285479869767291137153732790597348308446887230584637235716444920907512810569734"),
181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    new int[] {981,2},
182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    ECFieldF2mDomainParams.IArgE),
183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // set 4: valid m, invalid ks - wrong length
184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            new ECFieldF2mDomainParams(
185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    1963,
186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    new BigInteger("5"),
187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    new int[] {981,124,2,1},
188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    ECFieldF2mDomainParams.IArgE),
189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // set 5: valid m, invalid ks - wrong value
190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            new ECFieldF2mDomainParams(
191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    1999,
192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    new BigInteger("5"),
193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    new int[] {1999},
194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    ECFieldF2mDomainParams.IArgE),
195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // set 6: valid m, invalid ks - wrong value
196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            new ECFieldF2mDomainParams(
197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    1999,
198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    new BigInteger("5"),
199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    new int[] {0},
200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    ECFieldF2mDomainParams.IArgE),
201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // set 7: valid m, invalid ks - wrong values
202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            new ECFieldF2mDomainParams(
203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    2000,
204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    new BigInteger("5"),
205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    new int[] {2000,2,1},
206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    ECFieldF2mDomainParams.IArgE),
207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // set 8: valid m, invalid ks - wrong values
208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            new ECFieldF2mDomainParams(
209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    2000,
210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    new BigInteger("5"),
211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    new int[] {981,2,0},
212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    ECFieldF2mDomainParams.IArgE),
213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // set 9: invalid m
214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            new ECFieldF2mDomainParams(
215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    -5,
216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    new BigInteger("114813069527425452423283320117768198402231770208869520047764273682576626139237031385665948631650626991844596463898746277344711896086305533142593135616665318539129989145312280000688779148240044871428926990063486244781615463646388363947317026040466353970904996558162398808944629605623311649536164221970332681364606313754094036473740741389411285817465477407288087941692709593079057904974473325399237449961796178150263073811552931156681807161003582337510008648338765664631815874608789366699668224806907571505750798647855797220056285479869767291137153732790597348308446887230584637235716444920907512810569735"),
217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    new int[] {981,2,1},
218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    ECFieldF2mDomainParams.IArgE),
219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // set 10: valid m, invalid ks - wrong order
220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            new ECFieldF2mDomainParams(
221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    2000,
222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    new BigInteger("5"),
223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    new int[] {981,1,2},
224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    ECFieldF2mDomainParams.IArgE),
225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // set 11: valid m, invalid ks - no content
226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            new ECFieldF2mDomainParams(
227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    2000,
228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    new BigInteger("5"),
229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    new int[3],
230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    ECFieldF2mDomainParams.IArgE),
231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // set 12: valid m, invalid ks - length is 0
232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            new ECFieldF2mDomainParams(
233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    2000,
234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    new BigInteger("0"),
235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    new int[0],
236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    ECFieldF2mDomainParams.IArgE),
237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        };
238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Tests for constructor <code>ECFieldF2m(int m, int[] ks)</code><br>
241f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion: constructs new <code>ECFieldF2m</code> object
243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * using valid parameters m and rp. ks represents trinomial basis.
244f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion: constructs new <code>ECFieldF2m</code> object
246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * using valid parameters m and ks. ks represents pentanomial basis.
247f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion: IllegalArgumentException if m is not positive.
249f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion: NullPointerException if ks is null.
251f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion: IllegalArgumentException if ks is invalid.
253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void testECFieldF2mintintArray() {
255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for(int i=0; i<constructorTestParameters.length; i++) {
256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ECFieldF2mDomainParams tp = constructorTestParameters[i];
257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                // perform test
259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                ECFieldF2m test = new ECFieldF2m(tp.m, tp.ks);
260f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                if (tp.x != null) {
262f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes                    // exception has been expected
263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    fail(getName() + ", set " + i +
264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                            " FAILED: expected exception has not been thrown");
265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (Exception e){
267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                if (tp.x == null || !e.getClass().isInstance(tp.x)) {
268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    // exception: failure
269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    // if it has not been expected
270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    // or wrong one has been thrown
271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    fail(getName() + ", set " + i +
272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                            " FAILED: unexpected " + e);
273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
277f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Tests for constructor <code>ECFieldF2m(int m, BigInteger rp)</code><br>
280f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion: constructs new <code>ECFieldF2m</code> object
282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * using valid parameters m and rp.
283f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion: constructs new <code>ECFieldF2m</code> object
285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * using valid parameters m and rp.
286f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion: IllegalArgumentException if m is not positive.
288f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion: NullPointerException if rp is null.
290f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion: IllegalArgumentException if rp is invalid.
292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void testECFieldF2mintBigInteger() {
294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for(int i=0; i<constructorTestParameters.length; i++) {
295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ECFieldF2mDomainParams tp = constructorTestParameters[i];
296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                // perform test
298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                new ECFieldF2m(tp.m, tp.rp);
299f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                if (tp.x != null) {
301f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes                    // exception has been expected
302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    fail(getName() + ", set " + i +
303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                            " FAILED: expected exception has not been thrown");
304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (Exception e){
306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                if (tp.x == null || !e.getClass().isInstance(tp.x)) {
307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    // exception: failure
308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    // if it has not been expected
309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    // or wrong one has been thrown
310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    fail(getName() + ", set " + i +
311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                            " FAILED: unexpected " + e);
312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test #1 for <code>hashCode()</code> method.<br>
319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion: must return the same value if invoked
321f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * repeatedly on the same object.
322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void testHashCode01() {
324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ECFieldF2m f = new ECFieldF2m(2000);
325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int hc = f.hashCode();
326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(hc == f.hashCode() &&
327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                   hc == f.hashCode() &&
328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                   hc == f.hashCode() &&
329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                   hc == f.hashCode() &&
330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                   hc == f.hashCode() &&
331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                   hc == f.hashCode() &&
332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                   hc == f.hashCode() &&
333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                   hc == f.hashCode());
334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test #2 for <code>hashCode()</code> method.<br>
338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion: must return the same value if invoked
340f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * repeatedly on the same object.
341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void testHashCode02() {
343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ECFieldF2m f = new ECFieldF2m(2000, new int[] {981, 2, 1});
344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int hc = f.hashCode();
345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(hc == f.hashCode() &&
346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                   hc == f.hashCode() &&
347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                   hc == f.hashCode() &&
348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                   hc == f.hashCode() &&
349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                   hc == f.hashCode() &&
350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                   hc == f.hashCode() &&
351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                   hc == f.hashCode() &&
352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                   hc == f.hashCode());
353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test #3 for <code>hashCode()</code> method.<br>
357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion: must return the same value if invoked
359f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * on equal (according to the <code>equals(Object)</code> method) objects.
360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void testHashCode03() {
362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(new ECFieldF2m(111).hashCode() ==
363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                   new ECFieldF2m(111).hashCode());
364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test #4 for <code>hashCode()</code> method.<br>
368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion: must return the same value if invoked
370f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * on equal (according to the <code>equals(Object)</code> method) objects.
371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void testHashCode04() {
373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(new ECFieldF2m(2000, new int[] {981, 2, 1}).hashCode() ==
374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                   new ECFieldF2m(2000, new int[] {981, 2, 1}).hashCode());
375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test #5 for <code>hashCode()</code> method.<br>
379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion: must return the same value if invoked
381f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * on equal (according to the <code>equals(Object)</code> method) objects.
382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void testHashCode05() {
384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(new ECFieldF2m(2000, new int[] {981, 2, 1}).hashCode() ==
385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                   new ECFieldF2m(2000, BigInteger.valueOf(0L).
386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                                        setBit(0).setBit(1).setBit(2).
387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                                        setBit(981).setBit(2000)).hashCode());
388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test #1 for <code>equals()</code> method.<br>
392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
393f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * Assertion: object equals to itself.
394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void testEqualsObject01() {
396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ECFieldF2m obj = new ECFieldF2m(1999, new int[] {367});
397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(obj.equals(obj));
398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test #2 for <code>equals()</code> method.<br>
402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
403f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * Assertion: normal basis - objects equal if their m are equal.
404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void testEqualsObject02() {
406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(new ECFieldF2m(43).equals(new ECFieldF2m(43)));
407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test #3 for <code>equals()</code> method.<br>
411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion: trinomial basis - objects equal if their m, and rp
413f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * are mutually equal.
414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void testEqualsObject03() {
416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(new ECFieldF2m(1999, new int[] {367}).equals(
417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                   new ECFieldF2m(1999, BigInteger.valueOf(0L).
418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                                        setBit(0).setBit(367).setBit(1999))));
419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test #4 for <code>equals()</code> method.<br>
423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion: pentanomial basis - objects equal if their m, and rp
425f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * are mutually equal.
426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void testEqualsObject04() {
428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ECFieldF2m f1 = new ECFieldF2m(2000, new int[] {981, 2, 1});
429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ECFieldF2m f2 = new ECFieldF2m(2000, BigInteger.valueOf(0L).
430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                setBit(0).setBit(1).setBit(2).
431f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes                setBit(981).setBit(2000));
432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(f1.equals(f2) && f2.equals(f1));
433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test #5 for <code>equals()</code> method.<br>
437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
438f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * Assertion: objects equal if their m, and rp are mutually equal.
439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void testEqualsObject05() {
441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ECFieldF2m f1 = new ECFieldF2m(2000);
442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ECFieldF2m f2 = new ECFieldF2m(2000, BigInteger.valueOf(0L).
443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                setBit(0).setBit(1).setBit(2).
444f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes                setBit(981).setBit(2000));
445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse(f1.equals(f2) || f2.equals(f1));
446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test #6 for <code>equals(Object obj)</code> method.<br>
450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion: returns false if obj is <code>null</code>
452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void testEqualsObject06() {
454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse(new ECFieldF2m(2000).equals(null));
455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test #7 for <code>equals(Object obj)</code> method.<br>
459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion: returns false if obj is not instance of <code>ECFieldF2m</code>
461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void testEqualsObject07() {
463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse(new ECFieldF2m(2000).equals(new Object()));
464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
467adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test for <code>getFieldSize()</code> method.<br>
468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion: returns m value for <code>ECFieldF2m</code>
470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
471adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void testGetFieldSize() {
472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(2000, new ECFieldF2m(2000).getFieldSize());
473adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test for <code>getM()</code> method.<br>
477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion: returns m value for <code>ECFieldF2m</code>
479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void testGetM() {
481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(2000, new ECFieldF2m(2000).getM());
482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
485adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test #1 for <code>getMidTermsOfReductionPolynomial()</code> method.<br>
486adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion: returns mid terms of reduction polynomial
488adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void testGetMidTermsOfReductionPolynomial01() {
490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int[] a = new int[] {981,2,1};
491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int[] b = new ECFieldF2m(2000,
492adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                BigInteger.valueOf(0L).setBit(0).setBit(1).
493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                setBit(2).setBit(981).setBit(2000)).
494adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                getMidTermsOfReductionPolynomial();
495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(Arrays.equals(a, b));
496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test #2 for <code>getMidTermsOfReductionPolynomial()</code> method.<br>
500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion: returns null for normal basis
502adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void testGetMidTermsOfReductionPolynomial02() {
504adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull(new ECFieldF2m(2000).getMidTermsOfReductionPolynomial());
505adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
506adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
507adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
508adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test #3 for <code>getMidTermsOfReductionPolynomial()</code> method.<br>
509adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
510adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion: returns mid terms of reduction polynomial
511adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
512adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void testGetMidTermsOfReductionPolynomial03() {
513adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int[] a = new int[] {367};
514adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int[] b = new ECFieldF2m(1999, a).getMidTermsOfReductionPolynomial();
515adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(Arrays.equals(a, b));
516adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
517adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
518adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
519adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test #1 for <code>getReductionPolynomial()</code> method.<br>
520adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
521adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion: returns reduction polynomial
522adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
523adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void testGetReductionPolynomial01() {
524adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        BigInteger rp = BigInteger.valueOf(0L).setBit(0).setBit(1).setBit(2).
525adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        setBit(981).setBit(2000);
526adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(new ECFieldF2m(2000, rp).getReductionPolynomial().equals(rp));
527adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
528adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
529adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
530adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test #2 for <code>getReductionPolynomial()</code> method.<br>
531adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
532adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion: returns null for normal basis
533adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
534adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void testGetReductionPolynomial02() {
535adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull(new ECFieldF2m(2000).getReductionPolynomial());
536adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
537adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
538adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
539adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Tests that object state is preserved against modifications
540adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * through array reference passed to the constructor.
541adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
542adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void testIsStatePreserved01() {
543adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // reference array
544adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int[] a = new int[] {367};
545adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // reference array copy
546adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int[] aCopy = a.clone();
547adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // create obj using copy
548adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ECFieldF2m f = new ECFieldF2m(1999, aCopy);
549adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // modify copy
550adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        aCopy[0] = 5;
551adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // compare reference with returned array
552f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        assertTrue(Arrays.equals(a, f.getMidTermsOfReductionPolynomial()));
553adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
554adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
555adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
556adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Tests that object state is preserved against
557adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * modifications through array reference returned by
558adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <code>getMidTermsOfReductionPolynomial()</code> method.
559adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
560adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void testIsStatePreserved02() {
561adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // reference array
562adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int[] a = new int[] {981,2,1};
563adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // reference array copy
564adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int[] aCopy = a.clone();
565adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // create obj using copy
566adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ECFieldF2m f = new ECFieldF2m(2000, aCopy);
567adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // get array reference and modify returned array
568adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        f.getMidTermsOfReductionPolynomial()[0] = 1532;
569adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // compare reference with returned for the second time array
570f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        assertTrue(Arrays.equals(a, f.getMidTermsOfReductionPolynomial()));
571adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
572adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
573adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
574