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