/* * Copyright 2013 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.harmony.crypto.tests.javax.crypto.spec; import java.util.Arrays; import javax.crypto.spec.GCMParameterSpec; import junit.framework.TestCase; public class GCMParameterSpecTest extends TestCase { private static final byte[] TEST_IV = new byte[8]; public void testConstructor_IntByteArray_Success() throws Exception { new GCMParameterSpec(8, TEST_IV); } public void testConstructor_IntByteArray_NegativeTLen_Failure() throws Exception { try { new GCMParameterSpec(-1, TEST_IV); fail("Should throw IllegalArgumentException"); } catch (IllegalArgumentException expected) { } } public void testConstructor_IntByteArray_NullIv_Failure() throws Exception { try { new GCMParameterSpec(8, null); fail("Should throw IllegalArgumentException"); } catch (IllegalArgumentException expected) { } } public void testConstructor_IntByteArrayWithOffsets_Success() throws Exception { new GCMParameterSpec(8, TEST_IV, 0, TEST_IV.length); } public void testConstructor_IntByteArrayWithOffsets_NullIv_Failure() throws Exception { try { new GCMParameterSpec(8, null, 0, TEST_IV.length); fail("Should throw IllegalArgumentException"); } catch (IllegalArgumentException expected) { } } public void testConstructor_IntByteArrayWithOffsets_NegativeOffset_Failure() throws Exception { try { new GCMParameterSpec(8, TEST_IV, -1, TEST_IV.length); fail("Should throw IllegalArgumentException"); } catch (IllegalArgumentException expected) { } } public void testConstructor_IntByteArrayWithOffsets_TooLongLength_Failure() throws Exception { try { new GCMParameterSpec(8, TEST_IV, 0, TEST_IV.length + 1); fail("Should throw IllegalArgumentException"); } catch (IllegalArgumentException expected) { } } public void testGetIV_Success() throws Exception { GCMParameterSpec spec = new GCMParameterSpec(8, TEST_IV); byte[] actual = spec.getIV(); assertEquals(Arrays.toString(TEST_IV), Arrays.toString(actual)); // XOR with 0xFF so we're sure we changed the array for (int i = 0; i < actual.length; i++) { actual[i] ^= 0xFF; } assertFalse("Changing the IV returned shouldn't change the parameter spec", Arrays.equals(spec.getIV(), actual)); assertEquals(Arrays.toString(TEST_IV), Arrays.toString(spec.getIV())); } public void testGetIV_Subarray_Success() throws Exception { GCMParameterSpec spec = new GCMParameterSpec(8, TEST_IV, 2, 4); assertEquals(Arrays.toString(Arrays.copyOfRange(TEST_IV, 2, 6)), Arrays.toString(spec.getIV())); } public void testGetTLen_Success() throws Exception { GCMParameterSpec spec = new GCMParameterSpec(8, TEST_IV); assertEquals(8, spec.getTLen()); } }