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 java.lang.NullPointerException; 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.lang.IllegalArgumentException; 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.lang.ArrayIndexOutOfBoundsException; 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.crypto.spec.IvParameterSpec; 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.Test; 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestCase; 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestSuite; 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class IvParameterSpecTest extends TestCase { 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IvParameterSpec(byte[] iv) constructor testing. Checks that 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * NullPointerException is thrown in the case of null input 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * array and that input array is copied during initialization. 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testIvParameterSpec1() { 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new IvParameterSpec(null); 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Should raise an NullPointerException " 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "in the case of null byte array."); 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(NullPointerException e) { 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] iv = new byte[] {1, 2, 3, 4, 5}; 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project IvParameterSpec ivps = new IvParameterSpec(iv); 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project iv[0] ++; 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse("The change of input array's content should not cause " 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "the change of internal array", iv[0] == ivps.getIV()[0]); 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IvParameterSpec(byte[] iv) constructor testing. Checks that 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * NullPointerException is thrown in the case of null input 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * array and that input array is copied during initialization. 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testIvParameterSpec2() { 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new IvParameterSpec(null, 1, 1); 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Should raise an IllegalArgumentException " 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "in the case of null byte array."); 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(ArrayIndexOutOfBoundsException e) { 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected ArrayIndexOutOfBoundsException was thrown"); 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(IllegalArgumentException e) { 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(NullPointerException e) { 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected NullPointerException was thrown"); 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new IvParameterSpec(new byte[] {1, 2, 3}, 2, 2); 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Should raise an IllegalArgumentException " 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "if (iv.length - offset < len)."); 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(ArrayIndexOutOfBoundsException e) { 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected ArrayIndexOutOfBoundsException was thrown"); 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(IllegalArgumentException e) { 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(NullPointerException e) { 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected NullPointerException was thrown"); 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new IvParameterSpec(new byte[] {1, 2, 3}, -1, 1); 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Should raise an ArrayIndexOutOfBoundsException " 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "if offset index bytes outside the iv."); 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(ArrayIndexOutOfBoundsException e) { 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(IllegalArgumentException e) { 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected IllegalArgumentException was thrown"); 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(NullPointerException e) { 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected NullPointerException was thrown"); 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* TODO: DRL fail with java.lang.NegativeArraySizeException 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new IvParameterSpec(new byte[] {1, 2, 3}, 1, -2); 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Should raise an ArrayIndexOutOfBoundsException " 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "if len index bytes outside the iv."); 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(ArrayIndexOutOfBoundsException e) { 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(IllegalArgumentException e) { 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected IllegalArgumentException was thrown"); 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(NullPointerException e) { 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected NullPointerException was thrown"); 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] iv = new byte[] {1, 2, 3, 4, 5}; 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project IvParameterSpec ivps = new IvParameterSpec(iv, 0, iv.length); 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project iv[0] ++; 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse("The change of input array's content should not cause " 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "the change of internal array", iv[0] == ivps.getIV()[0]); 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //Regression for HARMONY-1089 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new IvParameterSpec(new byte[2], 2, -1); 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("ArrayIndexOutOfBoundsException expected"); 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (ArrayIndexOutOfBoundsException e) { 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testGetIV() { 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] iv = new byte[] {1, 2, 3, 4, 5}; 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project IvParameterSpec ivps = new IvParameterSpec(iv); 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project iv = ivps.getIV(); 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project iv[0] ++; 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse("The change of returned array should not cause " 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "the change of internal array", iv[0] == ivps.getIV()[0]); 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static Test suite() { 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return new TestSuite(IvParameterSpecTest.class); 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 140