| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| /** |
| * @author Vladimir N. Molotkov |
| * @version $Revision$ |
| */ |
| |
| package tests.security.spec; |
| |
| import dalvik.annotation.TestTargets; |
| import dalvik.annotation.TestLevel; |
| import dalvik.annotation.TestTargetNew; |
| import dalvik.annotation.TestTargetClass; |
| |
| import junit.framework.TestCase; |
| |
| import java.math.BigInteger; |
| import java.security.spec.ECFieldF2m; |
| import java.util.Arrays; |
| import java.util.Random; |
| |
| /** |
| * Tests for <code>ECFieldF2m</code> class fields and methods. |
| * |
| */ |
| @TestTargetClass(ECFieldF2m.class) |
| public class ECFieldF2mTest extends TestCase { |
| |
| /** |
| * Support class for this test. |
| * Encapsulates <code>ECFieldF2m</code> testing |
| * domain parameters. |
| * |
| */ |
| private static final class ECFieldF2mDomainParams { |
| |
| /** |
| * <code>NPE</code> reference object of class NullPointerException. |
| * NullPointerException must be thrown by <code>ECFieldF2m</code> |
| * ctors in some circumstances |
| */ |
| static final NullPointerException NPE = new NullPointerException(); |
| /** |
| * <code>IArgE</code> reference object of class IllegalArgumentException. |
| * IllegalArgumentException must be thrown by <code>ECFieldF2m</code> |
| * ctors in some circumstances |
| */ |
| static final IllegalArgumentException IArgE = new IllegalArgumentException(); |
| |
| /** |
| * The <code>m</code> parameter for <code>ECFieldF2m</code> |
| * ctor for the current test. |
| */ |
| final int m; |
| /** |
| * The <code>rp</code> parameter for <code>ECFieldF2m</code> |
| * ctor for the current test. |
| */ |
| final BigInteger rp; |
| /** |
| * The <code>ks</code> parameter for <code>ECFieldF2m</code> |
| * ctor for the current test. |
| */ |
| final int[] ks; |
| |
| |
| /** |
| * Exception expected with this parameters set or <code>null</code> |
| * if no exception expected. |
| */ |
| final Exception x; |
| |
| /** |
| * Constructs ECFieldF2mDomainParams |
| * |
| * @param m |
| * @param rp |
| * @param ks |
| * @param expectedException |
| */ |
| ECFieldF2mDomainParams(final int m, |
| final BigInteger rp, |
| final int[] ks, |
| final Exception expectedException) { |
| this.m = m; |
| this.rp = rp; |
| this.ks = ks; |
| this.x = expectedException; |
| } |
| } |
| |
| // |
| // Tests |
| // |
| |
| /** |
| * Set of parameters used for <code>ECFieldF2m(int)</code> |
| * constructor tests. |
| */ |
| private final ECFieldF2mDomainParams[] intCtorTestParameters = |
| new ECFieldF2mDomainParams[] { |
| // set 0: valid m |
| new ECFieldF2mDomainParams(1, null, null, null), |
| // set 1: valid m |
| new ECFieldF2mDomainParams(Integer.MAX_VALUE, null, null, null), |
| // set 2: invalid m |
| new ECFieldF2mDomainParams(0, null, null, ECFieldF2mDomainParams.IArgE), |
| // set 3: invalid m |
| new ECFieldF2mDomainParams(-1, null, null, ECFieldF2mDomainParams.IArgE) |
| }; |
| |
| /** |
| * Tests for constructor <code>ECFieldF2m(int)</code><br> |
| * |
| * Assertion: constructs new <code>ECFieldF2m</code> object |
| * using valid parameter m. |
| * |
| * Assertion: IllegalArgumentException if m is not positive. |
| */ |
| @TestTargetNew( |
| level = TestLevel.COMPLETE, |
| notes = "", |
| method = "ECFieldF2m", |
| args = {int.class} |
| ) |
| public final void testECFieldF2mint() { |
| for(int i=0; i<intCtorTestParameters.length; i++) { |
| ECFieldF2mDomainParams tp = intCtorTestParameters[i]; |
| try { |
| // perform test |
| new ECFieldF2m(tp.m); |
| |
| if (tp.x != null) { |
| // exception has been expected |
| fail(getName() + ", set " + i + |
| " FAILED: expected exception has not been thrown"); |
| } |
| } catch (Exception e){ |
| if (tp.x == null || !e.getClass().isInstance(tp.x)) { |
| // exception: failure |
| // if it has not been expected |
| // or wrong one has been thrown |
| fail(getName() + ", set " + i + |
| " FAILED: unexpected " + e); |
| } |
| } |
| } |
| } |
| |
| /** |
| * Set of parameters used for <code>ECFieldF2m(int, int[] ks)</code> |
| * constructor tests. |
| */ |
| private final ECFieldF2mDomainParams[] constructorTestParameters = |
| new ECFieldF2mDomainParams[] { |
| // set 0: valid m and ks - trinomial basis params |
| new ECFieldF2mDomainParams( |
| 1999, |
| new BigInteger("57406534763712726211641660058884099201115885104434760023882136841288313069618515692832974315825313495922298231949373138672355948043152766571296567808332659269564994572656140000344389574120022435714463495031743122390807731823194181973658513020233176985452498279081199404472314802811655824768082110985166340672084454492229252801189742403957029450467388250214501358353312915261004066118140645880633941658603299497698209063510889929202021079926591625770444716951045960277478891794836019580040978908928741972740865961716524153209532713803393514722581342474556943840519615081302148762454520131486413662191617"), |
| new int[] {367}, |
| null), |
| // set 1: valid m and ks - pentanomial basis params |
| new ECFieldF2mDomainParams( |
| 2000, |
| new BigInteger("114813069527425452423283320117768198402231770208869520047764273682576626139237031385665948631650626991844596463898746277344711896086305533142593135616665318539129989145312280000688779148240044871428926990063486244781615463646388363947317026040466353970904996558162398808944629605623311649536164221970332681364606313754094036473740741389411285817465477407288087941692709593079057904974473325399237449961796178150263073811552931156681807161003582337510008648338765664631815874608789366699668224806907571505750798647855797220056285479869767291137153732790597348308446887230584637235716444920907512810569735"), |
| new int[] {981,2,1}, |
| null), |
| // set 2: valid m, invalid (null) pr, invalid (null) ks |
| new ECFieldF2mDomainParams( |
| 1963, |
| null, |
| null, |
| ECFieldF2mDomainParams.NPE), |
| // set 3: valid m, invalid pr, invalid ks - wrong length |
| new ECFieldF2mDomainParams( |
| 1963, |
| new BigInteger("114813069527425452423283320117768198402231770208869520047764273682576626139237031385665948631650626991844596463898746277344711896086305533142593135616665318539129989145312280000688779148240044871428926990063486244781615463646388363947317026040466353970904996558162398808944629605623311649536164221970332681364606313754094036473740741389411285817465477407288087941692709593079057904974473325399237449961796178150263073811552931156681807161003582337510008648338765664631815874608789366699668224806907571505750798647855797220056285479869767291137153732790597348308446887230584637235716444920907512810569734"), |
| new int[] {981,2}, |
| ECFieldF2mDomainParams.IArgE), |
| // set 4: valid m, invalid ks - wrong length |
| new ECFieldF2mDomainParams( |
| 1963, |
| new BigInteger("5"), |
| new int[] {981,124,2,1}, |
| ECFieldF2mDomainParams.IArgE), |
| // set 5: valid m, invalid ks - wrong value |
| new ECFieldF2mDomainParams( |
| 1999, |
| new BigInteger("5"), |
| new int[] {1999}, |
| ECFieldF2mDomainParams.IArgE), |
| // set 6: valid m, invalid ks - wrong value |
| new ECFieldF2mDomainParams( |
| 1999, |
| new BigInteger("5"), |
| new int[] {0}, |
| ECFieldF2mDomainParams.IArgE), |
| // set 7: valid m, invalid ks - wrong values |
| new ECFieldF2mDomainParams( |
| 2000, |
| new BigInteger("5"), |
| new int[] {2000,2,1}, |
| ECFieldF2mDomainParams.IArgE), |
| // set 8: valid m, invalid ks - wrong values |
| new ECFieldF2mDomainParams( |
| 2000, |
| new BigInteger("5"), |
| new int[] {981,2,0}, |
| ECFieldF2mDomainParams.IArgE), |
| // set 9: invalid m |
| new ECFieldF2mDomainParams( |
| -5, |
| new BigInteger("114813069527425452423283320117768198402231770208869520047764273682576626139237031385665948631650626991844596463898746277344711896086305533142593135616665318539129989145312280000688779148240044871428926990063486244781615463646388363947317026040466353970904996558162398808944629605623311649536164221970332681364606313754094036473740741389411285817465477407288087941692709593079057904974473325399237449961796178150263073811552931156681807161003582337510008648338765664631815874608789366699668224806907571505750798647855797220056285479869767291137153732790597348308446887230584637235716444920907512810569735"), |
| new int[] {981,2,1}, |
| ECFieldF2mDomainParams.IArgE), |
| // set 10: valid m, invalid ks - wrong order |
| new ECFieldF2mDomainParams( |
| 2000, |
| new BigInteger("5"), |
| new int[] {981,1,2}, |
| ECFieldF2mDomainParams.IArgE), |
| // set 11: valid m, invalid ks - no content |
| new ECFieldF2mDomainParams( |
| 2000, |
| new BigInteger("5"), |
| new int[3], |
| ECFieldF2mDomainParams.IArgE), |
| // set 12: valid m, invalid ks - length is 0 |
| new ECFieldF2mDomainParams( |
| 2000, |
| new BigInteger("0"), |
| new int[0], |
| ECFieldF2mDomainParams.IArgE), |
| }; |
| |
| /** |
| * Tests for constructor <code>ECFieldF2m(int m, int[] ks)</code><br> |
| * |
| * Assertion: constructs new <code>ECFieldF2m</code> object |
| * using valid parameters m and rp. ks represents trinomial basis. |
| * |
| * Assertion: constructs new <code>ECFieldF2m</code> object |
| * using valid parameters m and ks. ks represents pentanomial basis. |
| * |
| * Assertion: IllegalArgumentException if m is not positive. |
| * |
| * Assertion: NullPointerException if ks is null. |
| * |
| * Assertion: IllegalArgumentException if ks is invalid. |
| */ |
| @TestTargetNew( |
| level = TestLevel.COMPLETE, |
| notes = "", |
| method = "ECFieldF2m", |
| args = {int.class, int[].class} |
| ) |
| public final void testECFieldF2mintintArray() { |
| for(int i=0; i<constructorTestParameters.length; i++) { |
| ECFieldF2mDomainParams tp = constructorTestParameters[i]; |
| try { |
| // perform test |
| ECFieldF2m test = new ECFieldF2m(tp.m, tp.ks); |
| |
| if (tp.x != null) { |
| // exception has been expected |
| fail(getName() + ", set " + i + |
| " FAILED: expected exception has not been thrown"); |
| } |
| } catch (Exception e){ |
| if (tp.x == null || !e.getClass().isInstance(tp.x)) { |
| // exception: failure |
| // if it has not been expected |
| // or wrong one has been thrown |
| fail(getName() + ", set " + i + |
| " FAILED: unexpected " + e); |
| } |
| } |
| } |
| } |
| |
| /** |
| * Tests for constructor <code>ECFieldF2m(int m, BigInteger rp)</code><br> |
| * |
| * Assertion: constructs new <code>ECFieldF2m</code> object |
| * using valid parameters m and rp. |
| * |
| * Assertion: constructs new <code>ECFieldF2m</code> object |
| * using valid parameters m and rp. |
| * |
| * Assertion: IllegalArgumentException if m is not positive. |
| * |
| * Assertion: NullPointerException if rp is null. |
| * |
| * Assertion: IllegalArgumentException if rp is invalid. |
| */ |
| @TestTargetNew( |
| level = TestLevel.COMPLETE, |
| method = "ECFieldF2m", |
| args = {int.class, java.math.BigInteger.class} |
| ) |
| public final void testECFieldF2mintBigInteger() { |
| for(int i=0; i<constructorTestParameters.length; i++) { |
| ECFieldF2mDomainParams tp = constructorTestParameters[i]; |
| try { |
| // perform test |
| new ECFieldF2m(tp.m, tp.rp); |
| |
| if (tp.x != null) { |
| // exception has been expected |
| fail(getName() + ", set " + i + |
| " FAILED: expected exception has not been thrown"); |
| } |
| } catch (Exception e){ |
| if (tp.x == null || !e.getClass().isInstance(tp.x)) { |
| // exception: failure |
| // if it has not been expected |
| // or wrong one has been thrown |
| fail(getName() + ", set " + i + |
| " FAILED: unexpected " + e); |
| } |
| } |
| } |
| } |
| |
| /** |
| * Test #1 for <code>hashCode()</code> method.<br> |
| * |
| * Assertion: must return the same value if invoked |
| * repeatedly on the same object. |
| */ |
| @TestTargetNew( |
| level = TestLevel.PARTIAL_COMPLETE, |
| notes = "", |
| method = "hashCode", |
| args = {} |
| ) |
| public final void testHashCode01() { |
| ECFieldF2m f = new ECFieldF2m(2000); |
| int hc = f.hashCode(); |
| assertTrue(hc == f.hashCode() && |
| hc == f.hashCode() && |
| hc == f.hashCode() && |
| hc == f.hashCode() && |
| hc == f.hashCode() && |
| hc == f.hashCode() && |
| hc == f.hashCode() && |
| hc == f.hashCode()); |
| } |
| |
| /** |
| * Test #2 for <code>hashCode()</code> method.<br> |
| * |
| * Assertion: must return the same value if invoked |
| * repeatedly on the same object. |
| */ |
| @TestTargetNew( |
| level = TestLevel.PARTIAL_COMPLETE, |
| notes = "", |
| method = "hashCode", |
| args = {} |
| ) |
| public final void testHashCode02() { |
| ECFieldF2m f = new ECFieldF2m(2000, new int[] {981, 2, 1}); |
| int hc = f.hashCode(); |
| assertTrue(hc == f.hashCode() && |
| hc == f.hashCode() && |
| hc == f.hashCode() && |
| hc == f.hashCode() && |
| hc == f.hashCode() && |
| hc == f.hashCode() && |
| hc == f.hashCode() && |
| hc == f.hashCode()); |
| } |
| |
| /** |
| * Test #3 for <code>hashCode()</code> method.<br> |
| * |
| * Assertion: must return the same value if invoked |
| * on equal (according to the <code>equals(Object)</code> method) objects. |
| */ |
| @TestTargetNew( |
| level = TestLevel.PARTIAL_COMPLETE, |
| notes = "", |
| method = "hashCode", |
| args = {} |
| ) |
| public final void testHashCode03() { |
| assertTrue(new ECFieldF2m(111).hashCode() == |
| new ECFieldF2m(111).hashCode()); |
| } |
| |
| /** |
| * Test #4 for <code>hashCode()</code> method.<br> |
| * |
| * Assertion: must return the same value if invoked |
| * on equal (according to the <code>equals(Object)</code> method) objects. |
| */ |
| @TestTargetNew( |
| level = TestLevel.PARTIAL_COMPLETE, |
| notes = "", |
| method = "hashCode", |
| args = {} |
| ) |
| public final void testHashCode04() { |
| assertTrue(new ECFieldF2m(2000, new int[] {981, 2, 1}).hashCode() == |
| new ECFieldF2m(2000, new int[] {981, 2, 1}).hashCode()); |
| } |
| |
| /** |
| * Test #5 for <code>hashCode()</code> method.<br> |
| * |
| * Assertion: must return the same value if invoked |
| * on equal (according to the <code>equals(Object)</code> method) objects. |
| */ |
| @TestTargetNew( |
| level = TestLevel.PARTIAL_COMPLETE, |
| notes = "", |
| method = "hashCode", |
| args = {} |
| ) |
| public final void testHashCode05() { |
| assertTrue(new ECFieldF2m(2000, new int[] {981, 2, 1}).hashCode() == |
| new ECFieldF2m(2000, BigInteger.valueOf(0L). |
| setBit(0).setBit(1).setBit(2). |
| setBit(981).setBit(2000)).hashCode()); |
| } |
| |
| /** |
| * Test #1 for <code>equals()</code> method.<br> |
| * |
| * Assertion: object equals to itself. |
| */ |
| @TestTargetNew( |
| level = TestLevel.PARTIAL_COMPLETE, |
| notes = "", |
| method = "equals", |
| args = {java.lang.Object.class} |
| ) |
| public final void testEqualsObject01() { |
| ECFieldF2m obj = new ECFieldF2m(1999, new int[] {367}); |
| assertTrue(obj.equals(obj)); |
| } |
| |
| /** |
| * Test #2 for <code>equals()</code> method.<br> |
| * |
| * Assertion: normal basis - objects equal if their m are equal. |
| */ |
| @TestTargetNew( |
| level = TestLevel.PARTIAL_COMPLETE, |
| notes = "Simple test. Doesn't verify other cases.", |
| method = "equals", |
| args = {java.lang.Object.class} |
| ) |
| public final void testEqualsObject02() { |
| assertTrue(new ECFieldF2m(43).equals(new ECFieldF2m(43))); |
| } |
| |
| /** |
| * Test #3 for <code>equals()</code> method.<br> |
| * |
| * Assertion: trinomial basis - objects equal if their m, and rp |
| * are mutually equal. |
| */ |
| @TestTargetNew( |
| level = TestLevel.PARTIAL_COMPLETE, |
| notes = "", |
| method = "equals", |
| args = {java.lang.Object.class} |
| ) |
| public final void testEqualsObject03() { |
| assertTrue(new ECFieldF2m(1999, new int[] {367}).equals( |
| new ECFieldF2m(1999, BigInteger.valueOf(0L). |
| setBit(0).setBit(367).setBit(1999)))); |
| } |
| |
| /** |
| * Test #4 for <code>equals()</code> method.<br> |
| * |
| * Assertion: pentanomial basis - objects equal if their m, and rp |
| * are mutually equal. |
| */ |
| @TestTargetNew( |
| level = TestLevel.PARTIAL_COMPLETE, |
| notes = "", |
| method = "equals", |
| args = {java.lang.Object.class} |
| ) |
| public final void testEqualsObject04() { |
| ECFieldF2m f1 = new ECFieldF2m(2000, new int[] {981, 2, 1}); |
| ECFieldF2m f2 = new ECFieldF2m(2000, BigInteger.valueOf(0L). |
| setBit(0).setBit(1).setBit(2). |
| setBit(981).setBit(2000)); |
| assertTrue(f1.equals(f2) && f2.equals(f1)); |
| } |
| |
| /** |
| * Test #5 for <code>equals()</code> method.<br> |
| * |
| * Assertion: objects equal if their m, and rp are mutually equal. |
| */ |
| @TestTargetNew( |
| level = TestLevel.PARTIAL_COMPLETE, |
| notes = "", |
| method = "equals", |
| args = {java.lang.Object.class} |
| ) |
| public final void testEqualsObject05() { |
| ECFieldF2m f1 = new ECFieldF2m(2000); |
| ECFieldF2m f2 = new ECFieldF2m(2000, BigInteger.valueOf(0L). |
| setBit(0).setBit(1).setBit(2). |
| setBit(981).setBit(2000)); |
| assertFalse(f1.equals(f2) || f2.equals(f1)); |
| } |
| |
| /** |
| * Test #6 for <code>equals(Object obj)</code> method.<br> |
| * |
| * Assertion: returns false if obj is <code>null</code> |
| */ |
| @TestTargetNew( |
| level = TestLevel.PARTIAL_COMPLETE, |
| notes = "", |
| method = "equals", |
| args = {java.lang.Object.class} |
| ) |
| public final void testEqualsObject06() { |
| assertFalse(new ECFieldF2m(2000).equals(null)); |
| } |
| |
| /** |
| * Test #7 for <code>equals(Object obj)</code> method.<br> |
| * |
| * Assertion: returns false if obj is not instance of <code>ECFieldF2m</code> |
| */ |
| @TestTargetNew( |
| level = TestLevel.PARTIAL_COMPLETE, |
| notes = "", |
| method = "equals", |
| args = {java.lang.Object.class} |
| ) |
| public final void testEqualsObject07() { |
| assertFalse(new ECFieldF2m(2000).equals(new Object())); |
| } |
| |
| /** |
| * Test for <code>getFieldSize()</code> method.<br> |
| * |
| * Assertion: returns m value for <code>ECFieldF2m</code> |
| */ |
| @TestTargetNew( |
| level = TestLevel.COMPLETE, |
| notes = "", |
| method = "getFieldSize", |
| args = {} |
| ) |
| public final void testGetFieldSize() { |
| assertEquals(2000, new ECFieldF2m(2000).getFieldSize()); |
| } |
| |
| /** |
| * Test for <code>getM()</code> method.<br> |
| * |
| * Assertion: returns m value for <code>ECFieldF2m</code> |
| */ |
| @TestTargetNew( |
| level = TestLevel.COMPLETE, |
| notes = "", |
| method = "getM", |
| args = {} |
| ) |
| public final void testGetM() { |
| assertEquals(2000, new ECFieldF2m(2000).getM()); |
| } |
| |
| /** |
| * Test #1 for <code>getMidTermsOfReductionPolynomial()</code> method.<br> |
| * |
| * Assertion: returns mid terms of reduction polynomial |
| */ |
| @TestTargetNew( |
| level = TestLevel.PARTIAL_COMPLETE, |
| notes = "Verifies that getMidTermsOfReductionPolynomial method returns mid terms of reduction polynomial.", |
| method = "getMidTermsOfReductionPolynomial", |
| args = {} |
| ) |
| public final void testGetMidTermsOfReductionPolynomial01() { |
| int[] a = new int[] {981,2,1}; |
| int[] b = new ECFieldF2m(2000, |
| BigInteger.valueOf(0L).setBit(0).setBit(1). |
| setBit(2).setBit(981).setBit(2000)). |
| getMidTermsOfReductionPolynomial(); |
| assertTrue(Arrays.equals(a, b)); |
| } |
| |
| /** |
| * Test #2 for <code>getMidTermsOfReductionPolynomial()</code> method.<br> |
| * |
| * Assertion: returns null for normal basis |
| */ |
| @TestTargetNew( |
| level = TestLevel.PARTIAL_COMPLETE, |
| notes = "Verifies that getMidTermsOfReductionPolynomial method returns null for normal basis.", |
| method = "getMidTermsOfReductionPolynomial", |
| args = {} |
| ) |
| public final void testGetMidTermsOfReductionPolynomial02() { |
| assertNull(new ECFieldF2m(2000).getMidTermsOfReductionPolynomial()); |
| } |
| |
| /** |
| * Test #3 for <code>getMidTermsOfReductionPolynomial()</code> method.<br> |
| * |
| * Assertion: returns mid terms of reduction polynomial |
| */ |
| @TestTargetNew( |
| level = TestLevel.PARTIAL_COMPLETE, |
| notes = "Verifies that getMidTermsOfReductionPolynomial method returns mid terms of reduction polynomial.", |
| method = "getMidTermsOfReductionPolynomial", |
| args = {} |
| ) |
| public final void testGetMidTermsOfReductionPolynomial03() { |
| int[] a = new int[] {367}; |
| int[] b = new ECFieldF2m(1999, a).getMidTermsOfReductionPolynomial(); |
| assertTrue(Arrays.equals(a, b)); |
| } |
| |
| /** |
| * Test #1 for <code>getReductionPolynomial()</code> method.<br> |
| * |
| * Assertion: returns reduction polynomial |
| */ |
| @TestTargetNew( |
| level = TestLevel.PARTIAL_COMPLETE, |
| notes = "Verifies that getReductionPolynomial method returns reduction polynomial.", |
| method = "getReductionPolynomial", |
| args = {} |
| ) |
| public final void testGetReductionPolynomial01() { |
| BigInteger rp = BigInteger.valueOf(0L).setBit(0).setBit(1).setBit(2). |
| setBit(981).setBit(2000); |
| assertTrue(new ECFieldF2m(2000, rp).getReductionPolynomial().equals(rp)); |
| } |
| |
| /** |
| * Test #2 for <code>getReductionPolynomial()</code> method.<br> |
| * |
| * Assertion: returns null for normal basis |
| */ |
| @TestTargetNew( |
| level = TestLevel.PARTIAL_COMPLETE, |
| notes = "Verifies that getReductionPolynomial method returns null for normal basis.", |
| method = "getReductionPolynomial", |
| args = {} |
| ) |
| public final void testGetReductionPolynomial02() { |
| assertNull(new ECFieldF2m(2000).getReductionPolynomial()); |
| } |
| |
| /** |
| * Tests that object state is preserved against modifications |
| * through array reference passed to the constructor. |
| */ |
| @TestTargetNew( |
| level = TestLevel.PARTIAL, |
| notes = "Verifies that object state is preserved against modifications through array reference passed to the constructor.", |
| method = "ECFieldF2m", |
| args = {int.class, int[].class} |
| ) |
| public final void testIsStatePreserved01() { |
| // reference array |
| int[] a = new int[] {367}; |
| // reference array copy |
| int[] aCopy = a.clone(); |
| // create obj using copy |
| ECFieldF2m f = new ECFieldF2m(1999, aCopy); |
| // modify copy |
| aCopy[0] = 5; |
| // compare reference with returned array |
| assertTrue(Arrays.equals(a, f.getMidTermsOfReductionPolynomial())); |
| } |
| |
| /** |
| * Tests that object state is preserved against |
| * modifications through array reference returned by |
| * <code>getMidTermsOfReductionPolynomial()</code> method. |
| */ |
| @TestTargets({ |
| @TestTargetNew( |
| level = TestLevel.PARTIAL, |
| notes = "Verifies that object state is preserved against modifications through array reference returned by getMidTermsOfReductionPolynomial() method.", |
| method = "ECFieldF2m", |
| args = {int.class, int[].class} |
| ), |
| @TestTargetNew( |
| level = TestLevel.PARTIAL, |
| notes = "Verifies that object state is preserved against modifications through array reference returned by getMidTermsOfReductionPolynomial() method.", |
| method = "getMidTermsOfReductionPolynomial", |
| args = {} |
| ) |
| }) |
| public final void testIsStatePreserved02() { |
| // reference array |
| int[] a = new int[] {981,2,1}; |
| // reference array copy |
| int[] aCopy = a.clone(); |
| // create obj using copy |
| ECFieldF2m f = new ECFieldF2m(2000, aCopy); |
| // get array reference and modify returned array |
| f.getMidTermsOfReductionPolynomial()[0] = 1532; |
| // compare reference with returned for the second time array |
| assertTrue(Arrays.equals(a, f.getMidTermsOfReductionPolynomial())); |
| } |
| |
| } |