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 javax.crypto; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.InvalidKeyException; 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.NoSuchAlgorithmException; 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.NoSuchProviderException; 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Provider; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Security; 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.spec.InvalidKeySpecException; 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.spec.KeySpec; 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.fortress.Engine; 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The public API for {@code SecretKeyFactory} implementations. 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Secret key factories provide the following functionality: 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <ul> 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>convert {@link SecretKey} objects to and from {@link KeySpec} objects</li> 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>translate {@link SecretKey} objects from one provider implementation to 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * another</li> 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </ul> 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Which key specifications are supported by the {@link #generateSecret} and 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@link #getKeySpec} is provider dependent. 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class SecretKeyFactory { 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Used to access common engine functionality 450a480846a9798c763b088a122ab0dcd3dc3a17b6Brian Carlstrom private static final Engine ENGINE = new Engine("SecretKeyFactory"); 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Store used provider 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private final Provider provider; 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Store used spi implementation 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private final SecretKeyFactorySpi spiImpl; 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Store used algorithm name 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private final String algorithm; 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Creates a new {@code SecretKeyFactory} 58ce9ec01c0b6da3f3ba01e9c81cc3e5a461aabfb6Jesse Wilson * 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param keyFacSpi 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the SPI delegate. 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param provider 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the provider providing this key factory. 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param algorithm 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the algorithm name for the secret key. 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected SecretKeyFactory(SecretKeyFactorySpi keyFacSpi, 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Provider provider, String algorithm) { 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.provider = provider; 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.algorithm = algorithm; 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.spiImpl = keyFacSpi; 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the name of the secret key algorithm. 75ce9ec01c0b6da3f3ba01e9c81cc3e5a461aabfb6Jesse Wilson * 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the name of the secret key algorithm. 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final String getAlgorithm() { 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return algorithm; 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the provider for this {@code SecretKeyFactory} instance. 84ce9ec01c0b6da3f3ba01e9c81cc3e5a461aabfb6Jesse Wilson * 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the provider for this {@code SecretKeyFactory} instance. 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final Provider getProvider() { 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return provider; 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Creates a new {@code SecretKeyFactory} instance for the specified key 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * algorithm. 94ce9ec01c0b6da3f3ba01e9c81cc3e5a461aabfb6Jesse Wilson * 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param algorithm 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the name of the key algorithm. 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a secret key factory for the specified key algorithm. 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NoSuchAlgorithmException 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if no installed provider can provide the requested algorithm. 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the specified algorithm is {@code null}. 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final SecretKeyFactory getInstance(String algorithm) 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws NoSuchAlgorithmException { 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (algorithm == null) { 10686acc043d3334651ee26c65467d78d6cefedd397Kenny Root throw new NullPointerException("algorithm == null"); 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1086cdb6b7e6939270ccd21790ec95e42197cefc0c3Brian Carlstrom Engine.SpiAndProvider sap = ENGINE.getInstance(algorithm, null); 1096cdb6b7e6939270ccd21790ec95e42197cefc0c3Brian Carlstrom return new SecretKeyFactory((SecretKeyFactorySpi) sap.spi, sap.provider, algorithm); 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Creates a new {@code SecretKeyFactory} instance for the specified key 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * algorithm from the specified {@code provider}. 115ce9ec01c0b6da3f3ba01e9c81cc3e5a461aabfb6Jesse Wilson * 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param algorithm 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the name of the key algorithm. 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param provider 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the name of the provider that provides the requested 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * algorithm. 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a secret key factory for the specified key algorithm from the 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * specified provider. 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NoSuchAlgorithmException 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the specified provider cannot provide the requested 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * algorithm. 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NoSuchProviderException 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the specified provider does not exist. 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the specified provider name is {@code null} or empty. 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final SecretKeyFactory getInstance(String algorithm, 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String provider) throws NoSuchAlgorithmException, 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project NoSuchProviderException { 13480a7fbab52b96c9fd47c72f8987d1babe2cd001dElliott Hughes if (provider == null || provider.isEmpty()) { 13580a7fbab52b96c9fd47c72f8987d1babe2cd001dElliott Hughes throw new IllegalArgumentException("Provider is null or empty"); 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Provider impProvider = Security.getProvider(provider); 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (impProvider == null) { 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new NoSuchProviderException(provider); 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getInstance(algorithm, impProvider); 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Creates a new {@code SecretKeyFactory} instance for the specified key 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * algorithm from the specified provider. 147ce9ec01c0b6da3f3ba01e9c81cc3e5a461aabfb6Jesse Wilson * 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param algorithm 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the name of the key algorithm. 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param provider 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the provider that provides the requested algorithm. 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a secret key factory for the specified key algorithm from the 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * specified provider. 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NoSuchAlgorithmException 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the specified provider cannot provider the requested 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * algorithm. 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the specified provider is {@code null}. 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * is the specified algorithm name is {@code null}. 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final SecretKeyFactory getInstance(String algorithm, 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Provider provider) throws NoSuchAlgorithmException { 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (provider == null) { 16580a7fbab52b96c9fd47c72f8987d1babe2cd001dElliott Hughes throw new IllegalArgumentException("provider == null"); 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (algorithm == null) { 16886acc043d3334651ee26c65467d78d6cefedd397Kenny Root throw new NullPointerException("algorithm == null"); 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1706cdb6b7e6939270ccd21790ec95e42197cefc0c3Brian Carlstrom Object spi = ENGINE.getInstance(algorithm, provider, null); 1716cdb6b7e6939270ccd21790ec95e42197cefc0c3Brian Carlstrom return new SecretKeyFactory((SecretKeyFactorySpi) spi, provider, algorithm); 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Generate a secret key from the specified key specification. 176ce9ec01c0b6da3f3ba01e9c81cc3e5a461aabfb6Jesse Wilson * 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param keySpec 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the key specification. 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a secret key. 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws InvalidKeySpecException 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the specified key specification cannot be used to generate 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * a secret key. 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final SecretKey generateSecret(KeySpec keySpec) 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws InvalidKeySpecException { 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return spiImpl.engineGenerateSecret(keySpec); 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the key specification of the specified secret key. 191ce9ec01c0b6da3f3ba01e9c81cc3e5a461aabfb6Jesse Wilson * 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param key 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the secret key to get the specification from. 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param keySpec 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the target key specification class. 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return an instance of the specified key specification class. 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws InvalidKeySpecException 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the specified secret key cannot be transformed into the 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * requested key specification. 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @SuppressWarnings("unchecked") 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final KeySpec getKeySpec(SecretKey key, Class keySpec) 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws InvalidKeySpecException { 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return spiImpl.engineGetKeySpec(key, keySpec); 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Translates the specified secret key into an instance of the corresponding 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * key from the provider of this key factory. 210ce9ec01c0b6da3f3ba01e9c81cc3e5a461aabfb6Jesse Wilson * 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param key 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the secret key to translate. 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the corresponding translated key. 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws InvalidKeyException 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the specified key cannot be translated using this key 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * factory. 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final SecretKey translateKey(SecretKey key) 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws InvalidKeyException { 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return spiImpl.engineTranslateKey(key); 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 22380a7fbab52b96c9fd47c72f8987d1babe2cd001dElliott Hughes} 224