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