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/** 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code KeyPairGenerator} is an engine class which is capable of generating a 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * private key and its related public key utilizing the algorithm it was 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * initialized with. 282f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes * 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see KeyPairGeneratorSpi 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic abstract class KeyPairGenerator extends KeyPairGeneratorSpi { 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Store KeyPairGenerator SERVICE name 34f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes private static final String SERVICE = "KeyPairGenerator"; 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Used to access common engine functionality 370a480846a9798c763b088a122ab0dcd3dc3a17b6Brian Carlstrom private static final Engine ENGINE = new Engine(SERVICE); 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Store SecureRandom 400a480846a9798c763b088a122ab0dcd3dc3a17b6Brian Carlstrom private static final SecureRandom RANDOM = new SecureRandom(); 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Store used provider 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private Provider provider; 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Store used algorithm 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private String algorithm; 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new instance of {@code KeyPairGenerator} with the name of 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the algorithm to use. 512f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes * 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param algorithm 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the name of algorithm to use 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected KeyPairGenerator(String algorithm) { 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.algorithm = algorithm; 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the name of the algorithm of this {@code KeyPairGenerator}. 612f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes * 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the name of the algorithm of this {@code KeyPairGenerator} 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String getAlgorithm() { 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return algorithm; 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a new instance of {@code KeyPairGenerator} that utilizes the 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * specified algorithm. 71f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param algorithm 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the name of the algorithm to use 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a new instance of {@code KeyPairGenerator} that utilizes the 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * specified algorithm 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NoSuchAlgorithmException if the specified algorithm is not available 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code algorithm} is {@code null} 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static KeyPairGenerator getInstance(String algorithm) 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws NoSuchAlgorithmException { 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (algorithm == null) { 8386acc043d3334651ee26c65467d78d6cefedd397Kenny Root throw new NullPointerException("algorithm == null"); 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 856cdb6b7e6939270ccd21790ec95e42197cefc0c3Brian Carlstrom Engine.SpiAndProvider sap = ENGINE.getInstance(algorithm, null); 866cdb6b7e6939270ccd21790ec95e42197cefc0c3Brian Carlstrom Object spi = sap.spi; 876cdb6b7e6939270ccd21790ec95e42197cefc0c3Brian Carlstrom Provider provider = sap.provider; 880a480846a9798c763b088a122ab0dcd3dc3a17b6Brian Carlstrom if (spi instanceof KeyPairGenerator) { 890a480846a9798c763b088a122ab0dcd3dc3a17b6Brian Carlstrom KeyPairGenerator result = (KeyPairGenerator) spi; 900a480846a9798c763b088a122ab0dcd3dc3a17b6Brian Carlstrom result.algorithm = algorithm; 910a480846a9798c763b088a122ab0dcd3dc3a17b6Brian Carlstrom result.provider = provider; 922f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes return result; 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 940a480846a9798c763b088a122ab0dcd3dc3a17b6Brian Carlstrom return new KeyPairGeneratorImpl((KeyPairGeneratorSpi) spi, provider, algorithm); 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a new instance of {@code KeyPairGenerator} that utilizes the 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * specified algorithm from the specified provider. 100f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param algorithm 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the name of the algorithm to use 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param provider 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the name of the provider 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a new instance of {@code KeyPairGenerator} that utilizes the 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * specified algorithm from the specified provider 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NoSuchAlgorithmException if the specified algorithm is not available 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NoSuchProviderException if the specified provider is not available 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code algorithm} is {@code null} 111897538a36c18f4db8f9f68ee566aec0bda842e9fElliott Hughes * @throws IllegalArgumentException if {@code provider == null || provider.isEmpty()} 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static KeyPairGenerator getInstance(String algorithm, String provider) 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws NoSuchAlgorithmException, NoSuchProviderException { 115897538a36c18f4db8f9f68ee566aec0bda842e9fElliott Hughes if (provider == null || provider.isEmpty()) { 116897538a36c18f4db8f9f68ee566aec0bda842e9fElliott Hughes throw new IllegalArgumentException(); 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Provider impProvider = Security.getProvider(provider); 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (impProvider == null) { 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new NoSuchProviderException(provider); 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getInstance(algorithm, impProvider); 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a new instance of {@code KeyPairGenerator} that utilizes the 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * specified algorithm from the specified provider. 128f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param algorithm 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the name of the algorithm to use 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param provider 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the provider 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a new instance of {@code KeyPairGenerator} that utilizes the 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * specified algorithm from the specified provider 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NoSuchAlgorithmException if the specified algorithm is not available 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code algorithm} is {@code null} 138897538a36c18f4db8f9f68ee566aec0bda842e9fElliott Hughes * @throws IllegalArgumentException if {@code provider == null} 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static KeyPairGenerator getInstance(String algorithm, 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Provider provider) throws NoSuchAlgorithmException { 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (provider == null) { 143cff1616012dc0d56c2da9af2b9b1183e76c7e044Elliott Hughes throw new IllegalArgumentException("provider == null"); 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (algorithm == null) { 14686acc043d3334651ee26c65467d78d6cefedd397Kenny Root throw new NullPointerException("algorithm == null"); 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1486cdb6b7e6939270ccd21790ec95e42197cefc0c3Brian Carlstrom Object spi = ENGINE.getInstance(algorithm, provider, null); 1490a480846a9798c763b088a122ab0dcd3dc3a17b6Brian Carlstrom if (spi instanceof KeyPairGenerator) { 1500a480846a9798c763b088a122ab0dcd3dc3a17b6Brian Carlstrom KeyPairGenerator result = (KeyPairGenerator) spi; 1510a480846a9798c763b088a122ab0dcd3dc3a17b6Brian Carlstrom result.algorithm = algorithm; 1520a480846a9798c763b088a122ab0dcd3dc3a17b6Brian Carlstrom result.provider = provider; 1532f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes return result; 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1550a480846a9798c763b088a122ab0dcd3dc3a17b6Brian Carlstrom return new KeyPairGeneratorImpl((KeyPairGeneratorSpi) spi, provider, algorithm); 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the provider associated with this {@code KeyPairGenerator}. 1602f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes * 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the provider associated with this {@code KeyPairGenerator} 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final Provider getProvider() { 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return provider; 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Initializes this {@code KeyPairGenerator} with the given key size. The 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * default parameter set and a default {@code SecureRandom} instance will be 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * used. 1712f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes * 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param keysize 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the size of the key (number of bits) 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void initialize(int keysize) { 1760a480846a9798c763b088a122ab0dcd3dc3a17b6Brian Carlstrom initialize(keysize, RANDOM); 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Initializes this {@code KeyPairGenerator} with the given {@code 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * AlgorithmParameterSpec}. A default {@code SecureRandom} instance will be 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * used. 1832f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes * 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param param 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the parameters to use 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws InvalidAlgorithmParameterException 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the specified parameters are not supported 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void initialize(AlgorithmParameterSpec param) 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws InvalidAlgorithmParameterException { 1910a480846a9798c763b088a122ab0dcd3dc3a17b6Brian Carlstrom initialize(param, RANDOM); 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Computes and returns a new unique {@code KeyPair} each time this method 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * is called. 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This does exactly the same as {@link #generateKeyPair()}. 1992f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes * 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a new unique {@code KeyPair} each time this method is called 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final KeyPair genKeyPair() { 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return generateKeyPair(); 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Computes and returns a new unique {@code KeyPair} each time this method 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * is called. 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This does exactly the same as {@link #genKeyPair()}. 2112f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes * 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a new unique {@code KeyPair} each time this method is called 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 2142f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes @Override 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public KeyPair generateKeyPair() { 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Initializes this {@code KeyPairGenerator} with the given key size and the 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * given {@code SecureRandom}. The default parameter set will be used. 2222f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes * 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param keysize 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the key size 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param random 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the source of randomness 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 2282f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes @Override 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void initialize(int keysize, SecureRandom random) { 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Initializes this {@code KeyPairGenerator} with the given {@code 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * AlgorithmParameterSpec} and the given {@code SecureRandom}. 2352f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes * 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param param 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the parameters to use 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param random 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the source of randomness 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws InvalidAlgorithmParameterException 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the specified parameters are not supported 242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 2432f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes @Override 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void initialize(AlgorithmParameterSpec param, SecureRandom random) 245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws InvalidAlgorithmParameterException { 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 249f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Internal class: KeyPairGenerator implementation 251f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static class KeyPairGeneratorImpl extends KeyPairGenerator { 254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Save KeyPairGeneratorSpi 255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private KeyPairGeneratorSpi spiImpl; 256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private KeyPairGeneratorImpl(KeyPairGeneratorSpi keyPairGeneratorSpi, 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Provider provider, String algorithm) { 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(algorithm); 260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super.provider = provider; 261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project spiImpl = keyPairGeneratorSpi; 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // implementation of initialize(int keysize, SecureRandom random) 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // using corresponding spi initialize() method 2662f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes @Override 267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void initialize(int keysize, SecureRandom random) { 268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project spiImpl.initialize(keysize, random); 269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // implementation of generateKeyPair() 272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // using corresponding spi generateKeyPair() method 2732f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes @Override 274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public KeyPair generateKeyPair() { 275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return spiImpl.generateKeyPair(); 276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // implementation of initialize(int keysize, SecureRandom random) 279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // using corresponding spi initialize() method 2802f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes @Override 281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void initialize(AlgorithmParameterSpec param, SecureRandom random) 282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws InvalidAlgorithmParameterException { 283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project spiImpl.initialize(param, random); 284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2882f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes} 289