151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski/* 219b88cdf6c245d9a7d1e4996d494be4e14f546a6Sergio Giro * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. 351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This code is free software; you can redistribute it and/or modify it 651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * under the terms of the GNU General Public License version 2 only, as 751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * published by the Free Software Foundation. Oracle designates this 851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * particular file as subject to the "Classpath" exception as provided 951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * by Oracle in the LICENSE file that accompanied this code. 1051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 1151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This code is distributed in the hope that it will be useful, but WITHOUT 1251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 1351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 1451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * version 2 for more details (a copy is included in the LICENSE file that 1551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * accompanied this code). 1651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 1751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * You should have received a copy of the GNU General Public License version 1851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 2 along with this work; if not, write to the Free Software Foundation, 1951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 2051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 2151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 2251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * or visit www.oracle.com if you need additional information or have any 2351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * questions. 2451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 2551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 2651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskipackage java.security; 2751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 2851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiimport java.io.*; 2951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiimport java.security.spec.AlgorithmParameterSpec; 3051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiimport java.security.spec.InvalidParameterSpecException; 3151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 32491d88834d8af35b9701f92d972212d873dbb6a0Adam Vartanianimport sun.security.jca.Providers; 33491d88834d8af35b9701f92d972212d873dbb6a0Adam Vartanian 3451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski/** 3551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This class is used as an opaque representation of cryptographic parameters. 3651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 3719b88cdf6c245d9a7d1e4996d494be4e14f546a6Sergio Giro * <p>An {@code AlgorithmParameters} object for managing the parameters 3851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * for a particular algorithm can be obtained by 3919b88cdf6c245d9a7d1e4996d494be4e14f546a6Sergio Giro * calling one of the {@code getInstance} factory methods 4051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * (static methods that return instances of a given class). 4151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 4219b88cdf6c245d9a7d1e4996d494be4e14f546a6Sergio Giro * <p>Once an {@code AlgorithmParameters} object is obtained, it must be 4319b88cdf6c245d9a7d1e4996d494be4e14f546a6Sergio Giro * initialized via a call to {@code init}, using an appropriate parameter 4451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * specification or parameter encoding. 4551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 4651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p>A transparent parameter specification is obtained from an 4719b88cdf6c245d9a7d1e4996d494be4e14f546a6Sergio Giro * {@code AlgorithmParameters} object via a call to 4819b88cdf6c245d9a7d1e4996d494be4e14f546a6Sergio Giro * {@code getParameterSpec}, and a byte encoding of the parameters is 4919b88cdf6c245d9a7d1e4996d494be4e14f546a6Sergio Giro * obtained via a call to {@code getEncoded}. 5051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 51444325bf794144dcdc90ab594232be2def307ca1Przemyslaw Szczepaniak * <p> Android provides the following <code>AlgorithmParameters</code> algorithms: 52444325bf794144dcdc90ab594232be2def307ca1Przemyslaw Szczepaniak * <table> 53a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <thead> 54a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <tr> 55a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <th>Algorithm</th> 56a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <th>Supported API Levels</th> 57a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * </tr> 58a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * </thead> 59a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <tbody> 60a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <tr> 61a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <td>AES</td> 62a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <td>1+</td> 63a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * </tr> 64a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <tr> 65a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <td>BLOWFISH</td> 66a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <td>10+</td> 67a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * </tr> 68a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <tr> 696b6741fdfe5a44ab82be549e1e97ca868e2020b9Adam Vartanian * <td>ChaCha20</td> 706b6741fdfe5a44ab82be549e1e97ca868e2020b9Adam Vartanian * <td>28+</td> 716b6741fdfe5a44ab82be549e1e97ca868e2020b9Adam Vartanian * </tr> 726b6741fdfe5a44ab82be549e1e97ca868e2020b9Adam Vartanian * <tr> 73a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <td>DES</td> 74a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <td>1+</td> 75a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * </tr> 76a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <tr> 77a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <td>DESede</td> 78a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <td>1+</td> 79a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * </tr> 80a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <tr> 81a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <td>DH</td> 82a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <td>1+</td> 83a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * </tr> 84a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <tr> 85a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <td>DSA</td> 86a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <td>1+</td> 87a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * </tr> 88a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <tr> 89a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <td>EC</td> 90a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <td>26+</td> 91a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * </tr> 92a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <tr> 93a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <td>GCM</td> 94a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <td>22+</td> 95a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * </tr> 96a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <tr class="deprecated"> 97a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <td>IES</td> 98a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <td>1-8</td> 99a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * </tr> 100a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <tr> 101a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <td>OAEP</td> 102a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <td>1+</td> 103a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * </tr> 104a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <tr> 105a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <td>PBEwithHmacSHA1AndAES_128</td> 106a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <td>26+</td> 107a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * </tr> 108a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <tr> 109a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <td>PBEwithHmacSHA1AndAES_256</td> 110a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <td>26+</td> 111a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * </tr> 112a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <tr> 113a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <td>PBEwithHmacSHA224AndAES_128</td> 114a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <td>26+</td> 115a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * </tr> 116a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <tr> 117a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <td>PBEwithHmacSHA224AndAES_256</td> 118a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <td>26+</td> 119a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * </tr> 120a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <tr> 121a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <td>PBEwithHmacSHA256AndAES_128</td> 122a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <td>26+</td> 123a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * </tr> 124a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <tr> 125a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <td>PBEwithHmacSHA256AndAES_256</td> 126a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <td>26+</td> 127a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * </tr> 128a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <tr> 129a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <td>PBEwithHmacSHA384AndAES_128</td> 130a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <td>26+</td> 131a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * </tr> 132a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <tr> 133a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <td>PBEwithHmacSHA384AndAES_256</td> 134a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <td>26+</td> 135a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * </tr> 136a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <tr> 137a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <td>PBEwithHmacSHA512AndAES_128</td> 138a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <td>26+</td> 139a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * </tr> 140a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <tr> 141a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <td>PBEwithHmacSHA512AndAES_256</td> 142a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <td>26+</td> 143a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * </tr> 144a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <tr> 145a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <td>PKCS12PBE</td> 146a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <td>1+</td> 147a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * </tr> 148a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <tr> 149a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <td>PSS</td> 150a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * <td>1-8,24+</td> 151a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * </tr> 152a52aa9ffde23844fad4fd1980fdd129662afd0a4Adam Vartanian * </tbody> 153444325bf794144dcdc90ab594232be2def307ca1Przemyslaw Szczepaniak * </table> 154444325bf794144dcdc90ab594232be2def307ca1Przemyslaw Szczepaniak * 15551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * These algorithms are described in the <a href= 156309f9df28350e15445b9135e8b710fa2b34b5dc1Yi Kong * "{@docRoot}openjdk-redirect.html?v=8&path=/technotes/guides/security/StandardNames.html#AlgorithmParameters"> 15751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * AlgorithmParameters section</a> of the 15851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Java Cryptography Architecture Standard Algorithm Name Documentation. 15951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 16051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @author Jan Luehe 16151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 16251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 16351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.security.spec.AlgorithmParameterSpec 16451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.security.spec.DSAParameterSpec 16551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see KeyPairGenerator 16651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 16751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @since 1.2 16851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 16951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 17051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskipublic class AlgorithmParameters { 17151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 17251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski // The provider 17351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private Provider provider; 17451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 17551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski // The provider implementation (delegate) 17651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private AlgorithmParametersSpi paramSpi; 17751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 17851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski // The algorithm 17951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private String algorithm; 18051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 18151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski // Has this object been initialized? 18251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private boolean initialized = false; 18351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 18451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 18551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Creates an AlgorithmParameters object. 18651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 18751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param paramSpi the delegate 18851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param provider the provider 18951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param algorithm the algorithm 19051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 19151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski protected AlgorithmParameters(AlgorithmParametersSpi paramSpi, 19251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski Provider provider, String algorithm) 19351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski { 19451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this.paramSpi = paramSpi; 19551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this.provider = provider; 19651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this.algorithm = algorithm; 19751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 19851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 19951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 20051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns the name of the algorithm associated with this parameter object. 20151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 20251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the algorithm name. 20351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 20451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public final String getAlgorithm() { 20551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return this.algorithm; 20651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 20751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 20851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 20951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns a parameter object for the specified algorithm. 21051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 21151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> This method traverses the list of registered security Providers, 21251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * starting with the most preferred Provider. 21351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * A new AlgorithmParameters object encapsulating the 21451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * AlgorithmParametersSpi implementation from the first 21551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Provider that supports the specified algorithm is returned. 21651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 21751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> Note that the list of registered providers may be retrieved via 21851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * the {@link Security#getProviders() Security.getProviders()} method. 21951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 22051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> The returned parameter object must be initialized via a call to 22119b88cdf6c245d9a7d1e4996d494be4e14f546a6Sergio Giro * {@code init}, using an appropriate parameter specification or 22251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * parameter encoding. 22351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 22451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param algorithm the name of the algorithm requested. 22551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * See the AlgorithmParameters section in the <a href= 226309f9df28350e15445b9135e8b710fa2b34b5dc1Yi Kong * "{@docRoot}openjdk-redirect.html?v=8&path=/technotes/guides/security/StandardNames.html#AlgorithmParameters"> 22751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Java Cryptography Architecture Standard Algorithm Name Documentation</a> 22851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * for information about standard algorithm names. 22951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 23051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the new parameter object. 23151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 23251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @exception NoSuchAlgorithmException if no Provider supports an 23351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * AlgorithmParametersSpi implementation for the 23451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * specified algorithm. 23551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 23651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see Provider 23751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 23851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public static AlgorithmParameters getInstance(String algorithm) 23951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski throws NoSuchAlgorithmException { 24051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski try { 24151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski Object[] objs = Security.getImpl(algorithm, "AlgorithmParameters", 24251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski (String)null); 24351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return new AlgorithmParameters((AlgorithmParametersSpi)objs[0], 24451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski (Provider)objs[1], 24551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski algorithm); 24651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } catch(NoSuchProviderException e) { 24751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski throw new NoSuchAlgorithmException(algorithm + " not found"); 24851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 24951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 25051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 25151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 25251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns a parameter object for the specified algorithm. 25351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 25451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> A new AlgorithmParameters object encapsulating the 25551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * AlgorithmParametersSpi implementation from the specified provider 25651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * is returned. The specified provider must be registered 25751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * in the security provider list. 25851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 25951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> Note that the list of registered providers may be retrieved via 26051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * the {@link Security#getProviders() Security.getProviders()} method. 26151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 26251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p>The returned parameter object must be initialized via a call to 26319b88cdf6c245d9a7d1e4996d494be4e14f546a6Sergio Giro * {@code init}, using an appropriate parameter specification or 26451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * parameter encoding. 26551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 26651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param algorithm the name of the algorithm requested. 26751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * See the AlgorithmParameters section in the <a href= 268309f9df28350e15445b9135e8b710fa2b34b5dc1Yi Kong * "{@docRoot}openjdk-redirect.html?v=8&path=/technotes/guides/security/StandardNames.html#AlgorithmParameters"> 26951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Java Cryptography Architecture Standard Algorithm Name Documentation</a> 27051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * for information about standard algorithm names. 27151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 27251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param provider the name of the provider. 27351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 27451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the new parameter object. 27551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 27651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @exception NoSuchAlgorithmException if an AlgorithmParametersSpi 27751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * implementation for the specified algorithm is not 27851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * available from the specified provider. 27951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 28051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @exception NoSuchProviderException if the specified provider is not 28151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * registered in the security provider list. 28251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 28351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @exception IllegalArgumentException if the provider name is null 28451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * or empty. 28551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 28651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see Provider 28751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 28851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public static AlgorithmParameters getInstance(String algorithm, 28951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski String provider) 29051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski throws NoSuchAlgorithmException, NoSuchProviderException 29151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski { 29251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (provider == null || provider.length() == 0) 29351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski throw new IllegalArgumentException("missing provider"); 294491d88834d8af35b9701f92d972212d873dbb6a0Adam Vartanian // Android-added: Check for Bouncy Castle deprecation 295491d88834d8af35b9701f92d972212d873dbb6a0Adam Vartanian Providers.checkBouncyCastleDeprecation(provider, "AlgorithmParameters", algorithm); 29651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski Object[] objs = Security.getImpl(algorithm, "AlgorithmParameters", 29751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski provider); 29851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return new AlgorithmParameters((AlgorithmParametersSpi)objs[0], 29951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski (Provider)objs[1], 30051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski algorithm); 30151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 30251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 30351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 30451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns a parameter object for the specified algorithm. 30551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 30651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> A new AlgorithmParameters object encapsulating the 30751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * AlgorithmParametersSpi implementation from the specified Provider 30851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * object is returned. Note that the specified Provider object 30951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * does not have to be registered in the provider list. 31051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 31151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p>The returned parameter object must be initialized via a call to 31219b88cdf6c245d9a7d1e4996d494be4e14f546a6Sergio Giro * {@code init}, using an appropriate parameter specification or 31351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * parameter encoding. 31451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 31551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param algorithm the name of the algorithm requested. 31651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * See the AlgorithmParameters section in the <a href= 317309f9df28350e15445b9135e8b710fa2b34b5dc1Yi Kong * "{@docRoot}openjdk-redirect.html?v=8&path=/technotes/guides/security/StandardNames.html#AlgorithmParameters"> 31851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Java Cryptography Architecture Standard Algorithm Name Documentation</a> 31951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * for information about standard algorithm names. 32051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 32151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param provider the name of the provider. 32251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 32351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the new parameter object. 32451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 32551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @exception NoSuchAlgorithmException if an AlgorithmParameterGeneratorSpi 32651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * implementation for the specified algorithm is not available 32751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * from the specified Provider object. 32851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 32951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @exception IllegalArgumentException if the provider is null. 33051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 33151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see Provider 33251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 33351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @since 1.4 33451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 33551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public static AlgorithmParameters getInstance(String algorithm, 33651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski Provider provider) 33751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski throws NoSuchAlgorithmException 33851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski { 33951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (provider == null) 34051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski throw new IllegalArgumentException("missing provider"); 341491d88834d8af35b9701f92d972212d873dbb6a0Adam Vartanian // Android-added: Check for Bouncy Castle deprecation 342491d88834d8af35b9701f92d972212d873dbb6a0Adam Vartanian Providers.checkBouncyCastleDeprecation(provider, "AlgorithmParameters", algorithm); 34351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski Object[] objs = Security.getImpl(algorithm, "AlgorithmParameters", 34451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski provider); 34551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return new AlgorithmParameters((AlgorithmParametersSpi)objs[0], 34651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski (Provider)objs[1], 34751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski algorithm); 34851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 34951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 35051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 35151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns the provider of this parameter object. 35251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 35351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the provider of this parameter object 35451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 35551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public final Provider getProvider() { 35651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return this.provider; 35751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 35851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 35951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 36051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Initializes this parameter object using the parameters 36119b88cdf6c245d9a7d1e4996d494be4e14f546a6Sergio Giro * specified in {@code paramSpec}. 36251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 36351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param paramSpec the parameter specification. 36451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 36551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @exception InvalidParameterSpecException if the given parameter 36651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * specification is inappropriate for the initialization of this parameter 36751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * object, or if this parameter object has already been initialized. 36851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 36951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public final void init(AlgorithmParameterSpec paramSpec) 37051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski throws InvalidParameterSpecException 37151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski { 37251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (this.initialized) 37351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski throw new InvalidParameterSpecException("already initialized"); 37451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski paramSpi.engineInit(paramSpec); 37551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this.initialized = true; 37651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 37751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 37851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 37951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Imports the specified parameters and decodes them according to the 38051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * primary decoding format for parameters. The primary decoding 38151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * format for parameters is ASN.1, if an ASN.1 specification for this type 38251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * of parameters exists. 38351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 38451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param params the encoded parameters. 38551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 38651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @exception IOException on decoding errors, or if this parameter object 38751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * has already been initialized. 38851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 38951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public final void init(byte[] params) throws IOException { 39051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (this.initialized) 39151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski throw new IOException("already initialized"); 39251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski paramSpi.engineInit(params); 39351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this.initialized = true; 39451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 39551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 39651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 39719b88cdf6c245d9a7d1e4996d494be4e14f546a6Sergio Giro * Imports the parameters from {@code params} and decodes them 39851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * according to the specified decoding scheme. 39919b88cdf6c245d9a7d1e4996d494be4e14f546a6Sergio Giro * If {@code format} is null, the 40051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * primary decoding format for parameters is used. The primary decoding 40151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * format is ASN.1, if an ASN.1 specification for these parameters 40251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * exists. 40351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 40451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param params the encoded parameters. 40551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 40651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param format the name of the decoding scheme. 40751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 40851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @exception IOException on decoding errors, or if this parameter object 40951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * has already been initialized. 41051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 41151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public final void init(byte[] params, String format) throws IOException { 41251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (this.initialized) 41351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski throw new IOException("already initialized"); 41451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski paramSpi.engineInit(params, format); 41551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this.initialized = true; 41651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 41751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 41851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 41951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns a (transparent) specification of this parameter object. 42019b88cdf6c245d9a7d1e4996d494be4e14f546a6Sergio Giro * {@code paramSpec} identifies the specification class in which 42151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * the parameters should be returned. It could, for example, be 42219b88cdf6c245d9a7d1e4996d494be4e14f546a6Sergio Giro * {@code DSAParameterSpec.class}, to indicate that the 42351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * parameters should be returned in an instance of the 42419b88cdf6c245d9a7d1e4996d494be4e14f546a6Sergio Giro * {@code DSAParameterSpec} class. 42551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 42619b88cdf6c245d9a7d1e4996d494be4e14f546a6Sergio Giro * @param <T> the type of the parameter specification to be returrned 42751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param paramSpec the specification class in which 42851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * the parameters should be returned. 42951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 43051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the parameter specification. 43151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 43251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @exception InvalidParameterSpecException if the requested parameter 43351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * specification is inappropriate for this parameter object, or if this 43451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * parameter object has not been initialized. 43551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 43651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public final <T extends AlgorithmParameterSpec> 43751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski T getParameterSpec(Class<T> paramSpec) 43851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski throws InvalidParameterSpecException 43951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski { 44051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (this.initialized == false) { 44151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski throw new InvalidParameterSpecException("not initialized"); 44251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 44351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return paramSpi.engineGetParameterSpec(paramSpec); 44451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 44551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 44651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 44751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns the parameters in their primary encoding format. 44851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * The primary encoding format for parameters is ASN.1, if an ASN.1 44951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * specification for this type of parameters exists. 45051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 45151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the parameters encoded using their primary encoding format. 45251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 45351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @exception IOException on encoding errors, or if this parameter object 45451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * has not been initialized. 45551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 45651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public final byte[] getEncoded() throws IOException 45751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski { 45851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (this.initialized == false) { 45951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski throw new IOException("not initialized"); 46051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 46151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return paramSpi.engineGetEncoded(); 46251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 46351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 46451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 46551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns the parameters encoded in the specified scheme. 46619b88cdf6c245d9a7d1e4996d494be4e14f546a6Sergio Giro * If {@code format} is null, the 46751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * primary encoding format for parameters is used. The primary encoding 46851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * format is ASN.1, if an ASN.1 specification for these parameters 46951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * exists. 47051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 47151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param format the name of the encoding format. 47251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 47351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return the parameters encoded using the specified encoding scheme. 47451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 47551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @exception IOException on encoding errors, or if this parameter object 47651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * has not been initialized. 47751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 47851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public final byte[] getEncoded(String format) throws IOException 47951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski { 48051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (this.initialized == false) { 48151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski throw new IOException("not initialized"); 48251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 48351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return paramSpi.engineGetEncoded(format); 48451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 48551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 48651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 48751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns a formatted string describing the parameters. 48851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 48951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return a formatted string describing the parameters, or null if this 49051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * parameter object has not been initialized. 49151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 49251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public final String toString() { 49351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (this.initialized == false) { 49451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return null; 49551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 49651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return paramSpi.engineToString(); 49751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 49851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski} 499