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 Vladimir N. Molotkov 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project* @version $Revision$ 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project*/ 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage tests.security.spec; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestCase; 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.spec.EncodedKeySpec; 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.spec.PKCS8EncodedKeySpec; 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Arrays; 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Tests for <code>PKCS8EncodedKeySpec</code> class fields and methods. 33f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class PKCS8EncodedKeySpecTest extends TestCase { 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Tests 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // 40f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Test for <code>PKCS8EncodedKeySpec</code> constructor<br> 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Assertion: constructs new <code>PKCS8EncodedKeySpec</code> 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * object using valid parameter 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final void testPKCS8EncodedKeySpec() { 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] encodedKey = new byte[] {(byte)1,(byte)2,(byte)3,(byte)4}; 48f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project EncodedKeySpec eks = new PKCS8EncodedKeySpec(encodedKey); 50f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue(eks instanceof PKCS8EncodedKeySpec); 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project eks = new PKCS8EncodedKeySpec(null); 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("expected NullPointerException"); 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) { 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // ok 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Test for <code>getEncoded()</code> method<br> 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Assertion: returns encoded key 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final void testGetEncoded() { 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] encodedKey = new byte[] {(byte)1,(byte)2,(byte)3,(byte)4}; 66f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project PKCS8EncodedKeySpec meks = new PKCS8EncodedKeySpec(encodedKey); 68f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] ek = meks.getEncoded(); 70f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue(Arrays.equals(encodedKey, ek)); 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 73f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Test for <code>getFormat()</code> method 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Assertion: returns format name (always "PKCS#8") 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final void testGetFormat() { 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] encodedKey = new byte[] {(byte)1,(byte)2,(byte)3,(byte)4}; 80f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project PKCS8EncodedKeySpec meks = new PKCS8EncodedKeySpec(encodedKey); 82f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("PKCS#8", meks.getFormat()); 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 85f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Tests that internal state of the object 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * can not be changed by modifying initial 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * array value 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final void testIsStatePreserved1() { 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Reference array 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] encodedKey = new byte[] {(byte)1,(byte)2,(byte)3,(byte)4}; 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Reference array's copy will be used for test 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] encodedKeyCopy = encodedKey.clone(); 96f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project PKCS8EncodedKeySpec meks = new PKCS8EncodedKeySpec(encodedKeyCopy); 98f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Modify initial array's value 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project encodedKeyCopy[3] = (byte)5; 101f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Get encoded key 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] ek = meks.getEncoded(); 104f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Check using reference array that 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // byte value has not been changed 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue(Arrays.equals(encodedKey, ek)); 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 109f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Tests that internal state of the object 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * can not be modified using returned value 113f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * of <code>getEncoded()</code> method 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final void testIsStatePreserved2() { 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Reference array 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] encodedKey = new byte[] {(byte)1,(byte)2,(byte)3,(byte)4}; 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Reference array's copy will be used for test 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] encodedKeyCopy = encodedKey.clone(); 120f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project PKCS8EncodedKeySpec meks = new PKCS8EncodedKeySpec(encodedKeyCopy); 122f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 123f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes byte[] ek = meks.getEncoded(); 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Modify returned array 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ek[3] = (byte)5; 127f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Get encoded key again 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] ek1 = meks.getEncoded(); 130f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Check using reference array that 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // byte value has not been changed 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue(Arrays.equals(encodedKey, ek1)); 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 137