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.security.tests.java.security;
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.AlgorithmParameters;
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.AlgorithmParametersSpi;
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.KeyPair;
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.KeyPairGenerator;
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.NoSuchAlgorithmException;
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.NoSuchProviderException;
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Provider;
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.SecureRandom;
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.tests.java.security.AlgorithmParametersTest.MyAlgorithmParameters;
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.tests.java.security.AlgorithmParametersTest.myAlgP;
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.tests.support.SpiEngUtils;
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestCase;
39229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/**
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Tests for KeyPairGenerator class
42f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes *
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class KeyPairGenerator3Test extends TestCase {
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static String validProviderName = null;
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static Provider validProvider = null;
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static boolean DSASupported = false;
51f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static String NotSupportMsg = KeyPairGenerator1Test.NotSupportMsg;
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    static {
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        validProvider = SpiEngUtils.isSupport(
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                KeyPairGenerator1Test.validAlgName,
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                KeyPairGenerator1Test.srvKeyPairGenerator);
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        DSASupported = (validProvider != null);
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        validProviderName = (DSASupported ? validProvider.getName() : null);
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected KeyPairGenerator[] createKPGen() {
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!DSASupported) {
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail(KeyPairGenerator1Test.validAlgName
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    + " algorithm is not supported");
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        KeyPairGenerator[] kpg = new KeyPairGenerator[3];
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            kpg[0] = KeyPairGenerator
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .getInstance(KeyPairGenerator1Test.validAlgName);
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            kpg[1] = KeyPairGenerator.getInstance(
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    KeyPairGenerator1Test.validAlgName, validProvider);
74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            kpg[2] = KeyPairGenerator.getInstance(
75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    KeyPairGenerator1Test.validAlgName, validProviderName);
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return kpg;
77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            e.printStackTrace();
79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
83f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test for <code>generateKeyPair()</code> and <code>genKeyPair()</code>
86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * methods
87f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * Assertion: KeyPairGenerator was initialized before the invocation
88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * of these methods
89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testGenKeyPair01() throws NoSuchAlgorithmException,
91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            NoSuchProviderException, IllegalArgumentException {
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!DSASupported) {
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail(NotSupportMsg);
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        KeyPairGenerator[] kpg = createKPGen();
97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull("KeyPairGenerator objects were not created", kpg);
98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        KeyPair kp, kp1;
99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        SecureRandom rr = new SecureRandom();
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < kpg.length; i++) {
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            kpg[i].initialize(512, rr);
102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            kp = kpg[i].generateKeyPair();
103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            kp1 = kpg[i].genKeyPair();
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertFalse("Incorrect private key", kp.getPrivate().equals(
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    kp1.getPrivate()));
106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertFalse("Incorrect public key", kp.getPublic().equals(
107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    kp1.getPublic()));
108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
110f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test for <code>generateKeyPair()</code> and <code>genKeyPair()</code>
113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * methods
114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion: these methods are used without previously initialization
115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testGenKeyPair02() throws NoSuchAlgorithmException,
117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            NoSuchProviderException, IllegalArgumentException {
118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!DSASupported) {
119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail(NotSupportMsg);
120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        KeyPairGenerator[] kpg = createKPGen();
123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull("KeyPairGenerator objects were not created", kpg);
124f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        KeyPair kp, kp1;
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < kpg.length; i++) {
126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            kp = kpg[i].generateKeyPair();
127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            kp1 = kpg[i].genKeyPair();
128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertFalse("Incorrect private key", kp.getPrivate().equals(
129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                kp1.getPrivate()));
130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertFalse("Incorrect public key", kp.getPublic().equals(
131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                kp1.getPublic()));
132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
134f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
136f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * Test for <code>KeyPairGenerator</code> constructor
137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion: returns KeyPairGenerator object
138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testKeyPairGeneratorConst() {
140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String[] alg = {null, "", "AsDfGh!#$*", "DSA", "RSA"};
141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        MykeyPGen kpg;
142f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < alg.length; i++) {
144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                kpg = new MykeyPGen(alg[i]);
146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                assertNotNull(kpg);
147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                assertTrue(kpg instanceof KeyPairGenerator);
148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (Exception e){
149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("Exception should not be thrown");
150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Additional class to verify KeyPairGenerator constructor
156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    class MykeyPGen extends KeyPairGenerator {
158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public MykeyPGen(String alg) {
159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            super(alg);
160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
163