1/*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements.  See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License.  You may obtain a copy of the License at
8 *
9 *     http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18package org.apache.harmony.security.tests.java.security;
19
20import java.security.KeyPairGenerator;
21import java.security.Provider;
22import java.security.SecureRandom;
23import java.security.Security;
24import java.security.spec.DSAParameterSpec;
25import java.security.interfaces.DSAPublicKey;
26import java.security.interfaces.DSAParams;
27
28public class KeyPairGenerator4Test extends junit.framework.TestCase {
29
30    /**
31     * java.security.KeyPairGenerator#genKeyPair()
32     */
33    public void test_genKeyPair() throws Exception {
34        KeyPairGenerator gen = KeyPairGenerator.getInstance("DSA");
35        gen.initialize(1024);
36        assertNotNull("KeyPair is null", gen.genKeyPair());
37    }
38
39    /**
40     * java.security.KeyPairGenerator#getAlgorithm()
41     */
42    public void test_getAlgorithm() throws Exception {
43        String alg = KeyPairGenerator.getInstance("DSA").getAlgorithm();
44        assertEquals("getAlgorithm returned unexpected value", "DSA", alg);
45    }
46
47    /**
48     * java.security.KeyPairGenerator#getInstance(java.lang.String)
49     */
50    public void test_getInstanceLjava_lang_String() throws Exception {
51        KeyPairGenerator.getInstance("DSA");
52    }
53
54    /**
55     * java.security.KeyPairGenerator#getInstance(java.lang.String,
56     *        java.lang.String)
57     */
58    public void test_getInstanceLjava_lang_StringLjava_lang_String()
59            throws Exception {
60
61        // Test1: Test with named provider
62        Provider[] providers = Security.getProviders("KeyPairGenerator.DSA");
63
64        for (int i = 0; i < providers.length; i++) {
65            KeyPairGenerator.getInstance("DSA", providers[i].getName());
66        }// end for
67
68        // Test2: Test with empty provider name - should raise
69        // IllegalArgumentException
70        try {
71            KeyPairGenerator.getInstance("DSA", "");
72            fail("Should have thrown IllegalArgumentException");
73        } catch (IllegalArgumentException e) {
74            // expected
75        }
76    }
77
78    /**
79     * java.security.KeyPairGenerator#getProvider()
80     */
81    public void test_getProvider() throws Exception {
82        Provider p = KeyPairGenerator.getInstance("DSA").getProvider();
83        assertNotNull("provider is null", p);
84    }
85
86    /**
87     * java.security.KeyPairGenerator#initialize(int)
88     */
89    public void test_initializeI() throws Exception {
90        KeyPairGenerator keyPair = KeyPairGenerator.getInstance("DSA");
91        keyPair.initialize(1024);
92    }
93
94    /**
95     * java.security.KeyPairGenerator#initialize(int,
96     *        java.security.SecureRandom)
97     */
98    public void test_initializeILjava_security_SecureRandom() throws Exception {
99        KeyPairGenerator keyPair = KeyPairGenerator.getInstance("DSA");
100        keyPair.initialize(1024, new SecureRandom());
101    }
102
103
104    /**
105     * java.security.KeyPairGenerator#initialize(java.security.spec.AlgorithmParameterSpec)
106     */
107    public void test_initializeLjava_security_spec_AlgorithmParameterSpec()
108            throws Exception {
109        // create DSAParams
110        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("DSA");
111        keyPairGenerator.initialize(1024);
112        DSAPublicKey key = (DSAPublicKey) keyPairGenerator.genKeyPair()
113                .getPublic();
114        DSAParams params = key.getParams();
115
116        KeyPairGenerator keyPair = KeyPairGenerator.getInstance("DSA");
117        keyPair.initialize(new DSAParameterSpec(params.getP(), params.getQ(),
118                params.getG()));
119    }
120
121    /**
122     * java.security.KeyPairGenerator#initialize(java.security.spec.AlgorithmParameterSpec,
123     *        java.security.SecureRandom)
124     */
125    public void test_initializeLjava_security_spec_AlgorithmParameterSpecLjava_security_SecureRandom()
126            throws Exception {
127        // create DSAParams
128        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("DSA");
129        keyPairGenerator.initialize(1024);
130        DSAPublicKey key = (DSAPublicKey) keyPairGenerator.genKeyPair()
131                .getPublic();
132        DSAParams params = key.getParams();
133
134        KeyPairGenerator keyPair = KeyPairGenerator.getInstance("DSA");
135        keyPair.initialize(new DSAParameterSpec(params.getP(), params.getQ(),
136                params.getG()), new SecureRandom());
137    }
138}
139