CipherTest.java revision d77eccc93cbf92c400ebd114ea8e91413b882d69
1f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership. 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License. You may obtain a copy of the License at 8f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage org.apache.harmony.crypto.tests.javax.crypto; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.ByteArrayOutputStream; 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.File; 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.InputStream; 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.math.BigInteger; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.net.URL; 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.nio.ByteBuffer; 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.nio.ReadOnlyBufferException; 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.AlgorithmParameters; 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.InvalidAlgorithmParameterException; 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.InvalidKeyException; 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Key; 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.NoSuchAlgorithmException; 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.NoSuchProviderException; 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Provider; 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.SecureRandom; 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Security; 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.Certificate; 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.CertificateFactory; 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.spec.AlgorithmParameterSpec; 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.spec.RSAKeyGenParameterSpec; 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Arrays; 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.crypto.BadPaddingException; 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.crypto.Cipher; 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.crypto.CipherSpi; 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.crypto.IllegalBlockSizeException; 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.crypto.SecretKeyFactory; 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.crypto.ShortBufferException; 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.crypto.spec.DESedeKeySpec; 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.crypto.spec.IvParameterSpec; 49459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstromimport javax.crypto.spec.SecretKeySpec; 50937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstromimport org.apache.harmony.crypto.tests.support.MyCipher; 51937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstromimport tests.support.resource.Support_Resources; 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class CipherTest extends junit.framework.TestCase { 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 55459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom private static final Key CIPHER_KEY_3DES; 56459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom private static final String ALGORITHM_3DES = "DESede"; 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 58459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom private static final Key CIPHER_KEY_DES; 59459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom private static final String ALGORITHM_DES = "DES"; 60d77eccc93cbf92c400ebd114ea8e91413b882d69Brian Carlstrom private static final byte[] IV = new byte[] { 61d77eccc93cbf92c400ebd114ea8e91413b882d69Brian Carlstrom (byte) 0, (byte) 1, (byte) 2, (byte) 3, (byte) 4, (byte) 5, (byte) 6, (byte) 7, 62d77eccc93cbf92c400ebd114ea8e91413b882d69Brian Carlstrom }; 63f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project static { 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 66459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom byte[] encoded_3des = { 67459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom (byte) -57, (byte) -108, (byte) -42, (byte) 47, 68459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom (byte) 42, (byte) -12, (byte) -53, (byte) -83, 69459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom (byte) -123, (byte) 91, (byte) -99, (byte) -101, 70459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom (byte) 93, (byte) -62, (byte) -42, (byte) -128, 71459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom (byte) -2, (byte) 47, (byte) -8, (byte) 69, 72459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom (byte) -68, (byte) 69, (byte) 81, (byte) 74, 73459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom }; 74459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom CIPHER_KEY_3DES = new SecretKeySpec(encoded_3des, ALGORITHM_3DES); 75459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom 76459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom byte[] encoded_des = { 77459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom (byte) 2, (byte) 41, (byte) -77, (byte) 107, 78459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom (byte) -99, (byte) -63, (byte) -42, (byte) -89, 79459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom }; 80459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom CIPHER_KEY_DES = new SecretKeySpec(encoded_des, ALGORITHM_DES); 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 83459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom throw new AssertionError(e); 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 86d37c804ccd11e38ee9221194866a152a4de6c8e9Jesse Wilson 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 88937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom * javax.crypto.Cipher#getInstance(java.lang.String) 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getInstanceLjava_lang_String() throws Exception { 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding"); 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull("Received a null Cipher instance", cipher); 93f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Cipher.getInstance("WrongAlgorithmName"); 96937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 97937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (NoSuchAlgorithmException expected) { 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 102937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom * javax.crypto.Cipher#getInstance(java.lang.String, 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * java.lang.String) 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getInstanceLjava_lang_StringLjava_lang_String() 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws Exception { 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Provider[] providers = Security.getProviders("Cipher.DES"); 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull("No installed providers support Cipher.DES", providers); 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < providers.length; i++) { 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Cipher cipher = Cipher.getInstance("DES", providers[i].getName()); 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull("Cipher.getInstance() returned a null value", cipher); 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project cipher = Cipher.getInstance("DoBeDoBeDo", providers[i]); 118937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 119937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (NoSuchAlgorithmException expected) { 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Cipher.getInstance("DES", (String) null); 125937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 126937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (IllegalArgumentException expected) { 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Cipher.getInstance("DES", "IHaveNotBeenConfigured"); 131937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 132937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (NoSuchProviderException expected) { 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 137937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom * javax.crypto.Cipher#getInstance(java.lang.String, 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * java.security.Provider) 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 140937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom public void test_getInstanceLjava_lang_StringLjava_security_Provider() throws Exception { 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Provider[] providers = Security.getProviders("Cipher.DES"); 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull("No installed providers support Cipher.DES", providers); 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < providers.length; i++) { 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Cipher cipher = Cipher.getInstance("DES", providers[i]); 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull("Cipher.getInstance() returned a null value", cipher); 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 150f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Cipher.getInstance("DES", (Provider) null); 153937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 154937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (IllegalArgumentException expected) { 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Cipher.getInstance("WrongAlg", providers[0]); 159937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 160937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (NoSuchAlgorithmException expected) { 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 165937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom * javax.crypto.Cipher#getProvider() 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getProvider() throws Exception { 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Provider[] providers = Security.getProviders("Cipher.AES"); 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull("No providers support Cipher.AES", providers); 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < providers.length; i++) { 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Provider provider = providers[i]; 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Cipher cipher = Cipher.getInstance("AES", provider.getName()); 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Provider cipherProvider = cipher.getProvider(); 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Cipher provider is not the same as that " 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "provided as parameter to getInstance()", cipherProvider 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .equals(provider)); 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 184937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom * javax.crypto.Cipher#getAlgorithm() 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getAlgorithm() throws Exception { 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project final String algorithm = "DESede/CBC/PKCS5Padding"; 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Cipher cipher = Cipher.getInstance(algorithm); 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Cipher algorithm does not match", cipher.getAlgorithm() 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .equals(algorithm)); 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 195937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom * javax.crypto.Cipher#getBlockSize() 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getBlockSize() throws Exception { 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project final String algorithm = "DESede/CBC/PKCS5Padding"; 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Cipher cipher = Cipher.getInstance(algorithm); 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Block size does not match", 8, cipher.getBlockSize()); 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 205937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom * javax.crypto.Cipher#getOutputSize(int) 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getOutputSizeI() throws Exception { 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 209459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom Cipher cipher = Cipher.getInstance(ALGORITHM_3DES + "/ECB/PKCS5Padding"); 210f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project cipher.getOutputSize(25); 213937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 214937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (IllegalStateException expected) { 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 216f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 217d77eccc93cbf92c400ebd114ea8e91413b882d69Brian Carlstrom cipher.init(Cipher.ENCRYPT_MODE, CIPHER_KEY_3DES, new SecureRandom()); 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // A 25-byte input could result in at least 4 8-byte blocks 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int result = cipher.getOutputSize(25); 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Output size too small", result > 31); 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // A 8-byte input should result in 2 8-byte blocks 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project result = cipher.getOutputSize(8); 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Output size too small", result > 15); 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 229937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom * javax.crypto.Cipher#init(int, java.security.Key) 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 231937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom public void test_initWithKey() throws Exception { 232459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom Cipher cipher = Cipher.getInstance(ALGORITHM_3DES + "/ECB/PKCS5Padding"); 233459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom cipher.init(Cipher.ENCRYPT_MODE, CIPHER_KEY_3DES); 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 235f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project cipher = Cipher.getInstance("DES/CBC/NoPadding"); 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 238459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom cipher.init(Cipher.ENCRYPT_MODE, CIPHER_KEY_3DES); 239937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 240937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (InvalidKeyException expected) { 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 245937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom * javax.crypto.Cipher#init(int, java.security.Key, 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * java.security.SecureRandom) 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 248937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom public void test_initWithSecureRandom() throws Exception { 249459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom Cipher cipher = Cipher.getInstance(ALGORITHM_3DES + "/ECB/PKCS5Padding"); 250d77eccc93cbf92c400ebd114ea8e91413b882d69Brian Carlstrom cipher.init(Cipher.ENCRYPT_MODE, CIPHER_KEY_3DES, new SecureRandom()); 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project cipher = Cipher.getInstance("DES/CBC/NoPadding"); 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 254d77eccc93cbf92c400ebd114ea8e91413b882d69Brian Carlstrom cipher.init(Cipher.ENCRYPT_MODE, CIPHER_KEY_3DES, new SecureRandom()); 255937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 256937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (InvalidKeyException expected) { 257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 261937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom * javax.crypto.Cipher#init(int, java.security.Key, 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * java.security.spec.AlgorithmParameterSpec) 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 264937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom public void test_initWithAlgorithmParameterSpec() throws Exception { 265d77eccc93cbf92c400ebd114ea8e91413b882d69Brian Carlstrom AlgorithmParameterSpec ap = new IvParameterSpec(IV); 266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 267d77eccc93cbf92c400ebd114ea8e91413b882d69Brian Carlstrom Cipher cipher = Cipher.getInstance(ALGORITHM_3DES + "/CBC/PKCS5Padding"); 268459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom cipher.init(Cipher.ENCRYPT_MODE, CIPHER_KEY_3DES, ap); 269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] cipherIV = cipher.getIV(); 270d77eccc93cbf92c400ebd114ea8e91413b882d69Brian Carlstrom assertTrue("IVs differ", Arrays.equals(cipherIV, IV)); 271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project cipher = Cipher.getInstance("DES/CBC/NoPadding"); 273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 274459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom cipher.init(Cipher.ENCRYPT_MODE, CIPHER_KEY_3DES, ap); 275937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 276937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (InvalidKeyException expected) { 277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project cipher = Cipher.getInstance("DES/CBC/NoPadding"); 280f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes ap = new RSAKeyGenParameterSpec(10, new BigInteger("10")); 281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 282459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom cipher.init(Cipher.ENCRYPT_MODE, CIPHER_KEY_DES, ap); 283937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 284937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (InvalidAlgorithmParameterException expected) { 285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 289937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom * javax.crypto.Cipher#init(int, java.security.Key, 290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * java.security.spec.AlgorithmParameterSpec, 291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * java.security.SecureRandom) 292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 293937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom public void test_initWithKeyAlgorithmParameterSpecSecureRandom() throws Exception { 294d77eccc93cbf92c400ebd114ea8e91413b882d69Brian Carlstrom AlgorithmParameterSpec ap = new IvParameterSpec(IV); 295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 296d77eccc93cbf92c400ebd114ea8e91413b882d69Brian Carlstrom Cipher cipher = Cipher.getInstance(ALGORITHM_3DES + "/CBC/PKCS5Padding"); 297d77eccc93cbf92c400ebd114ea8e91413b882d69Brian Carlstrom cipher.init(Cipher.ENCRYPT_MODE, CIPHER_KEY_3DES, ap, new SecureRandom()); 298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] cipherIV = cipher.getIV(); 299d77eccc93cbf92c400ebd114ea8e91413b882d69Brian Carlstrom assertTrue("IVs differ", Arrays.equals(cipherIV, IV)); 300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project cipher = Cipher.getInstance("DES/CBC/NoPadding"); 302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 303d77eccc93cbf92c400ebd114ea8e91413b882d69Brian Carlstrom cipher.init(Cipher.ENCRYPT_MODE, CIPHER_KEY_3DES, ap, new SecureRandom()); 304937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 305937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (InvalidKeyException expected) { 306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project cipher = Cipher.getInstance("DES/CBC/NoPadding"); 309f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes ap = new RSAKeyGenParameterSpec(10, new BigInteger("10")); 310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 312d77eccc93cbf92c400ebd114ea8e91413b882d69Brian Carlstrom cipher.init(Cipher.ENCRYPT_MODE, CIPHER_KEY_DES, ap, new SecureRandom()); 313937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 314937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (InvalidAlgorithmParameterException expected) { 315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 319937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom * javax.crypto.Cipher#update(byte[], int, int) 320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_update$BII() throws Exception { 322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int index = 1; index < 4; index++) { 323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Cipher c = Cipher.getInstance("DESEDE/CBC/PKCS5Padding"); 324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] keyMaterial = loadBytes("hyts_" + "des-ede3-cbc.test" 326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + index + ".key"); 327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DESedeKeySpec keySpec = new DESedeKeySpec(keyMaterial); 328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecretKeyFactory skf = SecretKeyFactory.getInstance("DESEDE"); 329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Key k = skf.generateSecret(keySpec); 330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] ivMaterial = loadBytes("hyts_" + "des-ede3-cbc.test" + index 332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + ".iv"); 333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project IvParameterSpec iv = new IvParameterSpec(ivMaterial); 334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.init(Cipher.DECRYPT_MODE, k, iv); 336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteArrayOutputStream baos = new ByteArrayOutputStream(); 338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] input = new byte[256]; 339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String resPath = "hyts_" + "des-ede3-cbc.test" + index 340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + ".ciphertext"; 341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project File resources = Support_Resources.createTempFolder(); 342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Support_Resources.copyFile(resources, null, resPath); 343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InputStream is = Support_Resources.getStream(resPath); 344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int bytesRead = is.read(input, 0, 256); 346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project while (bytesRead > 0) { 347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] output = c.update(input, 0, bytesRead); 348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (output != null) { 349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project baos.write(output); 350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project bytesRead = is.read(input, 0, 256); 352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] output = c.doFinal(); 355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (output != null) { 356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project baos.write(output); 357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] decipheredCipherText = baos.toByteArray(); 360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project is.close(); 361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] plaintextBytes = loadBytes("hyts_" + "des-ede3-cbc.test" 363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + index + ".plaintext"); 364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Operation produced incorrect results", Arrays.equals( 365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project plaintextBytes, decipheredCipherText)); 366937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } 367f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Cipher cipher = Cipher.getInstance("DESEDE/CBC/PKCS5Padding"); 369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project cipher.update(new byte[64], 0, 32); 371937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 372937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (IllegalStateException expected) { 373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 377937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom * javax.crypto.Cipher#doFinal() 378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_doFinal() throws Exception { 380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int index = 1; index < 4; index++) { 381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Cipher c = Cipher.getInstance("DESEDE/CBC/PKCS5Padding"); 382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] keyMaterial = loadBytes("hyts_" + "des-ede3-cbc.test" 384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + index + ".key"); 385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DESedeKeySpec keySpec = new DESedeKeySpec(keyMaterial); 386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecretKeyFactory skf = SecretKeyFactory.getInstance("DESEDE"); 387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Key k = skf.generateSecret(keySpec); 388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] ivMaterial = loadBytes("hyts_" + "des-ede3-cbc.test" + index 390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + ".iv"); 391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project IvParameterSpec iv = new IvParameterSpec(ivMaterial); 392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.init(Cipher.ENCRYPT_MODE, k, iv); 394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteArrayOutputStream baos = new ByteArrayOutputStream(); 396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] input = new byte[256]; 397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String resPath = "hyts_" + "des-ede3-cbc.test" + index 398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + ".plaintext"; 399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project File resources = Support_Resources.createTempFolder(); 400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Support_Resources.copyFile(resources, null, resPath); 401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InputStream is = Support_Resources.getStream(resPath); 402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int bytesRead = is.read(input, 0, 256); 404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project while (bytesRead > 0) { 405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] output = c.update(input, 0, bytesRead); 406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (output != null) { 407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project baos.write(output); 408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project bytesRead = is.read(input, 0, 256); 410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] output = c.doFinal(); 412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (output != null) { 413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project baos.write(output); 414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] encryptedPlaintext = baos.toByteArray(); 416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project is.close(); 417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] cipherText = loadBytes("hyts_" + "des-ede3-cbc.test" + index 419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + ".ciphertext"); 420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Operation produced incorrect results", Arrays.equals( 421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project encryptedPlaintext, cipherText)); 422937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } 423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe 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}; 425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] b1 = new byte[30]; 426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Cipher c = Cipher.getInstance("DES/CBC/NoPadding"); 428459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom c.init(Cipher.ENCRYPT_MODE, CIPHER_KEY_DES); 429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.update(b, 0, 10, b1, 5); 430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.doFinal(); 432937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 433937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (IllegalBlockSizeException expected) { 434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c = Cipher.getInstance("DES/CBC/NoPadding"); 437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.doFinal(); 439937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 440937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (IllegalStateException expected) { 441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c = Cipher.getInstance("DES/CBC/NoPadding"); 444459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom c.init(Cipher.ENCRYPT_MODE, CIPHER_KEY_DES); 445459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom int len = c.doFinal(b, 0, 16, b1, 0); 446459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom assertEquals(16, len); 447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 448d77eccc93cbf92c400ebd114ea8e91413b882d69Brian Carlstrom AlgorithmParameterSpec ap = new IvParameterSpec(IV); 449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c = Cipher.getInstance("DES/CBC/PKCS5Padding"); 450459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom c.init(Cipher.DECRYPT_MODE, CIPHER_KEY_DES, ap); 451f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.update(b1, 0, 24, b, 0); 453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.doFinal(); 455937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 456937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (BadPaddingException expected) { 457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 460937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom private byte[] loadBytes(String resPath) throws Exception { 461937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom File resources = Support_Resources.createTempFolder(); 462937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom Support_Resources.copyFile(resources, null, resPath); 463937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom InputStream is = Support_Resources.getStream(resPath); 464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 465937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom ByteArrayOutputStream out = new ByteArrayOutputStream(); 466937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom byte[] buff = new byte[1024]; 467937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom int readlen; 468937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom while ((readlen = is.read(buff)) > 0) { 469937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom out.write(buff, 0, readlen); 470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 471937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom is.close(); 472937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom return out.toByteArray(); 473adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 474f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testGetParameters() throws Exception { 476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Cipher c = Cipher.getInstance("DES"); 477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNull(c.getParameters()); 478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 479f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* 481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Class under test for int update(byte[], int, int, byte[], int) 482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testUpdatebyteArrayintintbyteArrayint() throws Exception { 484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] b = {1,2,3,4,5,6,7,8,9,10}; 485adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] b1 = new byte[6]; 486adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Cipher c = Cipher.getInstance("DESede"); 487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 488adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.update(b, 0, 10, b1, 5); 490937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 491937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (IllegalStateException expected) { 492adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 494459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom c.init(Cipher.ENCRYPT_MODE, CIPHER_KEY_3DES); 495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.update(b, 0, 10, b1, 5); 497937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 498937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (ShortBufferException expected) { 499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 500f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project b1 = new byte[30]; 502adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.update(b, 0, 10, b1, 5); 503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 504f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 505adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* 506adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Class under test for int doFinal(byte[], int, int, byte[], int) 507adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 508adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testDoFinalbyteArrayintintbyteArrayint() throws Exception { 509adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe 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}; 510adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] b1 = new byte[30]; 511f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 512adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Cipher c = Cipher.getInstance("DES/CBC/NoPadding"); 513459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom c.init(Cipher.ENCRYPT_MODE, CIPHER_KEY_DES); 514adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 515adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.doFinal(b, 0, 10, b1, 5); 516937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 517937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (IllegalBlockSizeException expected) { 518adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 519adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 520adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c = Cipher.getInstance("DES/CBC/NoPadding"); 521adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 522adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.doFinal(b, 0, 10, b1, 5); 523937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 524937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (IllegalStateException expected) { 525adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 526adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 527adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c = Cipher.getInstance("DES/CBC/NoPadding"); 528459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom c.init(Cipher.ENCRYPT_MODE, CIPHER_KEY_DES); 529459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom int len = c.doFinal(b, 0, 16, b1, 0); 530459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom assertEquals(16, len); 531adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 532d77eccc93cbf92c400ebd114ea8e91413b882d69Brian Carlstrom AlgorithmParameterSpec ap = new IvParameterSpec(IV); 533adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c = Cipher.getInstance("DES/CBC/PKCS5Padding"); 534459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom c.init(Cipher.DECRYPT_MODE, CIPHER_KEY_DES, ap); 535adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 536adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.doFinal(b1, 0, 24, new byte[42], 0); 537937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 538937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (BadPaddingException expected) { 539adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 540adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 541adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project b1 = new byte[6]; 542adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c = Cipher.getInstance("DESede"); 543459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom c.init(Cipher.ENCRYPT_MODE, CIPHER_KEY_3DES); 544adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 545adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.doFinal(b, 3, 6, b1, 5); 546937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 547937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (ShortBufferException expected) { 548adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 549adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 550f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 551937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom public void testGetMaxAllowedKeyLength() throws Exception { 552adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 553adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Cipher.getMaxAllowedKeyLength(null); 554937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 555937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (NullPointerException expected) { 556937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } 557937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom try { 558937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom Cipher.getMaxAllowedKeyLength(""); 559937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (NoSuchAlgorithmException expected) { 560adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 561adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 562adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Cipher.getMaxAllowedKeyLength("//CBC/PKCS5Paddin"); 563937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 564937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (NoSuchAlgorithmException expected) { 565adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 566adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 567adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Cipher.getMaxAllowedKeyLength("/DES/CBC/PKCS5Paddin/1"); 568937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 569937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (NoSuchAlgorithmException expected) { 570adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 571adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue(Cipher.getMaxAllowedKeyLength("/DES/CBC/PKCS5Paddin") > 0); 572adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 573adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 574937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom public void testGetMaxAllowedParameterSpec() throws Exception { 575adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 576adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Cipher.getMaxAllowedParameterSpec(null); 577937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 578937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (NullPointerException expected) { 579adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 580adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 581adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Cipher.getMaxAllowedParameterSpec("/DES//PKCS5Paddin"); 582937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 583937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (NoSuchAlgorithmException expected) { 584adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 585adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 586adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Cipher.getMaxAllowedParameterSpec("/DES/CBC/ /1"); 587937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 588937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (NoSuchAlgorithmException expected) { 589adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 590adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Cipher.getMaxAllowedParameterSpec("DES/CBC/PKCS5Paddin"); 591adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Cipher.getMaxAllowedParameterSpec("RSA"); 592adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 593adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 594adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 595937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom * javax.crypto.Cipher#Cipher(CipherSpi cipherSpi, Provider provider, 596adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * String transformation) 597adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 598adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_Ctor() throws Exception { 599adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Regression for Harmony-1184 600adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 601adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new testCipher(null, null, "s"); 602937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 603937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (NullPointerException expected) { 604adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 605adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 606adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 607adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new testCipher(new MyCipher(), null, "s"); 608adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException expected for 'null' provider"); 609937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (NullPointerException expected) { 610adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 611adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 612adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 613adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new testCipher(null, new Provider("qwerty", 1.0, "qwerty") {}, "s"); 614adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException expected for 'null' cipherSpi"); 615937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (NullPointerException expected) { 616adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 617adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 618adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 619937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom public void test_doFinalLjava_nio_ByteBufferLjava_nio_ByteBuffer() throws Exception { 620adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe 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}; 621adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer bInput = ByteBuffer.allocate(64); 622adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer bOutput = ByteBuffer.allocate(64); 623f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 624adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Cipher c = Cipher.getInstance("DES/CBC/NoPadding"); 625459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom c.init(Cipher.ENCRYPT_MODE, CIPHER_KEY_DES); 626adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project bInput.put(b, 0, 10); 627adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 628adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.doFinal(bInput, bOutput); 629937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 630937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (IllegalBlockSizeException expected) { 631adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 632adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 633adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c = Cipher.getInstance("DES/CBC/NoPadding"); 634adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 635adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.doFinal(bInput, bOutput); 636937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 637937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (IllegalStateException expected) { 638adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 639adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 640adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c = Cipher.getInstance("DES/CBC/NoPadding"); 641459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom c.init(Cipher.ENCRYPT_MODE, CIPHER_KEY_DES); 642adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project bInput = ByteBuffer.allocate(16); 643adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project bInput.put(b, 0, 16); 644459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom int len = c.doFinal(bInput, bOutput); 645459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom assertEquals(0, len); 646adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 647d77eccc93cbf92c400ebd114ea8e91413b882d69Brian Carlstrom AlgorithmParameterSpec ap = new IvParameterSpec(IV); 648adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 649adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c = Cipher.getInstance("DES/CBC/PKCS5Padding"); 650459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom c.init(Cipher.DECRYPT_MODE, CIPHER_KEY_DES, ap); 651adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project bInput = ByteBuffer.allocate(64); 652adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 653adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.doFinal(bOutput, bInput); 654937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 655937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (BadPaddingException expected) { 656adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 657f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 658adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c = Cipher.getInstance("DES/CBC/NoPadding"); 659459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom c.init(Cipher.ENCRYPT_MODE, CIPHER_KEY_DES); 660adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project bInput.put(b, 0, 16); 661adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 662adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.doFinal(bInput, bInput); 663937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 664937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (IllegalArgumentException expected) { 665adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 666adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 667adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c = Cipher.getInstance("DES/CBC/NoPadding"); 668459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom c.init(Cipher.ENCRYPT_MODE, CIPHER_KEY_DES); 669adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project bInput.put(b, 0, 16); 670adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 671adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.doFinal(bInput, bOutput.asReadOnlyBuffer()); 672937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 673937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (ReadOnlyBufferException expected) { 674adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 675adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 676adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project bInput.rewind(); 677adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project bInput.put(b, 0, 16); 678adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project bOutput = ByteBuffer.allocate(8); 679adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c = Cipher.getInstance("DESede"); 680459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom c.init(Cipher.ENCRYPT_MODE, CIPHER_KEY_3DES); 681adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 682adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.doFinal(bInput, bOutput); 683937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 684937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (ShortBufferException expected) { 685adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 686adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 687adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 688937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom public void test_initWithKeyAlgorithmParameters() throws Exception { 689d77eccc93cbf92c400ebd114ea8e91413b882d69Brian Carlstrom AlgorithmParameterSpec ap = new IvParameterSpec(IV); 690adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 691adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Cipher c = Cipher.getInstance("DES/CBC/PKCS5Padding"); 692459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom c.init(Cipher.DECRYPT_MODE, CIPHER_KEY_DES, ap); 693adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull(c.getParameters()); 694f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 695adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 696459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom c.init(Cipher.DECRYPT_MODE, CIPHER_KEY_3DES, ap); 697937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 698937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (InvalidKeyException expected) { 699adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 700f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 701adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 702459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom c.init(Cipher.DECRYPT_MODE, CIPHER_KEY_DES, (AlgorithmParameters)null); 703937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 704937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (InvalidAlgorithmParameterException expected) { 705adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 706adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 707adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 708937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom public void test_initWithKeyAlgorithmParametersSecureRandom() throws Exception { 709d77eccc93cbf92c400ebd114ea8e91413b882d69Brian Carlstrom AlgorithmParameterSpec ap = new IvParameterSpec(IV); 710adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 711adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Cipher c = Cipher.getInstance("DES/CBC/PKCS5Padding"); 712d77eccc93cbf92c400ebd114ea8e91413b882d69Brian Carlstrom c.init(Cipher.DECRYPT_MODE, CIPHER_KEY_DES, ap, new SecureRandom()); 713adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull(c.getParameters()); 714f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 715adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 716459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom c.init(Cipher.DECRYPT_MODE, CIPHER_KEY_3DES, ap, new SecureRandom()); 717937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 718937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (InvalidKeyException expected) { 719adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 720f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 721adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 722d77eccc93cbf92c400ebd114ea8e91413b882d69Brian Carlstrom c.init(Cipher.DECRYPT_MODE, CIPHER_KEY_DES, (AlgorithmParameters)null, 723d77eccc93cbf92c400ebd114ea8e91413b882d69Brian Carlstrom new SecureRandom()); 724937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 725937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (InvalidAlgorithmParameterException expected) { 726adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 727adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 728459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom c.init(Cipher.DECRYPT_MODE, CIPHER_KEY_DES, ap, (SecureRandom)null); 729adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull(c.getParameters()); 730adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 731adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 732937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom public void test_initWithCertificate() throws Exception { 733f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 734f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes /* Certificate creation notes: certificate should be valid 37273 starting 735adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * from 13 Nov 2008 736adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If it brcomes invalidated regenerate it using following commands: 737adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 1. openssl genrsa -des3 -out test.key 1024 738adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 2. openssl req -new -key test.key -out test.csr 739adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 3. cp test.key test.key.org 740adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 4. openssl rsa -in test.key.org -out test.key 741adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 5. openssl x509 -req -days 37273 -in test.csr -signkey test.key -out test.cert 742adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * */ 743f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 744adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String certName = Support_Resources.getURL("test.cert"); 745adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InputStream is = new URL(certName).openConnection().getInputStream(); 746adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project CertificateFactory cf = CertificateFactory.getInstance("X.509"); 747f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 748adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Certificate cert = cf.generateCertificate(is); 749937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom is.close(); 750adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 751adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Cipher c = Cipher.getInstance("RSA"); 752f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 753adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.init(Cipher.ENCRYPT_MODE, cert); 754adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c = Cipher.getInstance("DES/CBC/PKCS5Padding"); 755adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 756adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.init(Cipher.ENCRYPT_MODE, cert); 757937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 758937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (InvalidKeyException expected) { 759adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 760adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 761adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 762937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom public void test_initWithCertificateSecureRandom() throws Exception { 763f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 764f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes /* Certificate creation notes: certificate should be valid 37273 starting 765adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * from 13 Nov 2008 766adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If it brcomes invalidated regenerate it using following commands: 767adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 1. openssl genrsa -des3 -out test.key 1024 768adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 2. openssl req -new -key test.key -out test.csr 769adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 3. cp test.key test.key.org 770adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 4. openssl rsa -in test.key.org -out test.key 771adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 5. openssl x509 -req -days 37273 -in test.csr -signkey test.key -out test.cert 772adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * */ 773f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 774adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String certName = Support_Resources.getURL("test.cert"); 775adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InputStream is = new URL(certName).openConnection().getInputStream(); 776adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project CertificateFactory cf = CertificateFactory.getInstance("X.509"); 777f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 778adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Certificate cert = cf.generateCertificate(is); 779937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom is.close(); 780adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 781adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Cipher c = Cipher.getInstance("RSA"); 782f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 783adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.init(Cipher.ENCRYPT_MODE, cert, new SecureRandom()); 784adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c = Cipher.getInstance("DES/CBC/PKCS5Padding"); 785adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 786adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.init(Cipher.ENCRYPT_MODE, cert, new SecureRandom()); 787937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 788937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (InvalidKeyException expected) { 789adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 790adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 791adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 792937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom public void test_unwrap$BLjava_lang_StringI() throws Exception { 793d77eccc93cbf92c400ebd114ea8e91413b882d69Brian Carlstrom AlgorithmParameterSpec ap = new IvParameterSpec(IV); 794adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 795adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Cipher c = Cipher.getInstance("DES/CBC/PKCS5Padding"); 796adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 797d77eccc93cbf92c400ebd114ea8e91413b882d69Brian Carlstrom c.init(Cipher.WRAP_MODE, CIPHER_KEY_DES, ap, new SecureRandom()); 798459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom byte[] arDES = c.wrap(CIPHER_KEY_DES); 799459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom byte[] ar = c.wrap(CIPHER_KEY_3DES); 800f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 801adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 802adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.unwrap(arDES, "DES", Cipher.SECRET_KEY); 803937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 804937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (IllegalStateException expected) { 805adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 806adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 807d77eccc93cbf92c400ebd114ea8e91413b882d69Brian Carlstrom c.init(Cipher.UNWRAP_MODE, CIPHER_KEY_DES, ap, new SecureRandom()); 808459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom assertTrue(CIPHER_KEY_DES.equals(c.unwrap(arDES, "DES", Cipher.SECRET_KEY))); 809459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom assertFalse(CIPHER_KEY_DES.equals(c.unwrap(ar, "DES", Cipher.SECRET_KEY))); 810adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 811adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 812adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.unwrap(arDES, "RSA38", Cipher.PUBLIC_KEY); 813937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 814937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (NoSuchAlgorithmException expected) { 815adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 816adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 817adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c = Cipher.getInstance("DESede/CBC/PKCS5Padding"); 818d77eccc93cbf92c400ebd114ea8e91413b882d69Brian Carlstrom c.init(Cipher.UNWRAP_MODE, CIPHER_KEY_3DES, ap, new SecureRandom()); 819adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 820adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.unwrap(arDES, "DESede", Cipher.SECRET_KEY); 821937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 822937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (InvalidKeyException expected) { 823adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 824adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 825f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 826937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom public void test_updateLjava_nio_ByteBufferLjava_nio_ByteBuffer() throws Exception { 827adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe 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}; 828adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer bInput = ByteBuffer.allocate(256); 829adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteBuffer bOutput = ByteBuffer.allocate(256); 830f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 831adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Cipher c = Cipher.getInstance("DES/CBC/NoPadding"); 832459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom c.init(Cipher.ENCRYPT_MODE, CIPHER_KEY_DES); 833adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project bInput.put(b, 0, 10); 834adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project bInput.rewind(); 835adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project bOutput.rewind(); 836adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.update(bInput, bOutput); 837adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 838adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c = Cipher.getInstance("DES/CBC/NoPadding"); 839adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 840adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.update(bInput, bOutput); 841937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 842937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (IllegalStateException expected) { 843adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 844adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 845adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c = Cipher.getInstance("DES/CBC/NoPadding"); 846459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom c.init(Cipher.ENCRYPT_MODE, CIPHER_KEY_DES); 847adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project bInput = ByteBuffer.allocate(16); 848adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project bInput.put(b, 0, 16); 849adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project bInput.rewind(); 850adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project bOutput.rewind(); 851adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.update(bInput, bOutput); 852adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 853d77eccc93cbf92c400ebd114ea8e91413b882d69Brian Carlstrom AlgorithmParameterSpec ap = new IvParameterSpec(IV); 854adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 855adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c = Cipher.getInstance("DES/CBC/PKCS5Padding"); 856459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom c.init(Cipher.DECRYPT_MODE, CIPHER_KEY_DES, ap); 857adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project bInput = ByteBuffer.allocate(64); 858adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 859adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c = Cipher.getInstance("DES/CBC/NoPadding"); 860459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom c.init(Cipher.ENCRYPT_MODE, CIPHER_KEY_DES); 861adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project bInput.put(b, 0, 16); 862adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project bInput.rewind(); 863adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 864adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.update(bInput, bInput); 865937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 866937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (IllegalArgumentException expected) { 867adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 868adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 869adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c = Cipher.getInstance("DES/CBC/NoPadding"); 870459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom c.init(Cipher.ENCRYPT_MODE, CIPHER_KEY_DES); 871adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project bInput.put(b, 0, 16); 872adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project bInput.rewind(); 873adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project bOutput.rewind(); 874adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 875adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.update(bInput, bOutput.asReadOnlyBuffer()); 876937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 877937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (ReadOnlyBufferException expected) { 878adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 879adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 880adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project bInput.rewind(); 881adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project bInput.put(b, 0, 16); 882adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project bInput.rewind(); 883adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project bOutput = ByteBuffer.allocate(8); 884adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c = Cipher.getInstance("DESede"); 885459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom c.init(Cipher.ENCRYPT_MODE, CIPHER_KEY_3DES); 886adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 887adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.update(bInput, bOutput); 888937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 889937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (ShortBufferException expected) { 890adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 891adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 892f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 893adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project class Mock_Key implements Key { 894adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String getAlgorithm() { 895adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 896adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 897adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 898adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public byte[] getEncoded() { 899adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 900adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 901adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 902adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String getFormat() { 903adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 904adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 905f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 906adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 907f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 908937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom public void test_wrap_java_security_Key() throws Exception { 909d77eccc93cbf92c400ebd114ea8e91413b882d69Brian Carlstrom AlgorithmParameterSpec ap = new IvParameterSpec(IV); 910adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 911adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Cipher c = Cipher.getInstance("DES/CBC/PKCS5Padding"); 912adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 913d77eccc93cbf92c400ebd114ea8e91413b882d69Brian Carlstrom c.init(Cipher.WRAP_MODE, CIPHER_KEY_DES, ap, new SecureRandom()); 914459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom assertNotNull(c.wrap(CIPHER_KEY_DES)); 915459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom assertNotNull(c.wrap(CIPHER_KEY_3DES)); 916adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String certName = Support_Resources.getURL("test.cert"); 917adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InputStream is = new URL(certName).openConnection().getInputStream(); 918adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project CertificateFactory cf = CertificateFactory.getInstance("X.509"); 919f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 920adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Certificate cert = cf.generateCertificate(is); 921adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull(c.wrap(cert.getPublicKey())); 922adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 923adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c = Cipher.getInstance("DES/CBC/NoPadding"); 924d77eccc93cbf92c400ebd114ea8e91413b882d69Brian Carlstrom c.init(Cipher.WRAP_MODE, CIPHER_KEY_DES, ap, new SecureRandom()); 925adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 926adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull(c.wrap(cert.getPublicKey())); 927937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 928937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (IllegalBlockSizeException expected) { 929adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 930adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 931d77eccc93cbf92c400ebd114ea8e91413b882d69Brian Carlstrom c.init(Cipher.DECRYPT_MODE, CIPHER_KEY_DES, ap, new SecureRandom()); 932f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 933adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 934459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom c.wrap(CIPHER_KEY_DES); 935937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 936937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (IllegalStateException expected) { 937adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 938f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 939d77eccc93cbf92c400ebd114ea8e91413b882d69Brian Carlstrom c.init(Cipher.WRAP_MODE, CIPHER_KEY_DES, ap, new SecureRandom()); 940adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 941adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.wrap(new Mock_Key()); 942937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 943937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (InvalidKeyException expected) { 944adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 945adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 946adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 947adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_doFinal$BI() throws Exception { 948adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe 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}; 949adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] b1 = new byte[30]; 950f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 951adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Cipher c = Cipher.getInstance("DES/CBC/NoPadding"); 952459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom c.init(Cipher.ENCRYPT_MODE, CIPHER_KEY_DES); 953adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.update(b, 0, 10); 954adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 955adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.doFinal(b1, 5); 956937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 957937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (IllegalBlockSizeException expected) { 958adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 959adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 960adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c = Cipher.getInstance("DES/CBC/NoPadding"); 961adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 962adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.doFinal(b1, 5); 963937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 964937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (IllegalStateException expected) { 965adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 966adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 967adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c = Cipher.getInstance("DES/CBC/NoPadding"); 968459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom c.init(Cipher.ENCRYPT_MODE, CIPHER_KEY_DES); 969adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.update(b, 3, 8); 970459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom int len = c.doFinal(b1, 0); 971459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom assertEquals(0, len); 972adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 973d77eccc93cbf92c400ebd114ea8e91413b882d69Brian Carlstrom AlgorithmParameterSpec ap = new IvParameterSpec(IV); 974adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 975adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c = Cipher.getInstance("DES/CBC/PKCS5Padding"); 976459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom c.init(Cipher.DECRYPT_MODE, CIPHER_KEY_DES, ap); 977adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.update(b1, 0, 24); 978adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 979adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.doFinal(b, 0); 980937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 981937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (BadPaddingException expected) { 982adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 983adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 984adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project b1 = new byte[6]; 985adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c = Cipher.getInstance("DESede"); 986459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom c.init(Cipher.ENCRYPT_MODE, CIPHER_KEY_3DES); 987adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.update(b, 3, 6); 988adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 989adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.doFinal(b1, 5); 990937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 991937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (ShortBufferException expected) { 992adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 993adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 994adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 995adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_doFinal$B() throws Exception { 996adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] b1 = new byte[32]; 997adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] bI1 = {1,2,3,4,5,6,7,8,9,10}; 998adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] bI2 = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; 999adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe 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}; 1000adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] bI4 = {1,2,3}; 1001f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1002adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Cipher c = Cipher.getInstance("DES/CBC/NoPadding"); 1003459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom c.init(Cipher.ENCRYPT_MODE, CIPHER_KEY_DES); 1004adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1005adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.doFinal(bI1); 1006937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 1007937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (IllegalBlockSizeException expected) { 1008adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1009adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1010adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c = Cipher.getInstance("DES/CBC/NoPadding"); 1011adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1012adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.doFinal(bI1); 1013937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 1014937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (IllegalStateException expected) { 1015adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1016adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1017adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c = Cipher.getInstance("DES/CBC/NoPadding"); 1018459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom c.init(Cipher.ENCRYPT_MODE, CIPHER_KEY_DES); 1019459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom int len1 = c.doFinal(bI2).length; 1020459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom assertEquals(16, len1); 1021459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom c.init(Cipher.ENCRYPT_MODE, CIPHER_KEY_DES); 1022459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom int len2 = c.doFinal(bI3, 0, 16, b1, 0); 1023459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom assertEquals(16, len2); 1024adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1025d77eccc93cbf92c400ebd114ea8e91413b882d69Brian Carlstrom AlgorithmParameterSpec ap = new IvParameterSpec(IV); 1026adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c = Cipher.getInstance("DES/CBC/PKCS5Padding"); 1027459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom c.init(Cipher.DECRYPT_MODE, CIPHER_KEY_DES, ap); 1028adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1029adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.doFinal(b1); 1030937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 1031937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (BadPaddingException expected) { 1032adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1033adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1034adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1035adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_doFinal$BII() throws Exception { 1036adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe 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}; 1037adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] b1 = new byte[30]; 1038f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1039adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Cipher c = Cipher.getInstance("DES/CBC/NoPadding"); 1040459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom c.init(Cipher.ENCRYPT_MODE, CIPHER_KEY_DES); 1041adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1042adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.doFinal(b, 0, 10); 1043937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 1044937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (IllegalBlockSizeException expected) { 1045adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1046adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1047adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c = Cipher.getInstance("DES/CBC/NoPadding"); 1048adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1049adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.doFinal(b, 0, 10); 1050937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 1051937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (IllegalStateException expected) { 1052adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1053adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1054adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c = Cipher.getInstance("DES/CBC/NoPadding"); 1055459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom c.init(Cipher.ENCRYPT_MODE, CIPHER_KEY_DES); 1056459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom int len1 = c.doFinal(b, 0, 16).length; 1057459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom assertEquals(16, len1); 1058459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom c.init(Cipher.ENCRYPT_MODE, CIPHER_KEY_DES); 1059459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom int len2 = c.doFinal(b, 0, 16, b1, 0); 1060459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom assertEquals(16, len2); 1061adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1062d77eccc93cbf92c400ebd114ea8e91413b882d69Brian Carlstrom AlgorithmParameterSpec ap = new IvParameterSpec(IV); 1063adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c = Cipher.getInstance("DES/CBC/PKCS5Padding"); 1064459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom c.init(Cipher.DECRYPT_MODE, CIPHER_KEY_DES, ap); 1065adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1066adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.doFinal(b1, 0, 24); 1067937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 1068937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (BadPaddingException expected) { 1069adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1070adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1071adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1072adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_doFinal$BII$B() throws Exception { 1073adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe 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}; 1074adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] b1 = new byte[30]; 1075f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1076adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Cipher c = Cipher.getInstance("DES/CBC/NoPadding"); 1077459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom c.init(Cipher.ENCRYPT_MODE, CIPHER_KEY_DES); 1078adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1079adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.doFinal(b, 0, 10, b1); 1080937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 1081937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (IllegalBlockSizeException expected) { 1082adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1083adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1084adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c = Cipher.getInstance("DES/CBC/NoPadding"); 1085adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1086adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.doFinal(b, 0, 10, b1); 1087937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 1088937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (IllegalStateException expected) { 1089adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1090adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1091adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c = Cipher.getInstance("DES/CBC/NoPadding"); 1092459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom c.init(Cipher.ENCRYPT_MODE, CIPHER_KEY_DES); 1093459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom int len = c.doFinal(b, 0, 16, b1); 1094459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom assertEquals(16, len); 1095adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1096d77eccc93cbf92c400ebd114ea8e91413b882d69Brian Carlstrom AlgorithmParameterSpec ap = new IvParameterSpec(IV); 1097adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c = Cipher.getInstance("DES/CBC/PKCS5Padding"); 1098459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom c.init(Cipher.DECRYPT_MODE, CIPHER_KEY_DES, ap); 1099adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.doFinal(b1, 0, 24, new byte[42]); 1101937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 1102937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (BadPaddingException expected) { 1103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project b1 = new byte[6]; 1106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c = Cipher.getInstance("DESede"); 1107459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom c.init(Cipher.ENCRYPT_MODE, CIPHER_KEY_3DES); 1108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.doFinal(b, 3, 6, b1); 1110937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 1111937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (ShortBufferException expected) { 1112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_update$B() throws Exception { 1116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Cipher cipher = Cipher.getInstance("DESEDE/CBC/PKCS5Padding"); 1117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project cipher.update(new byte[64]); 1119937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 1120937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (IllegalStateException expected) { 1121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_() throws Exception { 1125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe 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}; 1126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] b1 = new byte[30]; 1127f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Cipher c = Cipher.getInstance("DES/CBC/NoPadding"); 1129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.update(b, 0, 10, b1); 1132937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 1133937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (IllegalStateException expected) { 1134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c = Cipher.getInstance("DES/CBC/NoPadding"); 1137459a8ccbcc3dfde730780244e2122a734858aceeBrian Carlstrom c.init(Cipher.ENCRYPT_MODE, CIPHER_KEY_DES); 1138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.update(b, 0, 16, b1); 1139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project b1 = new byte[3]; 1141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.update(b, 3, 15, b1); 1144937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom fail(); 1145937b6c4ef5f8ad57279e2ebed4393a78d1729d8bBrian Carlstrom } catch (ShortBufferException expected) { 1146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project class testCipher extends Cipher { 1150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project testCipher(CipherSpi c, Provider p, String s) { 1151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(c, p, s); 1152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 1155