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 Alexander Y. Kleymenov 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project* @version $Revision$ 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project*/ 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage org.apache.harmony.crypto.tests.javax.crypto.spec; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.Test; 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestCase; 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestSuite; 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Arrays; 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.crypto.spec.SecretKeySpec; 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class SecretKeySpecTest extends TestCase { 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * SecretKeySpec(byte[] key, String algorithm) method testing. Tests that 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalArgumentException is thrown in the case of inappropriate 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * constructor parameters and that input iv array is 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * copied to protect against subsequent modification. 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testSecretKeySpec1() { 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] key = new byte[] {1, 2, 3, 4, 5}; 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String algorithm = "Algorithm"; 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new SecretKeySpec(new byte[] {}, algorithm); 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("An IllegalArgumentException should be thrown " 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "in the case of empty key."); 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new SecretKeySpec(null, algorithm); 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("An IllegalArgumentException should be thrown " 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "in the case of null key."); 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new SecretKeySpec(key, null); 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("An IllegalArgumentException should be thrown " 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "in the case of null algorithm."); 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecretKeySpec ks = new SecretKeySpec(key, algorithm); 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project key[0] ++; 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse("The change of key specified in the constructor " 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "should not cause the change of internal array.", 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project key[0] == ks.getEncoded()[0]); 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * SecretKeySpec(byte[] key, int offset, int len, String algorithm) method 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * testing. Tests that IllegalArgumentException is thrown in 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the case of inappropriate constructor parameters and that input iv array 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * is copied to protect against subsequent modification. 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testSecretKeySpec2() { 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] key = new byte[] {1, 2, 3, 4, 5}; 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int offset = 1; 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int len = 4; 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String algorithm = "Algorithm"; 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new SecretKeySpec(new byte[] {}, 0, 0, algorithm); 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("An IllegalArgumentException should be thrown " 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "in the case of empty key."); 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new SecretKeySpec(null, 0, 0, algorithm); 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("An IllegalArgumentException should be thrown " 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "in the case of null key."); 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new SecretKeySpec(key, offset, len, null); 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("An IllegalArgumentException should be thrown " 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "in the case of short key algorithm."); 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new SecretKeySpec(key, offset, key.length, algorithm); 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("An IllegalArgumentException should be thrown " 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "in the case of null key."); 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new SecretKeySpec(key, 0, -1, algorithm); 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("An ArrayIndexOutOfBoundsException should be thrown " 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "in the case of illegal length."); 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Not expected IllegalArgumentException was thrown."); 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (ArrayIndexOutOfBoundsException e) { 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecretKeySpec ks = new SecretKeySpec(key, algorithm); 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project key[offset] ++; 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse("The change of key specified in the constructor " 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "should not cause the change of internal array.", 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project key[offset] == ks.getEncoded()[0]); 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Regression test for HARMONY-1077 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new SecretKeySpec(new byte[] { 2 }, 4, -100, "CCC"); 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("ArrayIndexOutOfBoundsException expected"); 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (ArrayIndexOutOfBoundsException e) { 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 138f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testSecretKeySpec3() { 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] key = new byte[] {1, 2, 3, 4, 5}; 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int offset = 1; 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int len = 4; 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String algorithm = "Algorithm"; 144f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new SecretKeySpec(key, -1, key.length, algorithm); 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("An ArrayIndexOutOfBoundsException should be thrown " 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "in the case of illegal offset."); 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Not expected IllegalArgumentException was thrown."); 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (ArrayIndexOutOfBoundsException e) { 152f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes } 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * getAlgorithm() method testing. Tests that returned value is 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * equal to the value specified in the constructor. 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testGetAlgorithm() { 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] key = new byte[] {1, 2, 3, 4, 5}; 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String algorithm = "Algorithm"; 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecretKeySpec ks = new SecretKeySpec(key, algorithm); 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("The returned value does not equal to the " 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "value specified in the constructor.", 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project algorithm, ks.getAlgorithm()); 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * getFormat() method testing. Tests that returned value is "RAW". 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testGetFormat() { 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] key = new byte[] {1, 2, 3, 4, 5}; 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String algorithm = "Algorithm"; 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecretKeySpec ks = new SecretKeySpec(key, algorithm); 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("The returned value is not \"RAW\".", 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ks.getFormat() == "RAW"); 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * getEncoded() method testing. Tests that returned array is equal to the 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * array specified in the constructor. Checks that modification 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * of returned array does not affect the internal array. 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testGetEncoded() { 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] key = new byte[] {1, 2, 3, 4, 5}; 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String algorithm = "Algorithm"; 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecretKeySpec ks = new SecretKeySpec(key, algorithm); 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] result = ks.getEncoded(); 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (! Arrays.equals(key, result)) { 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("The returned key does not equal to the specified " 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "in the constructor."); 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project result[0] ++; 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse("The change of returned by getEncoded() method key " 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "should not cause the change of internal array.", 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project result[0] == ks.getEncoded()[0]); 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Regression for HARMONY-78 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int offset = 1; 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int len = 4; 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecretKeySpec sks = new SecretKeySpec(key, offset, len, algorithm); 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Key length is incorrect", len, sks.getEncoded().length); 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * hashCode() method testing. Tests that for equal objects hash codes 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * are equal. 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testHashCode() { 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] key = new byte[] {1, 2, 3, 4, 5}; 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String algorithm = "Algorithm"; 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecretKeySpec ks1 = new SecretKeySpec(key, algorithm); 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecretKeySpec ks2 = new SecretKeySpec(key, algorithm); 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Equal objects should have the same hash codes.", 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ks1.hashCode() == ks2.hashCode()); 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * equals(Object obj) method testing. Tests the correctness of equal 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * operation: it should be reflexive, symmetric, transitive, consistent 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and should be false on null object. 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testEquals() { 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] key = new byte[] {1, 2, 3, 4, 5}; 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String algorithm = "Algorithm"; 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecretKeySpec ks1 = new SecretKeySpec(key, algorithm); 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecretKeySpec ks2 = new SecretKeySpec(key, algorithm); 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecretKeySpec ks3 = new SecretKeySpec(key, algorithm); 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // checking for reflexive law: 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("The equivalence relation should be reflexive.", 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ks1.equals(ks1)); 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Objects built on the same parameters should be equal.", 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ks1.equals(ks2)); 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // checking for symmetric law: 242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("The equivalence relation should be symmetric.", 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ks2.equals(ks1)); 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Objects built on the equal parameters should be equal.", 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ks2.equals(ks3)); 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // checking for transitive law: 248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("The equivalence relation should be transitive.", 249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ks1.equals(ks3)); 250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse("Should not be equal to null object.", 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ks1.equals(null)); 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ks2 = new SecretKeySpec(new byte[] {1}, algorithm); 255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse("Objects should not be equal.", ks1.equals(ks2)); 256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ks2 = new SecretKeySpec(key, "Another Algorithm"); 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse("Objects should not be equal.", ks1.equals(ks2)); 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static Test suite() { 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return new TestSuite(SecretKeySpecTest.class); 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 266