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.SecretKeySpec; 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 SecretKeySpecTest extends TestCase { 36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * SecretKeySpec(byte[] key, String algorithm) method testing. Tests that 39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * IllegalArgumentException is thrown in the case of inappropriate 40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * constructor parameters and that input iv array is 41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * copied to protect against subsequent modification. 42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testSecretKeySpec1() { 44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] key = new byte[] {1, 2, 3, 4, 5}; 45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String algorithm = "Algorithm"; 46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new SecretKeySpec(new byte[] {}, algorithm); 49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("An IllegalArgumentException should be thrown " 50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "in the case of empty key."); 51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new SecretKeySpec(null, algorithm); 56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("An IllegalArgumentException should be thrown " 57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "in the case of null key."); 58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new SecretKeySpec(key, null); 63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("An IllegalArgumentException should be thrown " 64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "in the case of null algorithm."); 65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SecretKeySpec ks = new SecretKeySpec(key, algorithm); 69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes key[0] ++; 70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("The change of key specified in the constructor " 71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "should not cause the change of internal array.", 72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes key[0] == ks.getEncoded()[0]); 73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * SecretKeySpec(byte[] key, int offset, int len, String algorithm) method 77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * testing. Tests that IllegalArgumentException is thrown in 78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * the case of inappropriate constructor parameters and that input iv array 79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * is copied to protect against subsequent modification. 80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testSecretKeySpec2() { 82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] key = new byte[] {1, 2, 3, 4, 5}; 83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int offset = 1; 84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int len = 4; 85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String algorithm = "Algorithm"; 86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new SecretKeySpec(new byte[] {}, 0, 0, algorithm); 89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("An IllegalArgumentException should be thrown " 90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "in the case of empty key."); 91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new SecretKeySpec(null, 0, 0, algorithm); 96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("An IllegalArgumentException should be thrown " 97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "in the case of null key."); 98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new SecretKeySpec(key, offset, len, null); 103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("An IllegalArgumentException should be thrown " 104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "in the case of short key algorithm."); 105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new SecretKeySpec(key, offset, key.length, algorithm); 110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("An IllegalArgumentException should be thrown " 111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "when offset and len specify an invalid chunk of key."); 112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new SecretKeySpec(key, -1, key.length, algorithm); 117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("An ArrayIndexOutOfBoundsException should be thrown " 118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "in the case of negative offset."); 119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Not expected IllegalArgumentException was thrown."); 121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (ArrayIndexOutOfBoundsException e) { 122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Regression test for HARMONY-6347 125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new SecretKeySpec(key, -1, key.length+2, algorithm); 127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("An ArrayIndexOutOfBoundsException should be thrown " 128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "in the case of negative offset."); 129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Not expected IllegalArgumentException was thrown."); 131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (ArrayIndexOutOfBoundsException e) { 132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new SecretKeySpec(key, offset, len, null); 136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("An IllegalArgumentException should be thrown " 137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "in the case of null algorithm."); 138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SecretKeySpec ks = new SecretKeySpec(key, algorithm); 142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes key[offset] ++; 143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("The change of key specified in the constructor " 144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "should not cause the change of internal array.", 145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes key[offset] == ks.getEncoded()[0]); 146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Regression test for HARMONY-1077 148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new SecretKeySpec(new byte[] { 2 }, 4, -100, "CCC"); 150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("ArrayIndexOutOfBoundsException expected"); 151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (ArrayIndexOutOfBoundsException e) { 152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes //expected 153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * getAlgorithm() method testing. Tests that returned value is 158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * equal to the value specified in the constructor. 159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testGetAlgorithm() { 161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] key = new byte[] {1, 2, 3, 4, 5}; 162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String algorithm = "Algorithm"; 163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SecretKeySpec ks = new SecretKeySpec(key, algorithm); 165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("The returned value does not equal to the " 166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "value specified in the constructor.", 167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes algorithm, ks.getAlgorithm()); 168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * getFormat() method testing. Tests that returned value is "RAW". 172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testGetFormat() { 174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] key = new byte[] {1, 2, 3, 4, 5}; 175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String algorithm = "Algorithm"; 176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SecretKeySpec ks = new SecretKeySpec(key, algorithm); 178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("The returned value is not \"RAW\".", 179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ks.getFormat() == "RAW"); 180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * getEncoded() method testing. Tests that returned array is equal to the 184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * array specified in the constructor. Checks that modification 185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * of returned array does not affect the internal array. 186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testGetEncoded() { 188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] key = new byte[] {1, 2, 3, 4, 5}; 189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String algorithm = "Algorithm"; 190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SecretKeySpec ks = new SecretKeySpec(key, algorithm); 192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] result = ks.getEncoded(); 193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (! Arrays.equals(key, result)) { 194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("The returned key does not equal to the specified " 195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "in the constructor."); 196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes result[0] ++; 198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("The change of returned by getEncoded() method key " 199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "should not cause the change of internal array.", 200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes result[0] == ks.getEncoded()[0]); 201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Regression for HARMONY-78 203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int offset = 1; 204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int len = 4; 205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SecretKeySpec sks = new SecretKeySpec(key, offset, len, algorithm); 206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Key length is incorrect", len, sks.getEncoded().length); 207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * hashCode() method testing. Tests that for equal objects hash codes 211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * are equal. 212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testHashCode() { 214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] key = new byte[] {1, 2, 3, 4, 5}; 215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String algorithm = "Algorithm"; 216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SecretKeySpec ks1 = new SecretKeySpec(key, algorithm); 218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SecretKeySpec ks2 = new SecretKeySpec(key, algorithm); 219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Equal objects should have the same hash codes.", 220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ks1.hashCode() == ks2.hashCode()); 221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * equals(Object obj) method testing. Tests the correctness of equal 225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * operation: it should be reflexive, symmetric, transitive, consistent 226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * and should be false on null object. 227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testEquals() { 229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] key = new byte[] {1, 2, 3, 4, 5}; 230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String algorithm = "Algorithm"; 231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SecretKeySpec ks1 = new SecretKeySpec(key, algorithm); 233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SecretKeySpec ks2 = new SecretKeySpec(key, algorithm); 234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SecretKeySpec ks3 = new SecretKeySpec(key, algorithm); 235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // checking for reflexive law: 237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("The equivalence relation should be reflexive.", 238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ks1.equals(ks1)); 239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Objects built on the same parameters should be equal.", 241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ks1.equals(ks2)); 242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // checking for symmetric law: 243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("The equivalence relation should be symmetric.", 244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ks2.equals(ks1)); 245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Objects built on the equal parameters should be equal.", 247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ks2.equals(ks3)); 248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // checking for transitive law: 249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("The equivalence relation should be transitive.", 250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ks1.equals(ks3)); 251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("Should not be equal to null object.", 253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ks1.equals(null)); 254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ks2 = new SecretKeySpec(new byte[] {1}, algorithm); 256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("Objects should not be equal.", ks1.equals(ks2)); 257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ks2 = new SecretKeySpec(key, "Another Algorithm"); 259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("Objects should not be equal.", ks1.equals(ks2)); 260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public static Test suite() { 263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return new TestSuite(SecretKeySpecTest.class); 264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes} 267