1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * contributor license agreements. See the NOTICE file distributed with this 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * work for additional information regarding copyright ownership. The ASF 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * licenses this file to You under the Apache License, Version 2.0 (the 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "License"); you may not use this file except in compliance with the License. 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * You may obtain a copy of the License at 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * License for the specific language governing permissions and limitations under 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the License. 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/** 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @author Alexander Y. Kleymenov 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @version $Revision$ 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage org.apache.harmony.crypto.tests.javax.crypto; 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestLevel; 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetClass; 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetNew; 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport junit.framework.TestCase; 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.ByteArrayInputStream; 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.ByteArrayOutputStream; 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.IOException; 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.ObjectInputStream; 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.ObjectOutputStream; 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.Serializable; 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.InvalidKeyException; 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.Key; 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.NoSuchProviderException; 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Arrays; 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.crypto.Cipher; 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.crypto.IllegalBlockSizeException; 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.crypto.KeyGenerator; 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.crypto.NullCipher; 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.crypto.SealedObject; 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.crypto.spec.IvParameterSpec; 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.crypto.spec.SecretKeySpec; 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@TestTargetClass(SealedObject.class) 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/** 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class SealedObjectTest extends TestCase { 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project class Mock_SealedObject extends SealedObject { 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Mock_SealedObject(Serializable object, Cipher c) 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws IOException, IllegalBlockSizeException { 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super(object, c); 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public byte[] get_encodedParams() { 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return super.encodedParams; 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * readObject(ObjectInputStream s) method testing. Tests if the 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * serialization/deserialization works correctly: object is serialized, 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * deserialized, the content od deserialized object equals to the content of 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * initial object. 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "!Serialization", 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {} 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void testReadObject() throws Exception { 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String secret = "secret string"; 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SealedObject so = new SealedObject(secret, new NullCipher()); 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ByteArrayOutputStream bos = new ByteArrayOutputStream(); 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ObjectOutputStream oos = new ObjectOutputStream(bos); 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project oos.writeObject(so); 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream( 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bos.toByteArray())); 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SealedObject so_des = (SealedObject) ois.readObject(); 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertEquals("The secret content of deserialized object " 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project + "should be equal to the secret content of initial object", 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project secret, so_des.getObject(new NullCipher())); 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertEquals("The value returned by getAlgorithm() method of " 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project + "deserialized object should be equal to the value returned " 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project + "by getAlgorithm() method of initial object", so 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .getAlgorithm(), so_des.getAlgorithm()); 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * SealedObject(Serializable object, Cipher c) method testing. Tests if the 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * NullPointerException is thrown in the case of null cipher. 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "SealedObject", 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.io.Serializable.class, javax.crypto.Cipher.class} 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void testSealedObject1() throws Exception { 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String secret = "secret string"; 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new SealedObject(secret, null); 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("NullPointerException should be thrown in the case " 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project + "of null cipher."); 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (NullPointerException e) { 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project KeyGenerator kg = KeyGenerator.getInstance("DES"); 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Key key = kg.generateKey(); 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project IvParameterSpec ips = new IvParameterSpec(new byte[] { 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1, 2, 3, 4, 5, 6, 7, 8}); 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding"); 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cipher.init(Cipher.ENCRYPT_MODE, key, ips); 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SealedObject so = new SealedObject(secret, cipher); 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cipher = Cipher.getInstance("DES/CBC/NoPadding"); 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cipher.init(Cipher.ENCRYPT_MODE, key, ips); 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new SealedObject(secret, cipher); 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("IllegalBlockSizeException expected"); 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IllegalBlockSizeException e) { 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * SealedObject(SealedObject so) method testing. Tests if the 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * NullPointerException is thrown in the case of null SealedObject. 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "SealedObject", 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {javax.crypto.SealedObject.class} 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void testSealedObject2() throws Exception { 149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new SealedObject(null) {}; 151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("NullPointerException should be thrown in the case " 152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project + "of null SealedObject."); 153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (NullPointerException e) { 154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String secret = "secret string"; 157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher cipher = new NullCipher(); 158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SealedObject so1 = new SealedObject(secret, cipher); 159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SealedObject so2 = new SealedObject(so1) {}; 160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertEquals("The secret content of the object should equals " 162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project + "to the secret content of initial object.", secret, so2 163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .getObject(cipher)); 164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertEquals("The algorithm which was used to seal the object " 165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project + "should be the same as the algorithm used to seal the " 166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project + "initial object", so1.getAlgorithm(), so2.getAlgorithm()); 167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * getAlgorithm() method testing. Tests if the returned value equals to the 171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * corresponding value of Cipher object. 172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "getAlgorithm", 177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {} 178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void testGetAlgorithm() throws Exception { 180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String secret = "secret string"; 181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String algorithm = "DES"; 182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project KeyGenerator kg = KeyGenerator.getInstance(algorithm); 183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Key key = kg.generateKey(); 184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher cipher = Cipher.getInstance(algorithm); 186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cipher.init(Cipher.ENCRYPT_MODE, key); 187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SealedObject so = new SealedObject(secret, cipher); 188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertEquals("The algorithm name should be the same as used " 190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project + "in cipher.", algorithm, so.getAlgorithm()); 191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * getObject(Key key) method testing. Tests if the object sealed with 195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * encryption algorithm and specified parameters can be retrieved by 196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifying the cryptographic key. 197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "Not all exceptions can be checked.", 201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "getObject", 202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.security.Key.class} 203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void testGetObject1() throws Exception { 205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project KeyGenerator kg = KeyGenerator.getInstance("DES"); 206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Key key = kg.generateKey(); 207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project IvParameterSpec ips = new IvParameterSpec(new byte[] { 209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1, 2, 3, 4, 5, 6, 7, 8}); 210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding"); 212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cipher.init(Cipher.ENCRYPT_MODE, key, ips); 213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String secret = "secret string"; 215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Mock_SealedObject so = new Mock_SealedObject(secret, cipher); 216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertEquals("The returned object does not equals to the " 218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project + "original object.", secret, so.getObject(key)); 219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue("The encodedParams field of SealedObject object " 221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project + "should contain the encoded algorithm parameters.", Arrays 222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .equals(so.get_encodedParams(), cipher.getParameters() 223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .getEncoded())); 224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project so.getObject((Key)null); 226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("InvalidKeyException expected"); 227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (InvalidKeyException e) { 228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (NullPointerException e) { 230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //also ok 231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * getObject(Cipher c) method testing. Tests if the proper exception is 236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * thrown in the case of incorrect input parameters and if the object sealed 237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * with encryption algorithm and specified parameters can be retrieved by 238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * specifying the initialized Cipher object. 239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "Not all exceptions can be checked.", 243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "getObject", 244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {javax.crypto.Cipher.class} 245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void testGetObject2() throws Exception { 247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new SealedObject("secret string", new NullCipher()) 249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .getObject((Cipher) null); 250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("NullPointerException should be thrown in the case of " 251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project + "null cipher."); 252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (NullPointerException e) { 253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project KeyGenerator kg = KeyGenerator.getInstance("DES"); 256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Key key = kg.generateKey(); 257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project IvParameterSpec ips = new IvParameterSpec(new byte[] { 259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1, 2, 3, 4, 5, 6, 7, 8}); 260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding"); 262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cipher.init(Cipher.ENCRYPT_MODE, key, ips); 263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String secret = "secret string"; 265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SealedObject so = new SealedObject(secret, cipher); 266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cipher.init(Cipher.DECRYPT_MODE, key, ips); 268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertEquals("The returned object does not equals to the " 269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project + "original object.", secret, so.getObject(cipher)); 270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project so.getObject((Cipher)null); 273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("NullPointerException expected"); 274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (NullPointerException e) { 275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * getObject(Key key, String provider) method testing. Tests if the proper 281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * exception is thrown in the case of incorrect input parameters and if the 282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * object sealed with encryption algorithm can be retrieved by specifying 283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the cryptographic key and provider name. 284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "Not all exceptions can be checked.", 288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "getObject", 289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.security.Key.class, java.lang.String.class} 290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void testGetObject3() throws Exception { 292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new SealedObject("secret string", new NullCipher()).getObject( 294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new SecretKeySpec(new byte[] {0, 0, 0}, "algorithm"), null); 295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("IllegalArgumentException should be thrown in the case of " 296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project + "null provider."); 297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IllegalArgumentException e) { 298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new SealedObject("secret string", new NullCipher()).getObject( 302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new SecretKeySpec(new byte[] {0, 0, 0}, "algorithm"), ""); 303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("IllegalArgumentException should be thrown in the case of " 304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project + "empty provider."); 305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IllegalArgumentException e) { 306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project KeyGenerator kg = KeyGenerator.getInstance("DES"); 309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Key key = kg.generateKey(); 310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher cipher = Cipher.getInstance("DES"); 312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String provider = cipher.getProvider().getName(); 313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cipher.init(Cipher.ENCRYPT_MODE, key); 314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String secret = "secret string"; 316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SealedObject so = new SealedObject(secret, cipher); 317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cipher.init(Cipher.DECRYPT_MODE, key); 319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertEquals("The returned object does not equals to the " 320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project + "original object.", secret, so.getObject(key, provider)); 321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project kg = KeyGenerator.getInstance("DESede"); 323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project key = kg.generateKey(); 324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project so.getObject(key, provider); 327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("InvalidKeyException expected"); 328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (InvalidKeyException e) { 329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project so.getObject(key, "Wrong provider name"); 334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("NoSuchProviderException expected"); 335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (NoSuchProviderException e) { 336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 341