1d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root/* 2d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root * Copyright 2013 The Android Open Source Project 3d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root * 4d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root * Licensed under the Apache License, Version 2.0 (the "License"); 5d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root * you may not use this file except in compliance with the License. 6d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root * You may obtain a copy of the License at 7d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root * 8d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root * http://www.apache.org/licenses/LICENSE-2.0 9d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root * 10d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root * Unless required by applicable law or agreed to in writing, software 11d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root * distributed under the License is distributed on an "AS IS" BASIS, 12d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root * See the License for the specific language governing permissions and 14d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root * limitations under the License. 15d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root */ 16d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root 17d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Rootpackage org.apache.harmony.crypto.tests.javax.crypto.spec; 18d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root 19d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Rootimport java.util.Arrays; 20d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root 21d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Rootimport javax.crypto.spec.GCMParameterSpec; 22d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root 23d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Rootimport junit.framework.TestCase; 24d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root 25d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Rootpublic class GCMParameterSpecTest extends TestCase { 26d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root private static final byte[] TEST_IV = new byte[8]; 27d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root 28d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root public void testConstructor_IntByteArray_Success() throws Exception { 29d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root new GCMParameterSpec(8, TEST_IV); 30d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root } 31d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root 32d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root public void testConstructor_IntByteArray_NegativeTLen_Failure() throws Exception { 33d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root try { 34d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root new GCMParameterSpec(-1, TEST_IV); 35d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root fail("Should throw IllegalArgumentException"); 36d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root } catch (IllegalArgumentException expected) { 37d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root } 38d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root } 39d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root 40d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root public void testConstructor_IntByteArray_NullIv_Failure() throws Exception { 41d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root try { 42d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root new GCMParameterSpec(8, null); 43d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root fail("Should throw IllegalArgumentException"); 44d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root } catch (IllegalArgumentException expected) { 45d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root } 46d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root } 47d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root 48d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root public void testConstructor_IntByteArrayWithOffsets_Success() throws Exception { 49d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root new GCMParameterSpec(8, TEST_IV, 0, TEST_IV.length); 50d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root } 51d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root 52d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root public void testConstructor_IntByteArrayWithOffsets_NullIv_Failure() throws Exception { 53d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root try { 54d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root new GCMParameterSpec(8, null, 0, TEST_IV.length); 55d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root fail("Should throw IllegalArgumentException"); 56d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root } catch (IllegalArgumentException expected) { 57d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root } 58d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root } 59d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root 60d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root public void testConstructor_IntByteArrayWithOffsets_NegativeOffset_Failure() throws Exception { 61d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root try { 62d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root new GCMParameterSpec(8, TEST_IV, -1, TEST_IV.length); 63d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root fail("Should throw IllegalArgumentException"); 64d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root } catch (IllegalArgumentException expected) { 65d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root } 66d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root } 67d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root 68d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root public void testConstructor_IntByteArrayWithOffsets_TooLongLength_Failure() throws Exception { 69d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root try { 70d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root new GCMParameterSpec(8, TEST_IV, 0, TEST_IV.length + 1); 71d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root fail("Should throw IllegalArgumentException"); 72d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root } catch (IllegalArgumentException expected) { 73d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root } 74d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root } 75d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root 76d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root public void testGetIV_Success() throws Exception { 77d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root GCMParameterSpec spec = new GCMParameterSpec(8, TEST_IV); 78d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root 79d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root byte[] actual = spec.getIV(); 80d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root assertEquals(Arrays.toString(TEST_IV), Arrays.toString(actual)); 81d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root 82d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root // XOR with 0xFF so we're sure we changed the array 83d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root for (int i = 0; i < actual.length; i++) { 84d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root actual[i] ^= 0xFF; 85d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root } 86d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root 87d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root assertFalse("Changing the IV returned shouldn't change the parameter spec", 88d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root Arrays.equals(spec.getIV(), actual)); 89d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root assertEquals(Arrays.toString(TEST_IV), Arrays.toString(spec.getIV())); 90d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root } 91d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root 92d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root public void testGetIV_Subarray_Success() throws Exception { 93d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root GCMParameterSpec spec = new GCMParameterSpec(8, TEST_IV, 2, 4); 94d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root assertEquals(Arrays.toString(Arrays.copyOfRange(TEST_IV, 2, 6)), 95d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root Arrays.toString(spec.getIV())); 96d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root } 97d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root 98d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root public void testGetTLen_Success() throws Exception { 99d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root GCMParameterSpec spec = new GCMParameterSpec(8, TEST_IV); 100d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root assertEquals(8, spec.getTLen()); 101d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root } 102d416195acbc08f2b3bdd5d5532d40438465d99e9Kenny Root} 103