1/*
2 * Copyright (C) 2007 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package tests.security.interfaces;
18
19import junit.framework.TestCase;
20
21import java.math.BigInteger;
22import java.security.interfaces.DSAKeyPairGenerator;
23import java.security.interfaces.DSAParams;
24import java.security.SecureRandom;
25import java.security.spec.DSAParameterSpec;
26import java.security.InvalidParameterException;
27
28import org.apache.harmony.security.tests.support.interfaces.DSAKeyPairGeneratorImpl;
29
30public class DSAKeyPairGeneratorTest extends TestCase {
31
32    private final BigInteger p = new BigInteger("4");
33    private final BigInteger q = BigInteger.TEN;
34    private final BigInteger g = BigInteger.ZERO;
35
36
37    class MyDSA extends DSAKeyPairGeneratorImpl {
38        public MyDSA(DSAParams dsaParams) {
39            super(dsaParams);
40        }
41    }
42
43    /**
44     * java.security.interfaces.DSAKeyPairGenerator
45     * #initialize(DSAParams params, SecureRandom random)
46     */
47    public void test_DSAKeyPairGenerator01() {
48        DSAParams dsaParams = new DSAParameterSpec(p, q, g);
49        SecureRandom random = null;
50        MyDSA dsa = new MyDSA(dsaParams);
51        try {
52            random = SecureRandom.getInstance("SHA1PRNG");
53        } catch (Exception e) {
54            fail("Unexpected exception for SecureRandom: " + e);
55        }
56
57        try {
58            dsa.initialize(dsaParams, random);
59        } catch (Exception e) {
60            fail("Unexpected exception: " + e);
61        }
62
63        try {
64            dsa.initialize(dsaParams, null);
65            fail("InvalidParameterException was not thrown");
66        } catch (InvalidParameterException ipe) {
67            //expected
68        } catch (Exception e) {
69            fail(e + " was thrown instead of InvalidParameterException");
70        }
71        try {
72            dsa.initialize(null, random);
73            fail("InvalidParameterException was not thrown");
74        } catch (InvalidParameterException ipe) {
75            //expected
76        } catch (Exception e) {
77            fail(e + " was thrown instead of InvalidParameterException");
78        }
79    }
80
81    /**
82     * java.security.interfaces.DSAKeyPairGenerator
83     * #initialize(int modlen, boolean genParams, SecureRandom randomm)
84     */
85    public void test_DSAKeyPairGenerator02() {
86        int[] invalidLen = {-1, 0, 511, 513, 650, 1023, 1025};
87        DSAParams dsaParams = new DSAParameterSpec(p, q, g);
88        SecureRandom random = null;
89        MyDSA dsa = new MyDSA(null);
90        try {
91            random = SecureRandom.getInstance("SHA1PRNG");
92        } catch (Exception e) {
93            fail("Unexpected exception for SecureRandom: " + e);
94        }
95
96        //exception case
97        try {
98            dsa.initialize(520, false, random);
99            fail("InvalidParameterException was not thrown");
100        } catch (InvalidParameterException ipe) {
101            String str = ipe.getMessage();
102            if (!str.equals("there are not precomputed parameters")) {
103                fail("Incorrect exception's message: " + str);
104            }
105        } catch (Exception e) {
106            fail(e + " was thrown instead of InvalidParameterException");
107        }
108
109        //exception case
110        for (int i = 0; i < invalidLen.length; i++) {
111            try {
112                dsa.initialize(invalidLen[i], true, random);
113                fail("InvalidParameterException was not thrown");
114            } catch (InvalidParameterException ipe) {
115                String str = ipe.getMessage();
116                if (!str.equals("Incorrect modlen")) {
117                    fail("Incorrect exception's message: " + str);
118                }
119            } catch (Exception e) {
120                fail(e + " was thrown instead of InvalidParameterException");
121            }
122        }
123
124        //positive case
125        dsa = new MyDSA(dsaParams);
126        try {
127            dsa.initialize(520, true, random);
128        } catch (Exception e) {
129            fail(e + " was thrown for subcase 1");
130        }
131
132        //positive case
133        try {
134            dsa.initialize(520, false, random);
135        } catch (Exception e) {
136            fail(e + " was thrown for subcase 1");
137        }
138    }
139}
140