1561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/* 2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Licensed to the Apache Software Foundation (ASF) under one or more 3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * contributor license agreements. See the NOTICE file distributed with 4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * this work for additional information regarding copyright ownership. 5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0 6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * (the "License"); you may not use this file except in compliance with 7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * the License. You may obtain a copy of the License at 8561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * http://www.apache.org/licenses/LICENSE-2.0 10561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Unless required by applicable law or agreed to in writing, software 12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, 13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * See the License for the specific language governing permissions and 15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * limitations under the License. 16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/** 19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes* @author Alexander Y. Kleymenov 20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes*/ 21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.crypto.tests.javax.crypto.spec; 23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Arrays; 25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.crypto.spec.RC5ParameterSpec; 27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.Test; 29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase; 30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestSuite; 31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/** 33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class RC5ParameterSpecTest extends TestCase { 36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * RC5ParameterSpec(int version, int rounds, int wordSize, byte[] iv) method 39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * testing. Tests that IllegalArgumentException is thrown in the case of 40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * inappropriate constructor parameters and that input iv array is 41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * copied to protect against subsequent modification. 42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testRC5ParameterSpec1() { 44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int version = 1; 45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int rounds = 5; 46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int wordSize = 16; 47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] iv = {1, 2, 3, 4}; 48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new RC5ParameterSpec(version, rounds, wordSize, null); 51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("An IllegalArgumentException should be thrown " 52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "in the case of null iv."); 53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new RC5ParameterSpec(version, rounds, wordSize+8, iv); 58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("An IllegalArgumentException should be thrown " 59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "in the case of short iv."); 60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new RC5ParameterSpec(version, rounds, wordSize, new byte[] {1, 2, 3}); 65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("An IllegalArgumentException should be thrown " 66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "in the case of short iv."); 67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes RC5ParameterSpec ps = new RC5ParameterSpec(version, rounds, 71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes wordSize, iv); 72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes iv[0] ++; 73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("The change of iv specified in the constructor " 74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "should not cause the change of internal array.", 75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes iv[0] == ps.getIV()[0]); 76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * RC5ParameterSpec(int version, int rounds, int wordSize, byte[] iv, int 80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * offset) method testing. Tests that IllegalArgumentException is thrown in 81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * the case of inappropriate constructor parameters and that input iv array 82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * is copied to protect against subsequent modification. 83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testRC5ParameterSpec2() { 85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int version = 1; 86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int rounds = 5; 87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int wordSize = 16; 88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] iv = {1, 2, 3, 4, 5, 6}; 89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int offset = 2; 90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new RC5ParameterSpec(version, rounds, wordSize, null, offset); 93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("An IllegalArgumentException should be thrown " 94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "in the case of null iv."); 95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new RC5ParameterSpec(version, rounds, wordSize+8, iv, offset); 100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("An IllegalArgumentException should be thrown " 101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "in the case of short iv."); 102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new RC5ParameterSpec(version, rounds, wordSize, iv, offset+1); 107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("An IllegalArgumentException should be thrown " 108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "in the case of short iv."); 109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new RC5ParameterSpec(version, rounds, wordSize, new byte[] { 1, 2, 114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 3, 4 }, offset); 115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("An IllegalArgumentException should be thrown " 116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "in the case of short iv."); 117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes RC5ParameterSpec ps = new RC5ParameterSpec(version, rounds, wordSize, 121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes iv, offset); 122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes iv[offset] ++; 123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("The change of iv specified in the constructor " 124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "should not cause the change of internal array.", 125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes iv[offset] == ps.getIV()[0]); 126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Regression test for HARMONY-1077 128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new RC5ParameterSpec(0, 9, 77, new byte[] { 2 }, -100); 130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("ArrayIndexOutOfBoundsException expected"); 131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (ArrayIndexOutOfBoundsException e) { 132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // expected 133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * getVersion() method testing. Tests that returned value is 138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * equal to the value specified in the constructor. 139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testGetVersion() { 141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int version = 1; 142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int rounds = 5; 143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int wordSize = 16; 144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes RC5ParameterSpec ps = new RC5ParameterSpec(version, rounds, wordSize); 146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("The returned version value should be equal to the " 147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "value specified in the constructor.", 148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ps.getVersion() == version); 149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * getRounds() method testing. Tests that returned value is 153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * equal to the value specified in the constructor. 154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testGetRounds() { 156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int version = 1; 157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int rounds = 5; 158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int wordSize = 16; 159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes RC5ParameterSpec ps = new RC5ParameterSpec(version, rounds, wordSize); 161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("The returned rounds value should be equal to the " 162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "value specified in the constructor.", 163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ps.getRounds() == rounds); 164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * getWordSize() method testing. Tests that returned value is 168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * equal to the value specified in the constructor. 169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testGetWordSize() { 171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int version = 1; 172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int rounds = 5; 173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int wordSize = 16; 174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes RC5ParameterSpec ps = new RC5ParameterSpec(version, rounds, wordSize); 176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("The returned wordSize value should be equal to the " 177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "value specified in the constructor.", 178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ps.getWordSize() == wordSize); 179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * getIV() method testing. Tests that returned array is equal to the 183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * array specified in the constructor. Checks that modification 184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * of returned array does not affect the internal array. Also it checks 185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * that getIV() method returns null if iv is not specified. 186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testGetIV() { 188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int version = 1; 189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int rounds = 5; 190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int wordSize = 16; 191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] iv = {1, 2, 3, 4}; 192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes RC5ParameterSpec ps = new RC5ParameterSpec(version, rounds, 194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes wordSize, iv); 195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] result = ps.getIV(); 196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (! Arrays.equals(iv, result)) { 197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("The returned iv is not equal to the specified " 198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "in the constructor."); 199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes result[0] ++; 201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("The change of returned by getIV() method iv " 202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "should not cause the change of internal array.", 203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes result[0] == ps.getIV()[0]); 204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ps = new RC5ParameterSpec(version, rounds, wordSize); 205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull("The getIV() method should return null if the parameter " 206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "set does not contain IV.", ps.getIV()); 207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * equals(Object obj) method testing. Tests the correctness of equal 211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * operation: it should be reflexive, symmetric, transitive, consistent 212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * and should be false on null object. 213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testEquals() { 215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int version = 1; 216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int rounds = 5; 217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int wordSize = 16; 218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] iv = {1, 2, 3, 4, 5, 6}; 219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes RC5ParameterSpec ps1 = new RC5ParameterSpec(version, rounds, 221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes wordSize, iv); 222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes RC5ParameterSpec ps2 = new RC5ParameterSpec(version, rounds, 223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes wordSize, iv); 224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes RC5ParameterSpec ps3 = new RC5ParameterSpec(version, rounds, wordSize, 225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new byte[] {1, 2, 3, 4}); 226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // checking for reflexive law: 227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("The equivalence relation should be reflexive.", 228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ps1.equals(ps1)); 229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Objects built on the same parameters should be equal.", 231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ps1.equals(ps2)); 232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // checking for symmetric law: 233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("The equivalence relation should be symmetric.", 234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ps2.equals(ps1)); 235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Objects built on the equal parameters should be equal.", 237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ps2.equals(ps3)); 238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // checking for transitive law: 240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("The equivalence relation should be transitive.", 241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ps1.equals(ps3)); 242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("Should return not be equal to null object.", 244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ps1.equals(null)); 245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ps2 = new RC5ParameterSpec(version+1, rounds, wordSize, iv); 247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("Objects should not be equal.", ps1.equals(ps2)); 248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ps2 = new RC5ParameterSpec(version, rounds+1, wordSize, iv); 250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("Objects should not be equal.", ps1.equals(ps2)); 251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ps2 = new RC5ParameterSpec(version, rounds, wordSize/2, iv); 253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("Objects should not be equal.", ps1.equals(ps2)); 254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ps2 = new RC5ParameterSpec(version, rounds, wordSize, 256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new byte[] {4, 3, 2, 1}); 257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("Objects should not be equal.", ps1.equals(ps2)); 258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * hashCode() method testing. Tests that for equal objects hash codes 262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * are equal. 263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testHashCode() { 265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int version = 1; 266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int rounds = 5; 267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int wordSize = 16; 268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] iv = {1, 2, 3, 4, 5, 6}; 269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes RC5ParameterSpec ps1 = new RC5ParameterSpec(version, rounds, 271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes wordSize, iv); 272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes RC5ParameterSpec ps2 = new RC5ParameterSpec(version, rounds, 273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes wordSize, iv); 274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Equal objects should have the same hash codes.", 275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ps1.hashCode() == ps2.hashCode()); 276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 278561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public static Test suite() { 279561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return new TestSuite(RC5ParameterSpecTest.class); 280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes} 283