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 Projectpackage java.security;
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.spec.AlgorithmParameterSpec;
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.fortress.Engine;
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/**
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code AlgorithmParameterGenerator} is an engine class which is capable of
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * generating parameters for the algorithm it was initialized with.
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class AlgorithmParameterGenerator {
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    // Store spi service name
30f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes    private static final String SERVICE = "AlgorithmParameterGenerator";
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    // Used to access common engine functionality
330a480846a9798c763b088a122ab0dcd3dc3a17b6Brian Carlstrom    private static final Engine ENGINE = new Engine(SERVICE);
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    // Store SecureRandom
360a480846a9798c763b088a122ab0dcd3dc3a17b6Brian Carlstrom    private static final SecureRandom RANDOM = new SecureRandom();
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    // Store used provider
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private final Provider provider;
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    // Store used AlgorithmParameterGeneratorSpi implementation
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private final AlgorithmParameterGeneratorSpi spiImpl;
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    //Store used algorithm
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private final String algorithm;
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Constructs a new instance of {@code AlgorithmParameterGenerator} with the
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * given arguments.
502f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes     *
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param paramGenSpi
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            a concrete implementation, this engine instance delegates to.
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param provider
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the provider.
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param algorithm
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the name of the algorithm.
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected AlgorithmParameterGenerator(
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            AlgorithmParameterGeneratorSpi paramGenSpi, Provider provider,
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            String algorithm) {
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        this.provider = provider;
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        this.algorithm = algorithm;
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        this.spiImpl = paramGenSpi;
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the name of the algorithm.
682f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes     *
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the name of the algorithm.
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final String getAlgorithm() {
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return algorithm;
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a new instance of {@code AlgorithmParameterGenerator} for the
77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * specified algorithm.
78f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param algorithm
80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the name of the algorithm to use.
81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return a new instance of {@code AlgorithmParameterGenerator} for the
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         specified algorithm.
83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws NoSuchAlgorithmException
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if the specified algorithm is not available.
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws NullPointerException
86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if {@code algorithm} is {@code null}.
87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static AlgorithmParameterGenerator getInstance(String algorithm)
89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throws NoSuchAlgorithmException {
90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (algorithm == null) {
9186acc043d3334651ee26c65467d78d6cefedd397Kenny Root            throw new NullPointerException("algorithm == null");
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
936cdb6b7e6939270ccd21790ec95e42197cefc0c3Brian Carlstrom        Engine.SpiAndProvider sap = ENGINE.getInstance(algorithm, null);
946cdb6b7e6939270ccd21790ec95e42197cefc0c3Brian Carlstrom        return new AlgorithmParameterGenerator((AlgorithmParameterGeneratorSpi) sap.spi,
956cdb6b7e6939270ccd21790ec95e42197cefc0c3Brian Carlstrom                                               sap.provider, algorithm);
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a new instance of {@code AlgorithmParameterGenerator} from the
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * specified provider for the specified algorithm.
101f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param algorithm
103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the name of the algorithm to use.
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param provider
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            name of the provider of the {@code
106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            AlgorithmParameterGenerator}.
107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return a new instance of {@code AlgorithmParameterGenerator} for the
108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         specified algorithm.
109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws NoSuchAlgorithmException
110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if the specified algorithm is not available.
111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws NoSuchProviderException
112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if the specified provider is not available.
113897538a36c18f4db8f9f68ee566aec0bda842e9fElliott Hughes     * @throws IllegalArgumentException if {@code provider == null || provider.isEmpty()}
114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws NullPointerException
115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if {@code algorithm} is {@code null}.
116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static AlgorithmParameterGenerator getInstance(String algorithm,
118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            String provider) throws NoSuchAlgorithmException,
119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            NoSuchProviderException {
120897538a36c18f4db8f9f68ee566aec0bda842e9fElliott Hughes        if (provider == null || provider.isEmpty()) {
121897538a36c18f4db8f9f68ee566aec0bda842e9fElliott Hughes            throw new IllegalArgumentException();
122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Provider impProvider = Security.getProvider(provider);
124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (impProvider == null) {
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throw new NoSuchProviderException(provider);
126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return getInstance(algorithm, impProvider);
128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a new instance of {@code AlgorithmParameterGenerator} from the
1320a64887ae9127d081fc6e312ba1f06f727453800Kenny Root     * specified provider for the specified algorithm. The {@code provider}
1330a64887ae9127d081fc6e312ba1f06f727453800Kenny Root     * supplied does not have to be registered.
134f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param algorithm
136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the name of the algorithm to use.
137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param provider
138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the provider of the {@code AlgorithmParameterGenerator}.
139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return a new instance of {@code AlgorithmParameterGenerator} for the
140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         specified algorithm.
141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws NoSuchAlgorithmException
142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if the specified algorithm is not available.
143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws NullPointerException
144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if {@code algorithm} is {@code null}.
145897538a36c18f4db8f9f68ee566aec0bda842e9fElliott Hughes     * @throws IllegalArgumentException if {@code provider == null}
146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static AlgorithmParameterGenerator getInstance(String algorithm,
148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Provider provider) throws NoSuchAlgorithmException {
149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (provider == null) {
150cff1616012dc0d56c2da9af2b9b1183e76c7e044Elliott Hughes            throw new IllegalArgumentException("provider == null");
151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (algorithm == null) {
15386acc043d3334651ee26c65467d78d6cefedd397Kenny Root            throw new NullPointerException("algorithm == null");
154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1556cdb6b7e6939270ccd21790ec95e42197cefc0c3Brian Carlstrom        Object spi = ENGINE.getInstance(algorithm, provider, null);
1566cdb6b7e6939270ccd21790ec95e42197cefc0c3Brian Carlstrom        return new AlgorithmParameterGenerator((AlgorithmParameterGeneratorSpi) spi, provider,
1576cdb6b7e6939270ccd21790ec95e42197cefc0c3Brian Carlstrom                                               algorithm);
158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the provider associated with this {@code
162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * AlgorithmParameterGenerator}.
1632f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes     *
164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the provider associated with this {@code
165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         AlgorithmParameterGenerator}.
166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final Provider getProvider() {
168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return provider;
169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Initializes this {@code AlgorithmParameterGenerator} with the given size.
173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The default parameter set and a default {@code SecureRandom} instance
174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * will be used.
1752f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes     *
176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param size
177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the size (in number of bits).
178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void init(int size) {
1800a480846a9798c763b088a122ab0dcd3dc3a17b6Brian Carlstrom        spiImpl.engineInit(size, RANDOM);
181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Initializes this {@code AlgorithmParameterGenerator} with the given size
185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * and the given {@code SecureRandom}. The default parameter set will be
186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * used.
1872f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes     *
188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param size
189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the size (in number of bits).
190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param random
191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the source of randomness.
192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void init(int size, SecureRandom random) {
194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        spiImpl.engineInit(size, random);
195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Initializes this {@code AlgorithmParameterGenerator} with the given {@code
199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * AlgorithmParameterSpec}. A default {@code SecureRandom} instance will be
200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * used.
2012f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes     *
202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param genParamSpec
203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the parameters to use.
204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws InvalidAlgorithmParameterException
205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if the specified parameters are not supported.
206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void init(AlgorithmParameterSpec genParamSpec)
208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throws InvalidAlgorithmParameterException {
2090a480846a9798c763b088a122ab0dcd3dc3a17b6Brian Carlstrom        spiImpl.engineInit(genParamSpec, RANDOM);
210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Initializes this {@code AlgorithmParameterGenerator} with the given
214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * {@code AlgorithmParameterSpec} and the given {@code SecureRandom}.
2152f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes     *
216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param genParamSpec
217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the parameters to use.
218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param random
219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the source of randomness.
220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws InvalidAlgorithmParameterException
221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if the specified parameters are not supported.
222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void init(AlgorithmParameterSpec genParamSpec,
224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            SecureRandom random) throws InvalidAlgorithmParameterException {
225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        spiImpl.engineInit(genParamSpec, random);
226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Computes and returns {@code AlgorithmParameters} for this generator's
230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * algorithm.
2312f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes     *
232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return {@code AlgorithmParameters} for this generator's algorithm.
233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final AlgorithmParameters generateParameters() {
235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return spiImpl.engineGenerateParameters();
236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
2372f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes}
238