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 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * this work for additional information regarding copyright ownership. 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (the "License"); you may not use this file except in compliance with 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the License. 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, 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License. 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage org.apache.harmony.crypto.tests.javax.crypto; 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestLevel; 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetClass; 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetNew; 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargets; 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.apache.harmony.crypto.tests.support.MyCipher; 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport tests.support.resource.Support_Resources; 28dafd6348b2e1b46d10e1dbfa64fd2dd44bcfedf2Jesse Wilsonimport tests.util.TestEnvironment; 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.ByteArrayOutputStream; 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.File; 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.IOException; 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.InputStream; 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.math.BigInteger; 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.net.MalformedURLException; 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.net.URL; 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.nio.ByteBuffer; 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.nio.ReadOnlyBufferException; 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.AlgorithmParameters; 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.InvalidAlgorithmParameterException; 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.InvalidKeyException; 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.Key; 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.NoSuchAlgorithmException; 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.NoSuchProviderException; 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.Provider; 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.SecureRandom; 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.Security; 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.cert.Certificate; 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.cert.CertificateException; 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.cert.CertificateFactory; 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.spec.AlgorithmParameterSpec; 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.spec.RSAKeyGenParameterSpec; 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Arrays; 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.crypto.BadPaddingException; 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.crypto.Cipher; 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.crypto.CipherSpi; 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.crypto.IllegalBlockSizeException; 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.crypto.KeyGenerator; 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.crypto.NoSuchPaddingException; 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.crypto.SecretKeyFactory; 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.crypto.ShortBufferException; 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.crypto.spec.DESedeKeySpec; 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.crypto.spec.IvParameterSpec; 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@TestTargetClass(Cipher.class) 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class CipherTest extends junit.framework.TestCase { 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static Key cipherKey; 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static final String algorithm = "DESede"; 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static final int keyLen = 168; 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static Key cipherKeyDES; 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static final String algorithmDES = "DES"; 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static final int keyLenDES = 56; 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static { 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project KeyGenerator kg = KeyGenerator.getInstance(algorithm); 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project kg.init(keyLen, new SecureRandom()); 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cipherKey = kg.generateKey(); 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project kg = KeyGenerator.getInstance(algorithmDES); 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project kg.init(keyLenDES, new SecureRandom()); 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cipherKeyDES = kg.generateKey(); 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (Exception e) { 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("No key " + e); 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 90dafd6348b2e1b46d10e1dbfa64fd2dd44bcfedf2Jesse Wilson 91dafd6348b2e1b46d10e1dbfa64fd2dd44bcfedf2Jesse Wilson @Override protected void setUp() throws Exception { 92dafd6348b2e1b46d10e1dbfa64fd2dd44bcfedf2Jesse Wilson super.setUp(); 93dafd6348b2e1b46d10e1dbfa64fd2dd44bcfedf2Jesse Wilson TestEnvironment.reset(); 94dafd6348b2e1b46d10e1dbfa64fd2dd44bcfedf2Jesse Wilson } 95dafd6348b2e1b46d10e1dbfa64fd2dd44bcfedf2Jesse Wilson 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @tests javax.crypto.Cipher#getInstance(java.lang.String) 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargets({ 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "getInstance", 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.lang.String.class} 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ), 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project clazz = CipherSpi.class, 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "engineSetMode", 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.lang.String.class} 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ), 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project clazz = CipherSpi.class, 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "engineSetPadding", 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.lang.String.class} 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }) 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_getInstanceLjava_lang_String() throws Exception { 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding"); 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertNotNull("Received a null Cipher instance", cipher); 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher.getInstance("WrongAlgorithmName"); 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("NoSuchAlgorithmException expected"); 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (NoSuchAlgorithmException e) { 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// RI throws NoSuchAlgorithmException for wrong padding. 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @tests javax.crypto.Cipher#getInstance(java.lang.String, 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * java.lang.String) 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargets({ 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "getInstance", 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.lang.String.class, java.lang.String.class} 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ), 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project clazz = CipherSpi.class, 149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "engineSetMode", 150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.lang.String.class} 151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ), 152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project clazz = CipherSpi.class, 156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "engineSetPadding", 157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.lang.String.class} 158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }) 160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_getInstanceLjava_lang_StringLjava_lang_String() 161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws Exception { 162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Provider[] providers = Security.getProviders("Cipher.DES"); 164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertNotNull("No installed providers support Cipher.DES", providers); 166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = 0; i < providers.length; i++) { 168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher cipher = Cipher.getInstance("DES", providers[i].getName()); 169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertNotNull("Cipher.getInstance() returned a null value", cipher); 170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Exception case 172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cipher = Cipher.getInstance("DoBeDoBeDo", providers[i]); 174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("Should have thrown an NoSuchAlgorithmException"); 175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (NoSuchAlgorithmException e) { 176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Expected 177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Exception case 181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher.getInstance("DES", (String) null); 183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("Should have thrown an IllegalArgumentException"); 184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IllegalArgumentException e) { 185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Expected 186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Exception case 189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher.getInstance("DES", "IHaveNotBeenConfigured"); 191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("Should have thrown an NoSuchProviderException"); 192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (NoSuchProviderException e) { 193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Expected 194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// RI throws NoSuchAlgorithmException for wrong padding. 196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @tests javax.crypto.Cipher#getInstance(java.lang.String, 200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * java.security.Provider) 201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargets({ 203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "getInstance", 207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.lang.String.class, java.security.Provider.class} 208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ), 209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project clazz = CipherSpi.class, 213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "engineSetMode", 214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.lang.String.class} 215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ), 216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project clazz = CipherSpi.class, 220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "engineSetPadding", 221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.lang.String.class} 222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }) 224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_getInstanceLjava_lang_StringLjava_security_Provider() 225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws Exception { 226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Provider[] providers = Security.getProviders("Cipher.DES"); 228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertNotNull("No installed providers support Cipher.DES", providers); 230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = 0; i < providers.length; i++) { 232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher cipher = Cipher.getInstance("DES", providers[i]); 233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertNotNull("Cipher.getInstance() returned a null value", cipher); 234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Exception case 237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher.getInstance("DES", (Provider) null); 239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("Should have thrown an IllegalArgumentException"); 240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IllegalArgumentException e) { 241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Expected 242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Exception case 245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher.getInstance("WrongAlg", providers[0]); 247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("NoSuchAlgorithmException expected"); 248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (NoSuchAlgorithmException e) { 249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Expected 250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// RI throws NoSuchAlgorithmException for wrong padding. 252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @tests javax.crypto.Cipher#getProvider() 256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "getProvider", 261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {} 262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_getProvider() throws Exception { 264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Provider[] providers = Security.getProviders("Cipher.AES"); 266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertNotNull("No providers support Cipher.AES", providers); 268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = 0; i < providers.length; i++) { 270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Provider provider = providers[i]; 271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher cipher = Cipher.getInstance("AES", provider.getName()); 272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Provider cipherProvider = cipher.getProvider(); 273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue("Cipher provider is not the same as that " 274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project + "provided as parameter to getInstance()", cipherProvider 275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .equals(provider)); 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 * @tests javax.crypto.Cipher#getAlgorithm() 281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "getAlgorithm", 286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {} 287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_getAlgorithm() throws Exception { 289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project final String algorithm = "DESede/CBC/PKCS5Padding"; 290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher cipher = Cipher.getInstance(algorithm); 292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue("Cipher algorithm does not match", cipher.getAlgorithm() 293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .equals(algorithm)); 294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @tests javax.crypto.Cipher#getBlockSize() 298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargets({ 300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "getBlockSize", 304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {} 305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ), 306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project clazz = CipherSpi.class, 310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "engineGetBlockSize", 311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {} 312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }) 314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_getBlockSize() throws Exception { 315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project final String algorithm = "DESede/CBC/PKCS5Padding"; 316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher cipher = Cipher.getInstance(algorithm); 318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertEquals("Block size does not match", 8, cipher.getBlockSize()); 319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @tests javax.crypto.Cipher#getOutputSize(int) 323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargets({ 325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "getOutputSize", 329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {int.class} 330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ), 331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project clazz = CipherSpi.class, 335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "engineGetOutputSize", 336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {int.class} 337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }) 339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_getOutputSizeI() throws Exception { 340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SecureRandom sr = new SecureRandom(); 342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher cipher = Cipher.getInstance(algorithm + "/ECB/PKCS5Padding"); 343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cipher.getOutputSize(25); 346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("IllegalStateException expected"); 347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IllegalStateException e) { 348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cipher.init(Cipher.ENCRYPT_MODE, cipherKey, sr); 352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // A 25-byte input could result in at least 4 8-byte blocks 354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int result = cipher.getOutputSize(25); 355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue("Output size too small", result > 31); 356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // A 8-byte input should result in 2 8-byte blocks 358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project result = cipher.getOutputSize(8); 359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue("Output size too small", result > 15); 360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @tests javax.crypto.Cipher#init(int, java.security.Key) 364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "init", 369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {int.class, java.security.Key.class} 370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_initILjava_security_Key() throws Exception { 372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher cipher = Cipher.getInstance(algorithm + "/ECB/PKCS5Padding"); 373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cipher.init(Cipher.ENCRYPT_MODE, cipherKey); 374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cipher = Cipher.getInstance("DES/CBC/NoPadding"); 377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cipher.init(Cipher.ENCRYPT_MODE, cipherKey); 379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("InvalidKeyException expected"); 380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (InvalidKeyException e) { 381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @tests javax.crypto.Cipher#init(int, java.security.Key, 387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * java.security.SecureRandom) 388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargets({ 390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "init", 394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {int.class, java.security.Key.class, java.security.SecureRandom.class} 395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ), 396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project clazz = CipherSpi.class, 400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "engineInit", 401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {int.class, java.security.Key.class, java.security.SecureRandom.class} 402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }) 404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_initILjava_security_KeyLjava_security_SecureRandom() 405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws Exception { 406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SecureRandom sr = new SecureRandom(); 407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher cipher = Cipher.getInstance(algorithm + "/ECB/PKCS5Padding"); 408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cipher.init(Cipher.ENCRYPT_MODE, cipherKey, sr); 409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cipher = Cipher.getInstance("DES/CBC/NoPadding"); 411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cipher.init(Cipher.ENCRYPT_MODE, cipherKey, sr); 413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("InvalidKeyException expected"); 414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (InvalidKeyException e) { 415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @tests javax.crypto.Cipher#init(int, java.security.Key, 421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * java.security.spec.AlgorithmParameterSpec) 422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "init", 427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {int.class, java.security.Key.class, java.security.spec.AlgorithmParameterSpec.class} 428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_initILjava_security_KeyLjava_security_spec_AlgorithmParameterSpec() 430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws Exception { 431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SecureRandom sr = new SecureRandom(); 432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher cipher = null; 433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] iv = null; 435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AlgorithmParameterSpec ap = null; 436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project iv = new byte[8]; 438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sr.nextBytes(iv); 439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ap = new IvParameterSpec(iv); 440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cipher = Cipher.getInstance(algorithm + "/CBC/PKCS5Padding"); 442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cipher.init(Cipher.ENCRYPT_MODE, cipherKey, ap); 444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] cipherIV = cipher.getIV(); 446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue("IVs differ", Arrays.equals(cipherIV, iv)); 448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cipher = Cipher.getInstance("DES/CBC/NoPadding"); 450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cipher.init(Cipher.ENCRYPT_MODE, cipherKey, ap); 452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("InvalidKeyException expected"); 453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (InvalidKeyException e) { 454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cipher = Cipher.getInstance("DES/CBC/NoPadding"); 458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ap = new RSAKeyGenParameterSpec(10, new BigInteger("10")); 459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cipher.init(Cipher.ENCRYPT_MODE, cipherKeyDES, ap); 462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("InvalidAlgorithmParameterException expected"); 463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (InvalidAlgorithmParameterException e) { 464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @tests javax.crypto.Cipher#init(int, java.security.Key, 470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * java.security.spec.AlgorithmParameterSpec, 471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * java.security.SecureRandom) 472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargets({ 474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "init", 478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {int.class, java.security.Key.class, java.security.spec.AlgorithmParameterSpec.class, java.security.SecureRandom.class} 479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ), 480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project clazz = CipherSpi.class, 484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "engineInit", 485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {int.class, java.security.Key.class, java.security.spec.AlgorithmParameterSpec.class, java.security.SecureRandom.class} 486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }) 488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_initILjava_security_KeyLjava_security_spec_AlgorithmParameterSpecLjava_security_SecureRandom() 489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws Exception { 490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SecureRandom sr = new SecureRandom(); 491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher cipher = null; 492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] iv = null; 494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AlgorithmParameterSpec ap = null; 495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project iv = new byte[8]; 497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sr.nextBytes(iv); 498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ap = new IvParameterSpec(iv); 499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cipher = Cipher.getInstance(algorithm + "/CBC/PKCS5Padding"); 501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cipher.init(Cipher.ENCRYPT_MODE, cipherKey, ap, sr); 503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] cipherIV = cipher.getIV(); 505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue("IVs differ", Arrays.equals(cipherIV, iv)); 507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cipher = Cipher.getInstance("DES/CBC/NoPadding"); 508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cipher.init(Cipher.ENCRYPT_MODE, cipherKey, ap, sr); 510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("InvalidKeyException expected"); 511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (InvalidKeyException e) { 512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cipher = Cipher.getInstance("DES/CBC/NoPadding"); 516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ap = new RSAKeyGenParameterSpec(10, new BigInteger("10")); 517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cipher.init(Cipher.ENCRYPT_MODE, cipherKeyDES, ap, sr); 520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("InvalidAlgorithmParameterException expected"); 521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (InvalidAlgorithmParameterException e) { 522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @tests javax.crypto.Cipher#update(byte[], int, int) 528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargets({ 530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "update", 534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {byte[].class, int.class, int.class} 535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ), 536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project clazz = CipherSpi.class, 540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "engineUpdate", 541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {byte[].class, int.class, int.class} 542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }) 544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_update$BII() throws Exception { 545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int index = 1; index < 4; index++) { 546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher c = Cipher.getInstance("DESEDE/CBC/PKCS5Padding"); 547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] keyMaterial = loadBytes("hyts_" + "des-ede3-cbc.test" 549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project + index + ".key"); 550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project DESedeKeySpec keySpec = new DESedeKeySpec(keyMaterial); 551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SecretKeyFactory skf = SecretKeyFactory.getInstance("DESEDE"); 552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Key k = skf.generateSecret(keySpec); 553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] ivMaterial = loadBytes("hyts_" + "des-ede3-cbc.test" + index 555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project + ".iv"); 556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project IvParameterSpec iv = new IvParameterSpec(ivMaterial); 557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.DECRYPT_MODE, k, iv); 559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ByteArrayOutputStream baos = new ByteArrayOutputStream(); 561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] input = new byte[256]; 562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String resPath = "hyts_" + "des-ede3-cbc.test" + index 563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project + ".ciphertext"; 564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project File resources = Support_Resources.createTempFolder(); 565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Support_Resources.copyFile(resources, null, resPath); 566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project InputStream is = Support_Resources.getStream(resPath); 567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int bytesRead = is.read(input, 0, 256); 569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (bytesRead > 0) { 570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] output = c.update(input, 0, bytesRead); 571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (output != null) { 572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project baos.write(output); 573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bytesRead = is.read(input, 0, 256); 575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] output = c.doFinal(); 578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (output != null) { 579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project baos.write(output); 580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] decipheredCipherText = baos.toByteArray(); 583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project is.close(); 584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] plaintextBytes = loadBytes("hyts_" + "des-ede3-cbc.test" 586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project + index + ".plaintext"); 587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue("Operation produced incorrect results", Arrays.equals( 588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project plaintextBytes, decipheredCipherText)); 589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }// end for 590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher cipher = Cipher.getInstance("DESEDE/CBC/PKCS5Padding"); 592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cipher.update(new byte[64], 0, 32); 594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("IllegalStateException expected"); 595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IllegalStateException e) { 596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @tests javax.crypto.Cipher#doFinal() 602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "doFinal", 607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {} 608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_doFinal() throws Exception { 610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int index = 1; index < 4; index++) { 611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher c = Cipher.getInstance("DESEDE/CBC/PKCS5Padding"); 612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] keyMaterial = loadBytes("hyts_" + "des-ede3-cbc.test" 614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project + index + ".key"); 615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project DESedeKeySpec keySpec = new DESedeKeySpec(keyMaterial); 616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SecretKeyFactory skf = SecretKeyFactory.getInstance("DESEDE"); 617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Key k = skf.generateSecret(keySpec); 618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] ivMaterial = loadBytes("hyts_" + "des-ede3-cbc.test" + index 620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project + ".iv"); 621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project IvParameterSpec iv = new IvParameterSpec(ivMaterial); 622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.ENCRYPT_MODE, k, iv); 624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ByteArrayOutputStream baos = new ByteArrayOutputStream(); 626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] input = new byte[256]; 627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String resPath = "hyts_" + "des-ede3-cbc.test" + index 628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project + ".plaintext"; 629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project File resources = Support_Resources.createTempFolder(); 630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Support_Resources.copyFile(resources, null, resPath); 631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project InputStream is = Support_Resources.getStream(resPath); 632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int bytesRead = is.read(input, 0, 256); 634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (bytesRead > 0) { 635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] output = c.update(input, 0, bytesRead); 636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (output != null) { 637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project baos.write(output); 638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bytesRead = is.read(input, 0, 256); 640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] output = c.doFinal(); 642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (output != null) { 643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project baos.write(output); 644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] encryptedPlaintext = baos.toByteArray(); 646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project is.close(); 647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] cipherText = loadBytes("hyts_" + "des-ede3-cbc.test" + index 649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project + ".ciphertext"); 650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue("Operation produced incorrect results", Arrays.equals( 651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project encryptedPlaintext, cipherText)); 652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }// end for 653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] b = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}; 655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] b1 = new byte[30]; 656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher c = Cipher.getInstance("DES/CBC/NoPadding"); 658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.ENCRYPT_MODE, cipherKeyDES); 659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.update(b, 0, 10, b1, 5); 660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.doFinal(); 662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("IllegalBlockSizeException expected"); 663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IllegalBlockSizeException e) { 664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c = Cipher.getInstance("DES/CBC/NoPadding"); 668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.doFinal(); 670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("IllegalStateException expected"); 671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IllegalStateException e) { 672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c = Cipher.getInstance("DES/CBC/NoPadding"); 676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.ENCRYPT_MODE, cipherKeyDES); 677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.doFinal(b, 0, 16, b1, 0); 678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SecureRandom sr = new SecureRandom(); 680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] iv = new byte[8]; 681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sr.nextBytes(iv); 682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AlgorithmParameterSpec ap = new IvParameterSpec(iv); 683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c = Cipher.getInstance("DES/CBC/PKCS5Padding"); 685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.DECRYPT_MODE, cipherKeyDES, ap); 686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.update(b1, 0, 24, b, 0); 688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.doFinal(); 690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("BadPaddingException expected"); 691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (BadPaddingException e) { 692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private byte[] loadBytes(String resPath) { 697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project File resources = Support_Resources.createTempFolder(); 699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Support_Resources.copyFile(resources, null, resPath); 700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project InputStream is = Support_Resources.getStream(resPath); 701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ByteArrayOutputStream out = new ByteArrayOutputStream(); 703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] buff = new byte[1024]; 704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int readlen; 705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while ((readlen = is.read(buff)) > 0) { 706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project out.write(buff, 0, readlen); 707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project is.close(); 709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return out.toByteArray(); 710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IOException e) { 711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return null; 712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargets({ 716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "getParameters", 720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {} 721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ), 722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project clazz = CipherSpi.class, 726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "engineGetParameters", 727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {} 728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }) 730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void testGetParameters() throws Exception { 731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher c = Cipher.getInstance("DES"); 732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertNull(c.getParameters()); 733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Class under test for int update(byte[], int, int, byte[], int) 737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargets({ 739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "update", 743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {byte[].class, int.class, int.class, byte[].class, int.class} 744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ), 745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project clazz = CipherSpi.class, 749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "engineUpdate", 750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {byte[].class, int.class, int.class, byte[].class, int.class} 751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }) 753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void testUpdatebyteArrayintintbyteArrayint() throws Exception { 754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] b = {1,2,3,4,5,6,7,8,9,10}; 755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] b1 = new byte[6]; 756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher c = Cipher.getInstance("DESede"); 757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.update(b, 0, 10, b1, 5); 760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("IllegalStateException expected"); 761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IllegalStateException e) { 762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.ENCRYPT_MODE, cipherKey); 766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.update(b, 0, 10, b1, 5); 768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("ShortBufferException expected"); 769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (ShortBufferException e) { 770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b1 = new byte[30]; 774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.update(b, 0, 10, b1, 5); 775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Class under test for int doFinal(byte[], int, int, byte[], int) 779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargets({ 781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "doFinal", 785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {byte[].class, int.class, int.class, byte[].class, int.class} 786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ), 787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project clazz = CipherSpi.class, 791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "engineDoFinal", 792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {byte[].class, int.class, int.class, byte[].class, int.class} 793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }) 795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void testDoFinalbyteArrayintintbyteArrayint() throws Exception { 796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] b = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}; 797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] b1 = new byte[30]; 798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher c = Cipher.getInstance("DES/CBC/NoPadding"); 800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.ENCRYPT_MODE, cipherKeyDES); 801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.doFinal(b, 0, 10, b1, 5); 803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("IllegalBlockSizeException expected"); 804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IllegalBlockSizeException e) { 805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c = Cipher.getInstance("DES/CBC/NoPadding"); 809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.doFinal(b, 0, 10, b1, 5); 811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("IllegalStateException expected"); 812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IllegalStateException e) { 813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c = Cipher.getInstance("DES/CBC/NoPadding"); 817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.ENCRYPT_MODE, cipherKeyDES); 818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.doFinal(b, 0, 16, b1, 0); 819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SecureRandom sr = new SecureRandom(); 821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] iv = new byte[8]; 822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sr.nextBytes(iv); 823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AlgorithmParameterSpec ap = new IvParameterSpec(iv); 824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c = Cipher.getInstance("DES/CBC/PKCS5Padding"); 826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.DECRYPT_MODE, cipherKeyDES, ap); 827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.doFinal(b1, 0, 24, new byte[42], 0); 830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("BadPaddingException expected"); 831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (BadPaddingException e) { 832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b1 = new byte[6]; 836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c = Cipher.getInstance("DESede"); 837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.ENCRYPT_MODE, cipherKey); 838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.doFinal(b, 3, 6, b1, 5); 840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("No expected ShortBufferException"); 841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (ShortBufferException e) { 842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "getMaxAllowedKeyLength", 850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.lang.String.class} 851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void testGetMaxAllowedKeyLength() throws NoSuchAlgorithmException { 853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher.getMaxAllowedKeyLength(null); 855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("No expected NullPointerException"); 856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (NullPointerException e) { 857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher.getMaxAllowedKeyLength("//CBC/PKCS5Paddin"); 860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("No expected NoSuchAlgorithmException"); 861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (NoSuchAlgorithmException e) { 862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher.getMaxAllowedKeyLength("/DES/CBC/PKCS5Paddin/1"); 865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("No expected NoSuchAlgorithmException"); 866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (NoSuchAlgorithmException e) { 867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue(Cipher.getMaxAllowedKeyLength("/DES/CBC/PKCS5Paddin") > 0); 869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "getMaxAllowedParameterSpec", 875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.lang.String.class} 876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void testGetMaxAllowedParameterSpec() 878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws NoSuchAlgorithmException, Exception { 879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher.getMaxAllowedParameterSpec(null); 881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("No expected NullPointerException"); 882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (NullPointerException e) { 883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher.getMaxAllowedParameterSpec("/DES//PKCS5Paddin"); 886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("No expected NoSuchAlgorithmException"); 887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (NoSuchAlgorithmException e) { 888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher.getMaxAllowedParameterSpec("/DES/CBC/ /1"); 891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("No expected NoSuchAlgorithmException"); 892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (NoSuchAlgorithmException e) { 893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher.getMaxAllowedParameterSpec("DES/CBC/PKCS5Paddin"); 895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher.getMaxAllowedParameterSpec("RSA"); 896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @tests javax.crypto.Cipher#Cipher(CipherSpi cipherSpi, Provider provider, 900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * String transformation) 901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "Cipher", 906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {javax.crypto.CipherSpi.class, java.security.Provider.class, java.lang.String.class} 907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_Ctor() throws Exception { 909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Regression for Harmony-1184 910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new testCipher(null, null, "s"); 912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("NullPointerException expected"); 913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (NullPointerException e) { 914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // expected 915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new testCipher(new MyCipher(), null, "s"); 919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("NullPointerException expected for 'null' provider"); 920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (NullPointerException e) { 921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // expected 922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new testCipher(null, new Provider("qwerty", 1.0, "qwerty") {}, "s"); 926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("NullPointerException expected for 'null' cipherSpi"); 927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (NullPointerException e) { 928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // expected 929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargets({ 933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "doFinal", 937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.nio.ByteBuffer.class, java.nio.ByteBuffer.class} 938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ), 939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project clazz = CipherSpi.class, 943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "engineDoFinal", 944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.nio.ByteBuffer.class, java.nio.ByteBuffer.class} 945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }) 947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_doFinalLjava_nio_ByteBufferLjava_nio_ByteBuffer () 948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws NoSuchAlgorithmException, NoSuchPaddingException, 949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project InvalidKeyException, ShortBufferException, BadPaddingException, 950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project IllegalBlockSizeException, InvalidAlgorithmParameterException { 951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] b = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}; 952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ByteBuffer bInput = ByteBuffer.allocate(64); 953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ByteBuffer bOutput = ByteBuffer.allocate(64); 954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher c = Cipher.getInstance("DES/CBC/NoPadding"); 956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.ENCRYPT_MODE, cipherKeyDES); 957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bInput.put(b, 0, 10); 958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.doFinal(bInput, bOutput); 960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("IllegalBlockSizeException expected"); 961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IllegalBlockSizeException e) { 962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c = Cipher.getInstance("DES/CBC/NoPadding"); 966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.doFinal(bInput, bOutput); 968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("IllegalStateException expected"); 969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IllegalStateException e) { 970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c = Cipher.getInstance("DES/CBC/NoPadding"); 974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.ENCRYPT_MODE, cipherKeyDES); 975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bInput = ByteBuffer.allocate(16); 976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bInput.put(b, 0, 16); 977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.doFinal(bInput, bOutput); 978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SecureRandom sr = new SecureRandom(); 980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] iv = new byte[8]; 981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sr.nextBytes(iv); 982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AlgorithmParameterSpec ap = new IvParameterSpec(iv); 983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c = Cipher.getInstance("DES/CBC/PKCS5Padding"); 985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.DECRYPT_MODE, cipherKeyDES, ap); 986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bInput = ByteBuffer.allocate(64); 987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.doFinal(bOutput, bInput); 990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("BadPaddingException expected"); 991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (BadPaddingException e) { 992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c = Cipher.getInstance("DES/CBC/NoPadding"); 996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.ENCRYPT_MODE, cipherKeyDES); 997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bInput.put(b, 0, 16); 998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.doFinal(bInput, bInput); 1000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("IllegalArgumentException expected"); 1001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IllegalArgumentException e) { 1002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 1003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c = Cipher.getInstance("DES/CBC/NoPadding"); 1006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.ENCRYPT_MODE, cipherKeyDES); 1007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bInput.put(b, 0, 16); 1008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 1009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.doFinal(bInput, bOutput.asReadOnlyBuffer()); 1010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("ReadOnlyBufferException expected"); 1011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (ReadOnlyBufferException e) { 1012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 1013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bInput.rewind(); 1016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bInput.put(b, 0, 16); 1017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bOutput = ByteBuffer.allocate(8); 1018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c = Cipher.getInstance("DESede"); 1019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.ENCRYPT_MODE, cipherKey); 1020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 1021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.doFinal(bInput, bOutput); 1022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("No expected ShortBufferException"); 1023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (ShortBufferException e) { 1024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 1025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 1029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 1030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 1031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "init", 1032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {int.class, java.security.Key.class, java.security.AlgorithmParameters.class} 1033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 1034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_initILjava_security_KeyLjava_security_AlgorithmParameters () 1035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, 1036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project InvalidAlgorithmParameterException { 1037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SecureRandom sr = new SecureRandom(); 1038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] iv = new byte[8]; 1039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sr.nextBytes(iv); 1040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AlgorithmParameterSpec ap = new IvParameterSpec(iv); 1041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher c = Cipher.getInstance("DES/CBC/PKCS5Padding"); 1043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.DECRYPT_MODE, cipherKeyDES, ap); 1044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertNotNull(c.getParameters()); 1045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 1047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.DECRYPT_MODE, cipherKey, ap); 1048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("InvalidKeyException e"); 1049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (InvalidKeyException e) { 1050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 1051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 1054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.DECRYPT_MODE, cipherKeyDES, (AlgorithmParameters)null); 1055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("InvalidAlgorithmParameterException e"); 1056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (InvalidAlgorithmParameterException e) { 1057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 1058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargets({ 1062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 1063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 1064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 1065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "init", 1066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {int.class, java.security.Key.class, java.security.AlgorithmParameters.class, java.security.SecureRandom.class} 1067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ), 1068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 1069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 1070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 1071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project clazz = CipherSpi.class, 1072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "engineInit", 1073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {int.class, java.security.Key.class, java.security.AlgorithmParameters.class, java.security.SecureRandom.class} 1074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 1075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }) 1076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_initILjava_security_KeyLjava_security_AlgorithmParametersLjava_security_SecureRandom () 1077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, 1078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project InvalidAlgorithmParameterException { 1079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SecureRandom sr = new SecureRandom(); 1080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] iv = new byte[8]; 1081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sr.nextBytes(iv); 1082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AlgorithmParameterSpec ap = new IvParameterSpec(iv); 1083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher c = Cipher.getInstance("DES/CBC/PKCS5Padding"); 1085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.DECRYPT_MODE, cipherKeyDES, ap, sr); 1086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertNotNull(c.getParameters()); 1087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 1089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.DECRYPT_MODE, cipherKey, ap, new SecureRandom()); 1090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("InvalidKeyException e"); 1091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (InvalidKeyException e) { 1092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 1093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 1096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.DECRYPT_MODE, cipherKeyDES, (AlgorithmParameters)null, sr); 1097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("InvalidAlgorithmParameterException e"); 1098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (InvalidAlgorithmParameterException e) { 1099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 1100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.DECRYPT_MODE, cipherKeyDES, ap, (SecureRandom)null); 1103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertNotNull(c.getParameters()); 1104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 1107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 1108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 1109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "init", 1110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {int.class, java.security.cert.Certificate.class} 1111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 1112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_initILjava_security_cert_Certificate () 1113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws MalformedURLException, IOException, CertificateException, 1114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException { 1115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Certificate creation notes: certificate should be valid 37273 starting 1117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * from 13 Nov 2008 1118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If it brcomes invalidated regenerate it using following commands: 1119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1. openssl genrsa -des3 -out test.key 1024 1120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2. openssl req -new -key test.key -out test.csr 1121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3. cp test.key test.key.org 1122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4. openssl rsa -in test.key.org -out test.key 1123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5. openssl x509 -req -days 37273 -in test.csr -signkey test.key -out test.cert 1124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * */ 1125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String certName = Support_Resources.getURL("test.cert"); 1127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project InputStream is = new URL(certName).openConnection().getInputStream(); 1128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project CertificateFactory cf = CertificateFactory.getInstance("X.509"); 1129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Certificate cert = cf.generateCertificate(is); 1131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher c = Cipher.getInstance("RSA"); 1133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.ENCRYPT_MODE, cert); 1135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c = Cipher.getInstance("DES/CBC/PKCS5Padding"); 1136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 1137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.ENCRYPT_MODE, cert); 1138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("InvalidKeyException expected"); 1139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (InvalidKeyException e) { 1140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 1141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 1145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 1146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 1147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "init", 1148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {int.class, java.security.cert.Certificate.class, java.security.SecureRandom.class} 1149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 1150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_initILjava_security_cert_Certificate_java_security_SecureRandom () 1151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws MalformedURLException, IOException, CertificateException, 1152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException { 1153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* Certificate creation notes: certificate should be valid 37273 starting 1155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * from 13 Nov 2008 1156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If it brcomes invalidated regenerate it using following commands: 1157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1. openssl genrsa -des3 -out test.key 1024 1158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 2. openssl req -new -key test.key -out test.csr 1159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3. cp test.key test.key.org 1160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4. openssl rsa -in test.key.org -out test.key 1161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5. openssl x509 -req -days 37273 -in test.csr -signkey test.key -out test.cert 1162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * */ 1163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String certName = Support_Resources.getURL("test.cert"); 1165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project InputStream is = new URL(certName).openConnection().getInputStream(); 1166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project CertificateFactory cf = CertificateFactory.getInstance("X.509"); 1167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Certificate cert = cf.generateCertificate(is); 1169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher c = Cipher.getInstance("RSA"); 1171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.ENCRYPT_MODE, cert, new SecureRandom()); 1173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c = Cipher.getInstance("DES/CBC/PKCS5Padding"); 1174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 1175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.ENCRYPT_MODE, cert, new SecureRandom()); 1176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("InvalidKeyException expected"); 1177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (InvalidKeyException e) { 1178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 1179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargets({ 1183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 1184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 1185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 1186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "unwrap", 1187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {byte[].class, java.lang.String.class, int.class} 1188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ), 1189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 1190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 1191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 1192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project clazz = CipherSpi.class, 1193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "engineUnwrap", 1194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {byte[].class, java.lang.String.class, int.class} 1195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 1196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }) 1197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_unwrap$BLjava_lang_StringI () throws NoSuchAlgorithmException, 1198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project NoSuchPaddingException, InvalidKeyException, InvalidAlgorithmParameterException, 1199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project IllegalBlockSizeException { 1200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SecureRandom sr = new SecureRandom(); 1201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] iv = new byte[8]; 1202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sr.nextBytes(iv); 1203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AlgorithmParameterSpec ap = new IvParameterSpec(iv); 1204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher c = Cipher.getInstance("DES/CBC/PKCS5Padding"); 1206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.WRAP_MODE, cipherKeyDES, ap, sr); 1208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] arDES = c.wrap(cipherKeyDES); 1209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] ar = c.wrap(cipherKey); 1210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 1212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.unwrap(arDES, "DES", Cipher.SECRET_KEY); 1213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("IllegalStateException expected"); 1214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IllegalStateException e) { 1215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 1216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.UNWRAP_MODE, cipherKeyDES, ap, sr); 1219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue(cipherKeyDES.equals(c.unwrap(arDES, "DES", Cipher.SECRET_KEY))); 1220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertFalse(cipherKeyDES.equals(c.unwrap(ar, "DES", Cipher.SECRET_KEY))); 1221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 1223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.unwrap(arDES, "RSA38", Cipher.PUBLIC_KEY); 1224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("NoSuchAlgorithmException expected"); 1225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (NoSuchAlgorithmException e) { 1226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 1227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c = Cipher.getInstance("DESede/CBC/PKCS5Padding"); 1230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.UNWRAP_MODE, cipherKey, ap, sr); 1231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 1232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.unwrap(arDES, "DESede", Cipher.SECRET_KEY); 1233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("InvalidKeyException expected"); 1234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (InvalidKeyException e) { 1235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 1236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargets({ 1240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 1241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 1242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 1243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "update", 1244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.nio.ByteBuffer.class, java.nio.ByteBuffer.class} 1245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ), 1246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 1247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 1248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 1249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project clazz = CipherSpi.class, 1250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "engineUpdate", 1251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.nio.ByteBuffer.class, java.nio.ByteBuffer.class} 1252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 1253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }) 1254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_updateLjava_nio_ByteBufferLjava_nio_ByteBuffer () throws 1255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, 1256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ShortBufferException, InvalidAlgorithmParameterException { 1257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] b = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}; 1258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ByteBuffer bInput = ByteBuffer.allocate(256); 1259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ByteBuffer bOutput = ByteBuffer.allocate(256); 1260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher c = Cipher.getInstance("DES/CBC/NoPadding"); 1262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.ENCRYPT_MODE, cipherKeyDES); 1263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bInput.put(b, 0, 10); 1264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bInput.rewind(); 1265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bOutput.rewind(); 1266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.update(bInput, bOutput); 1267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c = Cipher.getInstance("DES/CBC/NoPadding"); 1269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 1270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.update(bInput, bOutput); 1271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("IllegalStateException expected"); 1272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IllegalStateException e) { 1273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 1274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c = Cipher.getInstance("DES/CBC/NoPadding"); 1277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.ENCRYPT_MODE, cipherKeyDES); 1278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bInput = ByteBuffer.allocate(16); 1279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bInput.put(b, 0, 16); 1280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bInput.rewind(); 1281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bOutput.rewind(); 1282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.update(bInput, bOutput); 1283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SecureRandom sr = new SecureRandom(); 1285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] iv = new byte[8]; 1286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sr.nextBytes(iv); 1287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AlgorithmParameterSpec ap = new IvParameterSpec(iv); 1288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c = Cipher.getInstance("DES/CBC/PKCS5Padding"); 1290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.DECRYPT_MODE, cipherKeyDES, ap); 1291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bInput = ByteBuffer.allocate(64); 1292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c = Cipher.getInstance("DES/CBC/NoPadding"); 1294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.ENCRYPT_MODE, cipherKeyDES); 1295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bInput.put(b, 0, 16); 1296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bInput.rewind(); 1297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 1298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.update(bInput, bInput); 1299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("IllegalArgumentException expected"); 1300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IllegalArgumentException e) { 1301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 1302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c = Cipher.getInstance("DES/CBC/NoPadding"); 1305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.ENCRYPT_MODE, cipherKeyDES); 1306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bInput.put(b, 0, 16); 1307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bInput.rewind(); 1308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bOutput.rewind(); 1309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 1310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.update(bInput, bOutput.asReadOnlyBuffer()); 1311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("ReadOnlyBufferException expected"); 1312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (ReadOnlyBufferException e) { 1313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 1314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bInput.rewind(); 1317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bInput.put(b, 0, 16); 1318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bInput.rewind(); 1319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bOutput = ByteBuffer.allocate(8); 1320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c = Cipher.getInstance("DESede"); 1321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.ENCRYPT_MODE, cipherKey); 1322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 1323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.update(bInput, bOutput); 1324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("No expected ShortBufferException"); 1325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (ShortBufferException e) { 1326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 1327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project class Mock_Key implements Key { 1331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String getAlgorithm() { 1332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return null; 1333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public byte[] getEncoded() { 1336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return null; 1337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String getFormat() { 1340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return null; 1341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargets({ 1346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 1347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 1348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 1349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "wrap", 1350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.security.Key.class} 1351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ), 1352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 1353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 1354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 1355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project clazz = CipherSpi.class, 1356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "engineWrap", 1357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.security.Key.class} 1358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 1359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }) 1360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_wrap_java_security_Key () throws NoSuchAlgorithmException, 1361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, 1362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project InvalidAlgorithmParameterException, MalformedURLException, IOException, 1363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project CertificateException { 1364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SecureRandom sr = new SecureRandom(); 1365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] iv = new byte[8]; 1366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sr.nextBytes(iv); 1367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AlgorithmParameterSpec ap = new IvParameterSpec(iv); 1368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher c = Cipher.getInstance("DES/CBC/PKCS5Padding"); 1370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.WRAP_MODE, cipherKeyDES, ap, sr); 1372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertNotNull(c.wrap(cipherKeyDES)); 1373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertNotNull(c.wrap(cipherKey)); 1374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String certName = Support_Resources.getURL("test.cert"); 1375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project InputStream is = new URL(certName).openConnection().getInputStream(); 1376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project CertificateFactory cf = CertificateFactory.getInstance("X.509"); 1377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Certificate cert = cf.generateCertificate(is); 1379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertNotNull(c.wrap(cert.getPublicKey())); 1380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c = Cipher.getInstance("DES/CBC/NoPadding"); 1382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.WRAP_MODE, cipherKeyDES, ap, sr); 1383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 1384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertNotNull(c.wrap(cert.getPublicKey())); 1385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("IllegalBlockSizeException expected"); 1386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IllegalBlockSizeException e) { 1387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 1388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.DECRYPT_MODE, cipherKeyDES, ap, sr); 1391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 1393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.wrap(cipherKeyDES); 1394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("IllegalStateException expected"); 1395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IllegalStateException e) { 1396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 1397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.WRAP_MODE, cipherKeyDES, ap, sr); 1400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 1401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.wrap(new Mock_Key()); 1402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("InvalidKeyException expected"); 1403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (InvalidKeyException e) { 1404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 1405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 1409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 1410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 1411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "doFinal", 1412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {byte[].class, int.class} 1413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 1414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_doFinal$BI() throws Exception { 1415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] b = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}; 1416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] b1 = new byte[30]; 1417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher c = Cipher.getInstance("DES/CBC/NoPadding"); 1419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.ENCRYPT_MODE, cipherKeyDES); 1420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.update(b, 0, 10); 1421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 1422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.doFinal(b1, 5); 1423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("IllegalBlockSizeException expected"); 1424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IllegalBlockSizeException e) { 1425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 1426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c = Cipher.getInstance("DES/CBC/NoPadding"); 1429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 1430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.doFinal(b1, 5); 1431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("IllegalStateException expected"); 1432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IllegalStateException e) { 1433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 1434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c = Cipher.getInstance("DES/CBC/NoPadding"); 1437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.ENCRYPT_MODE, cipherKeyDES); 1438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.update(b, 3, 8); 1439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.doFinal(b1, 0); 1440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SecureRandom sr = new SecureRandom(); 1442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] iv = new byte[8]; 1443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sr.nextBytes(iv); 1444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AlgorithmParameterSpec ap = new IvParameterSpec(iv); 1445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c = Cipher.getInstance("DES/CBC/PKCS5Padding"); 1447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.DECRYPT_MODE, cipherKeyDES, ap); 1448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.update(b1, 0, 24); 1450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 1451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.doFinal(b, 0); 1452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("BadPaddingException expected"); 1453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (BadPaddingException e) { 1454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 1455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b1 = new byte[6]; 1458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c = Cipher.getInstance("DESede"); 1459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.ENCRYPT_MODE, cipherKey); 1460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.update(b, 3, 6); 1461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 1462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.doFinal(b1, 5); 1463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("No expected ShortBufferException"); 1464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (ShortBufferException e) { 1465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 1466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 1470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 1471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 1472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "doFinal", 1473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {byte[].class} 1474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 1475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_doFinal$B() throws Exception { 1476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] b1 = new byte[32]; 1477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] bI1 = {1,2,3,4,5,6,7,8,9,10}; 1478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] bI2 = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; 1479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] bI3 = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}; 1480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] bI4 = {1,2,3}; 1481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher c = Cipher.getInstance("DES/CBC/NoPadding"); 1483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.ENCRYPT_MODE, cipherKeyDES); 1484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 1485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.doFinal(bI1); 1486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("IllegalBlockSizeException expected"); 1487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IllegalBlockSizeException e) { 1488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 1489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c = Cipher.getInstance("DES/CBC/NoPadding"); 1492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 1493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.doFinal(bI1); 1494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("IllegalStateException expected"); 1495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IllegalStateException e) { 1496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 1497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c = Cipher.getInstance("DES/CBC/NoPadding"); 1500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.ENCRYPT_MODE, cipherKeyDES); 1501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.doFinal(bI2); 1502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.ENCRYPT_MODE, cipherKeyDES); 1503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.doFinal(bI3, 0, 16, b1, 0); 1504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SecureRandom sr = new SecureRandom(); 1506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] iv = new byte[8]; 1507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sr.nextBytes(iv); 1508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AlgorithmParameterSpec ap = new IvParameterSpec(iv); 1509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c = Cipher.getInstance("DES/CBC/PKCS5Padding"); 1511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.DECRYPT_MODE, cipherKeyDES, ap); 1512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 1514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.doFinal(b1); 1515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("BadPaddingException expected"); 1516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (BadPaddingException e) { 1517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 1518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargets({ 1522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 1523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 1524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 1525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "doFinal", 1526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {byte[].class, int.class, int.class} 1527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ), 1528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 1529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 1530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 1531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project clazz = CipherSpi.class, 1532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "engineDoFinal", 1533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {byte[].class, int.class, int.class} 1534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 1535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }) 1536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_doFinal$BII() throws Exception { 1537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] b = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}; 1538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] b1 = new byte[30]; 1539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher c = Cipher.getInstance("DES/CBC/NoPadding"); 1541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.ENCRYPT_MODE, cipherKeyDES); 1542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 1543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.doFinal(b, 0, 10); 1544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("IllegalBlockSizeException expected"); 1545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IllegalBlockSizeException e) { 1546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 1547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c = Cipher.getInstance("DES/CBC/NoPadding"); 1550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 1551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.doFinal(b, 0, 10); 1552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("IllegalStateException expected"); 1553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IllegalStateException e) { 1554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 1555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c = Cipher.getInstance("DES/CBC/NoPadding"); 1558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.ENCRYPT_MODE, cipherKeyDES); 1559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.doFinal(b, 0, 16); 1560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.ENCRYPT_MODE, cipherKeyDES); 1561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.doFinal(b, 0, 16, b1, 0); 1562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SecureRandom sr = new SecureRandom(); 1564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] iv = new byte[8]; 1565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sr.nextBytes(iv); 1566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AlgorithmParameterSpec ap = new IvParameterSpec(iv); 1567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c = Cipher.getInstance("DES/CBC/PKCS5Padding"); 1569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.DECRYPT_MODE, cipherKeyDES, ap); 1570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 1572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.doFinal(b1, 0, 24); 1573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("BadPaddingException expected"); 1574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (BadPaddingException e) { 1575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 1576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 1580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 1581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 1582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "doFinal", 1583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {byte[].class, int.class, int.class, byte[].class} 1584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 1585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_doFinal$BII$B() throws Exception { 1586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] b = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}; 1587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] b1 = new byte[30]; 1588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher c = Cipher.getInstance("DES/CBC/NoPadding"); 1590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.ENCRYPT_MODE, cipherKeyDES); 1591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 1592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.doFinal(b, 0, 10, b1); 1593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("IllegalBlockSizeException expected"); 1594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IllegalBlockSizeException e) { 1595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 1596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c = Cipher.getInstance("DES/CBC/NoPadding"); 1599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 1600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.doFinal(b, 0, 10, b1); 1601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("IllegalStateException expected"); 1602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IllegalStateException e) { 1603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 1604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c = Cipher.getInstance("DES/CBC/NoPadding"); 1607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.ENCRYPT_MODE, cipherKeyDES); 1608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.doFinal(b, 0, 16, b1); 1609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SecureRandom sr = new SecureRandom(); 1611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] iv = new byte[8]; 1612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sr.nextBytes(iv); 1613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AlgorithmParameterSpec ap = new IvParameterSpec(iv); 1614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c = Cipher.getInstance("DES/CBC/PKCS5Padding"); 1616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.DECRYPT_MODE, cipherKeyDES, ap); 1617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 1619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.doFinal(b1, 0, 24, new byte[42]); 1620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("BadPaddingException expected"); 1621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (BadPaddingException e) { 1622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 1623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b1 = new byte[6]; 1626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c = Cipher.getInstance("DESede"); 1627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.ENCRYPT_MODE, cipherKey); 1628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 1629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.doFinal(b, 3, 6, b1); 1630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("No expected ShortBufferException"); 1631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (ShortBufferException e) { 1632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 1633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 1637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.PARTIAL_COMPLETE, 1638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "Checks exception", 1639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "update", 1640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {byte[].class} 1641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 1642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_update$B() throws Exception { 1643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher cipher = Cipher.getInstance("DESEDE/CBC/PKCS5Padding"); 1644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 1645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cipher.update(new byte[64]); 1646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("IllegalStateException expected"); 1647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IllegalStateException e) { 1648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 1649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 1653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 1654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 1655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "update", 1656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {byte[].class, int.class, int.class, byte[].class} 1657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 1658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_() throws Exception { 1659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] b = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}; 1660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] b1 = new byte[30]; 1661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher c = Cipher.getInstance("DES/CBC/NoPadding"); 1663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 1665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.update(b, 0, 10, b1); 1666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("IllegalStateException expected"); 1667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IllegalStateException e) { 1668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 1669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c = Cipher.getInstance("DES/CBC/NoPadding"); 1672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.init(Cipher.ENCRYPT_MODE, cipherKeyDES); 1673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.update(b, 0, 16, b1); 1674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b1 = new byte[3]; 1676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 1678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.update(b, 3, 15, b1); 1679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("No expected ShortBufferException"); 1680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (ShortBufferException e) { 1681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //expected 1682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project class testCipher extends Cipher { 1686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testCipher(CipherSpi c, Provider p, String s) { 1687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super(c, p, s); 1688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 1691