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 Boris V. Kuznetsov
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.io.IOException;
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.math.BigInteger;
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.AlgorithmParameters;
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.AlgorithmParametersSpi;
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Provider;
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Security;
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.spec.AlgorithmParameterSpec;
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.spec.DSAParameterSpec;
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.spec.InvalidParameterSpecException;
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Arrays;
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.NoSuchAlgorithmException;
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.NoSuchProviderException;
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestCase;
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.tests.support.MyAlgorithmParameterGeneratorSpi;
41229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/**
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Tests for <code>AlgorithmParameters</code> class constructors and
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * methods.
45f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes *
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class AlgorithmParametersTest extends TestCase {
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Provider
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    Provider p;
53f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /*
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @see TestCase#setUp()
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected void setUp() throws Exception {
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        super.setUp();
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        p = new MyProvider();
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Security.insertProviderAt(p, 1);
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /*
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @see TestCase#tearDown()
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected void tearDown() throws Exception {
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        super.tearDown();
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Security.removeProvider(p.getName());
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
72229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.AlgorithmParameters#getAlgorithm()
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getAlgorithm() throws Exception {
75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // test: null value
77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        AlgorithmParameters ap = new DummyAlgorithmParameters(null, p, null);
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull(ap.getAlgorithm());
79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // test: not null value
81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ap = new DummyAlgorithmParameters(null, p, "AAA");
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("AAA", ap.getAlgorithm());
83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
86229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.AlgorithmParameters#getEncoded()
87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getEncoded() throws Exception {
89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        final byte[] enc = new byte[] { 0x02, 0x01, 0x03 };
91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        MyAlgorithmParameters paramSpi = new MyAlgorithmParameters() {
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            protected byte[] engineGetEncoded() throws IOException {
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                return enc;
95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        };
97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        AlgorithmParameters params = new DummyAlgorithmParameters(paramSpi, p,
99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "algorithm");
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //
102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // test: IOException if not initialized
103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            params.getEncoded();
106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("should not get encoded from un-initialized instance");
107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // expected
109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //
112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // test: corresponding spi method is invoked
113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //
114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        params.init(new MyAlgorithmParameterSpec());
115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertSame(enc, params.getEncoded());
116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
119229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.AlgorithmParameters#getEncoded(String)
120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getEncodedLjava_lang_String() throws Exception {
122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        final byte[] enc = new byte[] { 0x02, 0x01, 0x03 };
124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        final String strFormatParam = "format";
126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        MyAlgorithmParameters paramSpi = new MyAlgorithmParameters() {
128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            protected byte[] engineGetEncoded(String format) throws IOException {
129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                assertEquals(strFormatParam, format);
130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                return enc;
131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        };
133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        AlgorithmParameters params = new DummyAlgorithmParameters(paramSpi, p,
135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "algorithm");
136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //
138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // test: IOException if not initialized
139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //
140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            params.getEncoded(strFormatParam);
142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("should not get encoded from un-initialized instance");
143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // expected
145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //
148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // test: corresponding spi method is invoked
149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //
150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        params.init(new MyAlgorithmParameterSpec());
151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertSame(enc, params.getEncoded(strFormatParam));
152f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //
154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // test: if format param is null
155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Regression test for HARMONY-2680
156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //
157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        paramSpi = new MyAlgorithmParameters() {
158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            protected byte[] engineGetEncoded(String format) throws IOException {
159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                assertNull(format); // null is passed to spi-provider
160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                return enc;
161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        };
163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        params = new DummyAlgorithmParameters(paramSpi, p, "algorithm");
165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        params.init(new MyAlgorithmParameterSpec());
166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertSame(enc, params.getEncoded(null));
167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
170229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.AlgorithmParameters#getInstance(String)
171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getInstanceLjava_lang_String() {
173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String[] str = {"", "qwertyu", "!@#$%^&*()"};
174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            AlgorithmParameters ap = AlgorithmParameters.getInstance("ABC");
176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            checkUnititialized(ap);
177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ap.init(new MyAlgorithmParameterSpec());
178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            checkAP(ap, p);
179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected exception");
181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
182f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for(int i = 0; i < str.length; i++) {
184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                AlgorithmParameters ap = AlgorithmParameters.getInstance(str[i]);
186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("NoSuchAlgorithmException was not thrown for parameter " + str[i]);
187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (NoSuchAlgorithmException nsae) {
188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                //expected
189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
194229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.AlgorithmParameters#getInstance(String, String)
195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getInstanceLjava_lang_StringLjava_lang_String() {
197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String[] alg = {"", "qwertyu", "!@#$%^&*()"};
198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String[] prv = {"", null};
199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String[] prv1 = {"1234567890", "qwertyu", "!@#$%^&*()"};
200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            AlgorithmParameters ap = AlgorithmParameters.getInstance("ABC", "MyProvider");
202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            checkUnititialized(ap);
203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ap.init(new byte[6]);
204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            checkAP(ap, p);
205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected exception");
207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
208f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < alg.length; i++) {
210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                AlgorithmParameters ap = AlgorithmParameters.getInstance(alg[i], "MyProvider");
212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("NoSuchAlgorithmException was not thrown for parameter " + alg[i]);
213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (NoSuchAlgorithmException nsae) {
214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                //expected
215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (Exception e) {
216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("Incorrect exception " + e + " was thrown for " + alg[i]);
217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
219f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < prv.length; i++) {
221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                AlgorithmParameters ap = AlgorithmParameters.getInstance("ABC", prv[i]);
223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("IllegalArgumentException was not thrown for parameter " + prv[i]);
224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (IllegalArgumentException iae) {
225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                //expected
226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (Exception e) {
227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("Incorrect exception " + e + " was thrown for " + prv[i]);
228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
230f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < prv1.length; i++) {
232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                AlgorithmParameters ap = AlgorithmParameters.getInstance("ABC", prv1[i]);
234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("NoSuchProviderException was not thrown for parameter " + prv1[i]);
235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (NoSuchProviderException nspe) {
236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                //expected
237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (Exception e) {
238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("Incorrect exception " + e + " was thrown for " + prv1[i]);
239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
244229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.AlgorithmParameters#getParameterSpec(Class)
245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getParameterSpecLjava_lang_Class() throws Exception {
247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        final MyAlgorithmParameterSpec myParamSpec = new MyAlgorithmParameterSpec();
249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        MyAlgorithmParameters paramSpi = new MyAlgorithmParameters() {
251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            protected AlgorithmParameterSpec engineGetParameterSpec(
252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    Class paramSpec) {
253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                return myParamSpec;
254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        };
256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        AlgorithmParameters params = new DummyAlgorithmParameters(paramSpi, p,
258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "algorithm");
259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //
261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // test: InvalidParameterSpecException if not initialized
262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //
263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            params.getParameterSpec(null);
265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("No expected InvalidParameterSpecException");
266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (InvalidParameterSpecException e) {
267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // expected
268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            params.getParameterSpec(MyAlgorithmParameterSpec.class);
271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("No expected InvalidParameterSpecException");
272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (InvalidParameterSpecException e) {
273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // expected
274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //
277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // test: corresponding spi method is invoked
278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //
279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        params.init(new MyAlgorithmParameterSpec());
280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertSame(myParamSpec, params
281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getParameterSpec(MyAlgorithmParameterSpec.class));
282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //
284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // test: if paramSpec is null
285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Regression test for HARMONY-2733
286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //
287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        paramSpi = new MyAlgorithmParameters() {
288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            protected AlgorithmParameterSpec engineGetParameterSpec(
290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    Class paramSpec) {
291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                assertNull(paramSpec); // null is passed to spi-provider
292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                return null;
293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        };
295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        params = new DummyAlgorithmParameters(paramSpi, p, "algorithm");
297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        params.init(new MyAlgorithmParameterSpec());
298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull(params.getParameterSpec(null));
299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
302229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.AlgorithmParameters#getInstance(String, Provider)
303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getInstanceLjava_lang_StringLjava_security_Provider() {
305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String[] alg = {"", "qwertyu", "!@#$%^&*()"};
306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Provider pp = null;
307f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            AlgorithmParameters ap = AlgorithmParameters.getInstance("ABC", p);
310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            checkUnititialized(ap);
311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ap.init(new byte[6], "aaa");
312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            checkAP(ap, p);
313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e){
314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected exception");
315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
316f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < alg.length; i++) {
318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                AlgorithmParameters ap = AlgorithmParameters.getInstance(alg[i], p);
320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("NoSuchAlgorithmException was not thrown for parameter " + alg[i]);
321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (NoSuchAlgorithmException nsae) {
322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                //expected
323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (Exception e) {
324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("Incorrect exception " + e + " was thrown for " + alg[i]);
325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
327f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            AlgorithmParameters ap = AlgorithmParameters.getInstance("ABC", pp);
330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("IllegalArgumentException was not thrown for NULL provider");
331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IllegalArgumentException iae) {
332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            //expected
333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e){
334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Incorrect exception " + e + " was thrown");
335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
339229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.AlgorithmParameters#getProvider()
340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getProvider() throws Exception {
342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // test: null value
343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        AlgorithmParameters ap = new DummyAlgorithmParameters(null, null, "AAA");
344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull(ap.getProvider());
345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // test: not null value
347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ap = new DummyAlgorithmParameters(null, p, "AAA");
348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertSame(p, ap.getProvider());
349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
352229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.AlgorithmParameters#init(java.security.spec.AlgorithmParameterSpec)
353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_initLjava_security_spec_AlgorithmParameterSpec()
355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throws Exception {
356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //
358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // test: corresponding spi method is invoked
359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //
360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        final MyAlgorithmParameterSpec spec = new MyAlgorithmParameterSpec();
361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        MyAlgorithmParameters paramSpi = new MyAlgorithmParameters() {
363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            protected void engineInit(AlgorithmParameterSpec paramSpec)
364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    throws InvalidParameterSpecException {
365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                assertSame(spec, paramSpec);
366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                runEngineInit_AlgParamSpec = true;
367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        };
369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        AlgorithmParameters params = new DummyAlgorithmParameters(paramSpi, p,
371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "algorithm");
372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        params.init(spec);
374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(paramSpi.runEngineInit_AlgParamSpec);
375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //
377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // test: InvalidParameterSpecException if already initialized
378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //
379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            params.init(spec);
381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("No expected InvalidParameterSpecException");
382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (InvalidParameterSpecException e) {
383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // expected
384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        params = new DummyAlgorithmParameters(paramSpi, p, "algorithm");
387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        params.init(new byte[0]);
388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            params.init(spec);
390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("No expected InvalidParameterSpecException");
391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (InvalidParameterSpecException e) {
392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // expected
393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        params = new DummyAlgorithmParameters(paramSpi, p, "algorithm");
396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        params.init(new byte[0], "format");
397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            params.init(spec);
399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("No expected InvalidParameterSpecException");
400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (InvalidParameterSpecException e) {
401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // expected
402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //
405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // test: if paramSpec is null
406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //
407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        paramSpi = new MyAlgorithmParameters() {
408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            protected void engineInit(AlgorithmParameterSpec paramSpec)
410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    throws InvalidParameterSpecException {
411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                assertNull(paramSpec);// null is passed to spi-provider
412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                runEngineInit_AlgParamSpec = true;
413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        };
415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        params = new DummyAlgorithmParameters(paramSpi, p, "algorithm");
417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        params.init((AlgorithmParameterSpec) null);
418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(paramSpi.runEngineInit_AlgParamSpec);
419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
422229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.AlgorithmParameters#init(byte[])
423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_init$B() throws Exception {
425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //
427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // test: corresponding spi method is invoked
428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //
429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        final byte[] enc = new byte[] { 0x02, 0x01, 0x03 };
430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        MyAlgorithmParameters paramSpi = new MyAlgorithmParameters() {
432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            protected void engineInit(byte[] params) throws IOException {
433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                runEngineInitB$ = true;
434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                assertSame(enc, params);
435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        };
437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        AlgorithmParameters params = new DummyAlgorithmParameters(paramSpi, p,
439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "algorithm");
440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        params.init(enc);
442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(paramSpi.runEngineInitB$);
443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //
445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // test: IOException if already initialized
446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //
447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            params.init(enc);
449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("No expected IOException");
450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // expected
452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        params = new DummyAlgorithmParameters(paramSpi, p, "algorithm");
455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        params.init(new MyAlgorithmParameterSpec());
456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            params.init(enc);
458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("No expected IOException");
459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // expected
461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        params = new DummyAlgorithmParameters(paramSpi, p, "algorithm");
464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        params.init(enc, "format");
465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            params.init(enc);
467adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("No expected IOException");
468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // expected
470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
471adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //
473adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // test: if params is null
474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //
475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        paramSpi = new MyAlgorithmParameters() {
476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            protected void engineInit(byte[] params) throws IOException {
478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                runEngineInitB$ = true;
479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                assertNull(params); // null is passed to spi-provider
480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        };
482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        params = new DummyAlgorithmParameters(paramSpi, p, "algorithm");
484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        params.init((byte[]) null);
485adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(paramSpi.runEngineInitB$);
486adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
488adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
489229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.AlgorithmParameters#init(byte[],String)
490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_init$BLjava_lang_String() throws Exception {
492adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //
494adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // test: corresponding spi method is invoked
495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //
496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        final byte[] enc = new byte[] { 0x02, 0x01, 0x03 };
497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        final String strFormatParam = "format";
498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        MyAlgorithmParameters paramSpi = new MyAlgorithmParameters() {
500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            protected void engineInit(byte[] params, String format)
501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    throws IOException {
502adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                runEngineInitB$String = true;
504adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                assertSame(enc, params);
505adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                assertSame(strFormatParam, format);
506adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
507adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        };
508adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
509adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        AlgorithmParameters params = new DummyAlgorithmParameters(paramSpi, p,
510adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "algorithm");
511adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
512adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        params.init(enc, strFormatParam);
513adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(paramSpi.runEngineInitB$String);
514adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
515adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //
516adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // test: IOException if already initialized
517adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //
518adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
519adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            params.init(enc, strFormatParam);
520adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("No expected IOException");
521adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
522adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // expected
523adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
524adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
525adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        params = new DummyAlgorithmParameters(paramSpi, p, "algorithm");
526adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        params.init(new MyAlgorithmParameterSpec());
527adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
528adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            params.init(enc, strFormatParam);
529adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("No expected IOException");
530adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
531adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // expected
532adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
533adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
534adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        params = new DummyAlgorithmParameters(paramSpi, p, "algorithm");
535adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        params.init(enc);
536adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
537adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            params.init(enc, strFormatParam);
538adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("No expected IOException");
539adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
540adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // expected
541adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
542adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
543adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //
544adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // test: if params and format are null
545adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Regression test for HARMONY-2724
546adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //
547adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        paramSpi = new MyAlgorithmParameters() {
548adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
549adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            protected void engineInit(byte[] params, String format)
550adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    throws IOException {
551adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
552adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                runEngineInitB$String = true;
553adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
554adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                // null is passed to spi-provider
555adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                assertNull(params);
556adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                assertNull(format);
557adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
558adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        };
559adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
560adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        params = new DummyAlgorithmParameters(paramSpi, p, "algorithm");
561adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        params.init(null, null);
562adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(paramSpi.runEngineInitB$String);
563adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
564adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
565adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
566229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.AlgorithmParameters#toString()
567adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
568adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_toString() throws Exception {
569adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
570adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        final String str = "AlgorithmParameters";
571adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
572adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        MyAlgorithmParameters paramSpi = new MyAlgorithmParameters() {
573adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            protected String engineToString() {
574adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                return str;
575adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
576adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        };
577adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
578adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        AlgorithmParameters params = new DummyAlgorithmParameters(paramSpi, p,
579adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "algorithm");
580adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
581adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("unititialized", params.toString());
582adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
583adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        params.init(new byte[0]);
584adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
585adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertSame(str, params.toString());
586adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
587adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
588adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
589adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Tests DSA AlgorithmParameters provider
590adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
591adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testDSAProvider() throws Exception {
592adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        AlgorithmParameters params = AlgorithmParameters.getInstance("DSA");
593adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
594adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Algorithm", "DSA", params.getAlgorithm());
595adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
596adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // init(AlgorithmParameterSpec)
597adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        BigInteger p = BigInteger.ONE;
598adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        BigInteger q = BigInteger.TEN;
599adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        BigInteger g = BigInteger.ZERO;
600adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        params.init(new DSAParameterSpec(p, q, g));
601adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
602adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // getEncoded() and getEncoded(String) (TODO verify returned encoding)
603adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] enc = params.getEncoded();
604adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull(enc);
605adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull(params.getEncoded("ASN.1"));
606adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // TODO assertNotNull(params.getEncoded(null)); // HARMONY-2680
607adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
608adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // getParameterSpec(Class)
609adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        DSAParameterSpec spec = params.getParameterSpec(DSAParameterSpec.class);
610adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("p is wrong ", p, spec.getP());
611adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("q is wrong ", q, spec.getQ());
612adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("g is wrong ", g, spec.getG());
613adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
614adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // init(byte[])
615adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        params = AlgorithmParameters.getInstance("DSA");
616adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        params.init(enc);
617adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("param encoded is different", Arrays.equals(enc, params
618adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getEncoded()));
619adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
620adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // init(byte[], String)
621adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        params = AlgorithmParameters.getInstance("DSA");
622adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        params.init(enc, "ASN.1");
623adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("param encoded is different", Arrays.equals(enc, params
624adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getEncoded()));
625adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
626adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        params = AlgorithmParameters.getInstance("DSA");
627adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
628adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            params.init(enc, "DOUGLASMAWSON");
6292f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes            fail("unsupported format should have raised IOException");
630adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
631adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // expected
632adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
633adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
634adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
635adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
636adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Tests OAEP AlgorithmParameters provider
637adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
638adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testOAEPProvider() throws Exception {
639adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        AlgorithmParameters params = AlgorithmParameters.getInstance("OAEP");
640adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
641adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Algorithm", "OAEP", params.getAlgorithm());
642adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
643f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
644adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
645f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * Test for <code>AlgorithmParameters</code> constructor
646adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion: returns AlgorithmParameters object
647adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
648adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testAlgorithmParametersConst() throws Exception {
649adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        AlgorithmParametersSpi spi = new MyAlgorithmParameters();
650adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        AlgorithmParameters ap = new myAlgP(spi, p, "ABC");
651adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
652adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        checkUnititialized(ap);
653adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ap.init(new byte[6], "aaa");
654adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        checkAP(ap, p);
655f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
656adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //NULL parameters
657adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
658adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ap = new myAlgP(null, null, null);
659adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e){
660adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Exception should be not thrown");
661adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
662adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
663f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
664adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private void checkUnititialized(AlgorithmParameters ap) {
665adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Uninitialized: toString() failed", ap.toString());
666adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
667f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
668adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private void checkAP(AlgorithmParameters ap, Provider p) throws Exception {
669adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
670adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertSame("getProvider() failed", p, ap.getProvider());
671adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("getAlgorithm() failed", "ABC", ap.getAlgorithm());
672adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
673adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("AlgorithmParameters", ap.toString());
674adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("toString() failed", MyAlgorithmParameters.runEngineToString);
675adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
676adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
677adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @SuppressWarnings("serial")
678adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private class MyProvider extends Provider {
679adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        MyProvider() {
680adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            super("MyProvider", 1.0, "Provider for testing");
681adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            put("AlgorithmParameters.ABC", MyAlgorithmParameters.class
682adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .getName());
683adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
684adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
685adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        MyProvider(String name, double version, String info) {
686adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            super(name, version, info);
687adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
688adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
689f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
690adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private class MyAlgorithmParameterSpec implements java.security.spec.AlgorithmParameterSpec{
691adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
692f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
693adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private class DummyAlgorithmParameters extends AlgorithmParameters {
694f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        public DummyAlgorithmParameters(AlgorithmParametersSpi paramSpi,
695adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                Provider provider, String algorithm) {
696adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            super(paramSpi, provider, algorithm);
697adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
698adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
699f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
700adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static class MyAlgorithmParameters extends AlgorithmParametersSpi {
701adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
702adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public boolean runEngineInit_AlgParamSpec = false;
703adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
704adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public boolean runEngineInitB$ = false;
705adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
706adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public boolean runEngineInitB$String = false;
707adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
708adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public static boolean runEngineToString = false;
709adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
710adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected void engineInit(AlgorithmParameterSpec paramSpec)
711adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                throws InvalidParameterSpecException {
712adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
713adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
714adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected void engineInit(byte[] params) throws IOException {
715adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
716adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
717adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected void engineInit(byte[] params, String format)
718adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                throws IOException {
719adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
720adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
721adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected AlgorithmParameterSpec engineGetParameterSpec(Class paramSpec)
722adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                throws InvalidParameterSpecException {
723adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
724adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
725adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
726adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected byte[] engineGetEncoded() throws IOException {
727adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
728adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
729adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
730adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected byte[] engineGetEncoded(String format) throws IOException {
731adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
732adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
733adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
734adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected String engineToString() {
735adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            runEngineToString = true;
736adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return "AlgorithmParameters";
737adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
738adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
739f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
740adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
741adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Additional class to verify AlgorithmParameters constructor
742adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
743adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    class myAlgP extends AlgorithmParameters {
744adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public myAlgP(AlgorithmParametersSpi spi, Provider prov, String alg) {
745adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            super(spi, prov, alg);
746adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
747adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
748adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
749