1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/*
2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  Licensed to the Apache Software Foundation (ASF) under one or more
3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  contributor license agreements.  See the NOTICE file distributed with
4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  this work for additional information regarding copyright ownership.
5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  The ASF licenses this file to You under the Apache License, Version 2.0
6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  (the "License"); you may not use this file except in compliance with
7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  the License.  You may obtain a copy of the License at
8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  See the License for the specific language governing permissions and
15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  limitations under the License.
16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/**
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project* @author Vera Y. Petrashkova
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project* @version $Revision$
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project*/
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage org.apache.harmony.crypto.tests.javax.crypto;
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.InvalidKeyException;
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Key;
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.NoSuchAlgorithmException;
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.NoSuchProviderException;
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Provider;
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.SecureRandom;
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.spec.InvalidKeySpecException;
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.spec.KeySpec;
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.crypto.KeyGenerator;
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.crypto.SecretKey;
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.crypto.SecretKeyFactory;
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.crypto.SecretKeyFactorySpi;
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.crypto.spec.DESKeySpec;
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.crypto.spec.DESedeKeySpec;
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.crypto.spec.SecretKeySpec;
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.crypto.tests.support.MySecretKeyFactorySpi;
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.tests.support.SpiEngUtils;
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestCase;
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/**
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Tests for <code>SecretKeyFactory</code> class constructors and methods.
49f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes *
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class SecretKeyFactoryTest extends TestCase {
52f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static final String srvSecretKeyFactory = "SecretKeyFactory";
54f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static String defaultAlgorithm1 = "DESede";
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static String defaultAlgorithm2 = "DES";
57f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static String defaultAlgorithm = null;
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static String defaultProviderName = null;
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static Provider defaultProvider = null;
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static final String[] invalidValues = SpiEngUtils.invalidValues;
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static final String[] validValues = new String[2];
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static boolean DEFSupported = false;
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static final String NotSupportMsg = "Default algorithm is not supported";
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    static {
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        defaultProvider = SpiEngUtils.isSupport(defaultAlgorithm1,
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                srvSecretKeyFactory);
74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        DEFSupported = (defaultProvider != null);
75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (DEFSupported) {
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            defaultAlgorithm = defaultAlgorithm1;
77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            validValues[0] = defaultAlgorithm.toUpperCase();
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            validValues[1] = defaultAlgorithm.toLowerCase();
79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            defaultProviderName = defaultProvider.getName();
80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } else {
81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            defaultProvider = SpiEngUtils.isSupport(defaultAlgorithm2,
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    srvSecretKeyFactory);
83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            DEFSupported = (defaultProvider != null);
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (DEFSupported) {
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                defaultAlgorithm = defaultAlgorithm2;
86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                validValues[0] = defaultAlgorithm.toUpperCase();
87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                validValues[2] = defaultAlgorithm.toLowerCase();
88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                defaultProviderName = defaultProvider.getName();
89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } else {
90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                defaultAlgorithm = null;
91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                defaultProviderName = null;
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                defaultProvider = null;
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected SecretKeyFactory[] createSKFac() {
98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!DEFSupported) {
99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail(defaultAlgorithm + " algorithm is not supported");
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        SecretKeyFactory[] skF = new SecretKeyFactory[3];
103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            skF[0] = SecretKeyFactory.getInstance(defaultAlgorithm);
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            skF[1] = SecretKeyFactory.getInstance(defaultAlgorithm,
106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    defaultProvider);
107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            skF[2] = SecretKeyFactory.getInstance(defaultAlgorithm,
108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    defaultProviderName);
109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return skF;
110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            e.printStackTrace();
112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test for <code>SecretKeyFactory</code> constructor
118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion: returns SecretKeyFactory object
119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testSecretKeyFactory01() throws NoSuchAlgorithmException,
121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            InvalidKeySpecException, InvalidKeyException {
122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!DEFSupported) {
123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail(NotSupportMsg);
124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        SecretKeyFactorySpi spi = new MySecretKeyFactorySpi();
127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        SecretKeyFactory secKF = new mySecretKeyFactory(spi, defaultProvider,
128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                defaultAlgorithm);
129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Incorrect algorithm", secKF.getAlgorithm(),
130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                defaultAlgorithm);
131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Incorrect provider", secKF.getProvider(), defaultProvider);
132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Incorrect result", secKF.generateSecret(null));
133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Incorrect result", secKF.getKeySpec(null, null));
134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Incorrect result", secKF.translateKey(null));
135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        secKF = new mySecretKeyFactory(null, null, null);
136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Algorithm must be null", secKF.getAlgorithm());
137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Provider must be null", secKF.getProvider());
138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            secKF.translateKey(null);
140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("NullPointerException must be thrown");
141f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        } catch (NullPointerException e) {
142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
146f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * Test for <code>getInstance(String algorithm)</code> method
147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertions:
148f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * throws NullPointerException when algorithm is null;
149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * throws NoSuchAlgorithmException when algorithm has invalid value
150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testSecretKeyFactory02() throws NoSuchAlgorithmException {
152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            SecretKeyFactory.getInstance(null);
154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("NullPointerException or NoSuchAlgorithmException should be thrown if algorithm is null");
155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NoSuchAlgorithmException e) {
157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < invalidValues.length; i++) {
159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                SecretKeyFactory.getInstance(invalidValues[i]);
161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("NoSuchAlgorithmException was not thrown as expected");
162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (NoSuchAlgorithmException e) {
163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test for <code>getInstance(String algorithm)</code> method
169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion: returns SecretKeyObject
170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testSecretKeyFactory03() throws NoSuchAlgorithmException {
172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!DEFSupported) {
173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail(NotSupportMsg);
174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < validValues.length; i++) {
177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            SecretKeyFactory secKF = SecretKeyFactory
178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .getInstance(validValues[i]);
179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals("Incorrect algorithm", secKF.getAlgorithm(),
180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    validValues[i]);
181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test for <code>getInstance(String algorithm, String provider)</code>
186f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * method
187f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * Assertion:
188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * throws NullPointerException when algorithm is null;
189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * throws NoSuchAlgorithmException when algorithm is invalid
190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testSecretKeyFactory04() throws NoSuchAlgorithmException,
192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            NoSuchProviderException {
193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!DEFSupported) {
194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail(NotSupportMsg);
195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            SecretKeyFactory.getInstance(null, defaultProviderName);
199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("NullPointerException or NoSuchAlgorithmException should be thrown if algorithm is null");
200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NoSuchAlgorithmException e) {
202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < invalidValues.length; i++) {
204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                SecretKeyFactory.getInstance(invalidValues[i],
206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        defaultProviderName);
207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("NoSuchAlgorithmException was not thrown as expected (algorithm: "
208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        .concat(invalidValues[i]).concat(")"));
209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (NoSuchAlgorithmException e) {
210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test for <code>getInstance(String algorithm, String provider)</code>
216f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * method
217f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * Assertion:
218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * throws IllegalArgumentException when provider is null or empty;
219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * throws NoSuchProviderException when provider has invalid value
220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testSecretKeyFactory05() throws NoSuchAlgorithmException,
222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            NoSuchProviderException {
223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!DEFSupported) {
224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail(NotSupportMsg);
225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String prov = null;
228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < validValues.length; i++) {
229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                SecretKeyFactory.getInstance(validValues[i], prov);
231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("IllegalArgumentException was not thrown as expected (algorithm: "
232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        .concat(validValues[i]).concat(" provider: null"));
233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (IllegalArgumentException e) {
234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                SecretKeyFactory.getInstance(validValues[i], "");
237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("IllegalArgumentException was not thrown as expected (algorithm: "
238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        .concat(validValues[i]).concat(" provider: empty"));
239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (IllegalArgumentException e) {
240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            for (int j = 1; j < invalidValues.length; j++) {
242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                try {
243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    SecretKeyFactory.getInstance(validValues[i],
244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                            invalidValues[j]);
245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    fail("NoSuchProviderException was not thrown as expected (algorithm: "
246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                            .concat(validValues[i]).concat(" provider: ")
247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                            .concat(invalidValues[j]).concat(")"));
248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                } catch (NoSuchProviderException e) {
249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test for <code>getInstance(String algorithm, String provider)</code>
256f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * method
257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion: returns SecretKeyFactory object
258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testSecretKeyFactory06() throws NoSuchProviderException,
260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            NoSuchAlgorithmException {
261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!DEFSupported) {
262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail(NotSupportMsg);
263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < validValues.length; i++) {
266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            SecretKeyFactory secKF = SecretKeyFactory.getInstance(
267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    validValues[i], defaultProviderName);
268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals("Incorrect algorithm", secKF.getAlgorithm(),
269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    validValues[i]);
270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals("Incorrect provider", secKF.getProvider().getName(),
271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    defaultProviderName);
272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test for <code>getInstance(String algorithm, Provider provider)</code>
277f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * method
278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion: throws NullPointerException when algorithm is null;
279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * throws NoSuchAlgorithmException when algorithm is invalid
280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testSecretKeyFactory07() throws NoSuchAlgorithmException {
282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!DEFSupported) {
283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail(NotSupportMsg);
284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            SecretKeyFactory.getInstance(null, defaultProvider);
288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("NullPointerException or NoSuchAlgorithmException should be thrown if algorithm is null");
289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NoSuchAlgorithmException e) {
291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < invalidValues.length; i++) {
293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                SecretKeyFactory.getInstance(invalidValues[i], defaultProvider);
295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("NoSuchAlgorithmException was not thrown as expected (algorithm: "
296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        .concat(invalidValues[i]).concat(")"));
297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (NoSuchAlgorithmException e) {
298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test for <code>getInstance(String algorithm, Provider provider)</code>
304f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * method
305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion: throws IllegalArgumentException when provider is null
306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testSecretKeyFactory08() throws NoSuchAlgorithmException {
308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!DEFSupported) {
309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail(NotSupportMsg);
310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Provider prov = null;
313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < validValues.length; i++) {
314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                SecretKeyFactory.getInstance(validValues[i], prov);
316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("IllegalArgumentException was not thrown as expected (provider is null, algorithm: "
317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        .concat(validValues[i]).concat(")"));
318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (IllegalArgumentException e) {
319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test for <code>getInstance(String algorithm, Provider provider)</code>
325f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * method
326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion: returns SecretKeyFactory object
327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testSecretKeyFactory09() throws NoSuchAlgorithmException {
329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!DEFSupported) {
330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail(NotSupportMsg);
331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < validValues.length; i++) {
334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            SecretKeyFactory secKF = SecretKeyFactory.getInstance(
335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    validValues[i], defaultProvider);
336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals("Incorrect algorithm", secKF.getAlgorithm(),
337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    validValues[i]);
338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals("Incorrect provider", secKF.getProvider(),
339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    defaultProvider);
340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test for <code>generateSecret(KeySpec keySpec)</code> and
345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <code>getKeySpec(SecretKey key, Class keySpec)
346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * methods
347f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * Assertion:
348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * throw InvalidKeySpecException if parameter is inappropriate
349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testSecretKeyFactory10() throws InvalidKeyException,
351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            InvalidKeySpecException {
352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!DEFSupported) {
353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail(NotSupportMsg);
354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] bb = new byte[24];
357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        KeySpec ks = (defaultAlgorithm.equals(defaultAlgorithm2) ? (KeySpec)new DESKeySpec(bb) :
358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            (KeySpec)new DESedeKeySpec(bb));
359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        KeySpec rks = null;
360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        SecretKeySpec secKeySpec = new SecretKeySpec(bb, defaultAlgorithm);
361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        SecretKey secKey = null;
362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        SecretKeyFactory[] skF = createSKFac();
363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull("SecretKeyFactory object were not created", skF);
364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < skF.length; i++) {
365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                skF[i].generateSecret(null);
367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("generateSecret(null): InvalidKeySpecException must be thrown");
368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (InvalidKeySpecException e) {
369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            secKey = skF[i].generateSecret(ks);
372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                skF[i].getKeySpec(null, null);
374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("getKeySpec(null,null): InvalidKeySpecException must be thrown");
375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (InvalidKeySpecException e) {
376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                skF[i].getKeySpec(null, ks.getClass());
379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("getKeySpec(null, Class): InvalidKeySpecException must be thrown");
380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (InvalidKeySpecException e) {
381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                skF[i].getKeySpec(secKey, null);
384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("getKeySpec(secKey, null): NullPointerException or InvalidKeySpecException must be thrown");
385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (InvalidKeySpecException e) {
386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                // Expected
387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (NullPointerException e) {
388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                // Expected
389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
390f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                Class c;
393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                if (defaultAlgorithm.equals(defaultAlgorithm2)) {
394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    c = DESedeKeySpec.class;
395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                } else {
396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    c = DESKeySpec.class;
397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                skF[i].getKeySpec(secKeySpec, c);
399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("getKeySpec(secKey, Class): InvalidKeySpecException must be thrown");
400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (InvalidKeySpecException e) {
401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
402f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes            rks = skF[i].getKeySpec(secKeySpec, ks.getClass());
403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (defaultAlgorithm.equals(defaultAlgorithm1)) {
404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                assertTrue("Incorrect getKeySpec() result 1",
405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        rks instanceof DESedeKeySpec);
406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } else {
407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                assertTrue("Incorrect getKeySpec() result 1",
408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        rks instanceof DESKeySpec);
409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            rks = skF[i].getKeySpec(secKey, ks.getClass());
412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (defaultAlgorithm.equals(defaultAlgorithm1)) {
413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                assertTrue("Incorrect getKeySpec() result 2",
414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        rks instanceof DESedeKeySpec);
415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } else {
416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                assertTrue("Incorrect getKeySpec() result 2",
417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        rks instanceof DESKeySpec);
418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getAlgorithm() throws NoSuchAlgorithmException {
423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < validValues.length; i++) {
424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            SecretKeyFactory secKF = SecretKeyFactory
425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .getInstance(validValues[i]);
426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals("Incorrect algorithm", secKF.getAlgorithm(),
427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    validValues[i]);
428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
429f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Mock_SecretKeyFactory msf = new Mock_SecretKeyFactory(null, null, null);
431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull(msf.getAlgorithm());
432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
433f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    class Mock_SecretKeyFactory extends SecretKeyFactory{
435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected Mock_SecretKeyFactory(SecretKeyFactorySpi arg0, Provider arg1, String arg2) {
436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            super(arg0, arg1, arg2);
437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
439f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getProvider() throws NoSuchAlgorithmException {
441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < validValues.length; i++) {
442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            SecretKeyFactory secKF = SecretKeyFactory
443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .getInstance(validValues[i]);
444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNotNull(secKF.getProvider());
445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
446f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Mock_SecretKeyFactory msf = new Mock_SecretKeyFactory(null, null, null);
448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull(msf.getProvider());
449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_translateKeyLjavax_crypto_SecretKey()
452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throws NoSuchAlgorithmException, InvalidKeyException {
453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        KeyGenerator kg = null;
454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Key key = null;
455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        SecretKeyFactory secKF = null;
456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < validValues.length; i++) {
458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            secKF = SecretKeyFactory
459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .getInstance(validValues[i]);
460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNotNull(secKF.getProvider());
461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            kg = KeyGenerator.getInstance(secKF.getAlgorithm());
462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            kg.init(new SecureRandom());
463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            key = kg.generateKey();
464f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            secKF.translateKey((SecretKey) key);
466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
467adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            secKF.translateKey(null);
469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("InvalidKeyException expected");
470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (InvalidKeyException e) {
471adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            //expected
472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
473adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectclass mySecretKeyFactory extends SecretKeyFactory {
477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public mySecretKeyFactory(SecretKeyFactorySpi spi, Provider prov, String alg) {
478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        super(spi, prov, alg);
479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
481