1 /* GnuCrypto.java -- 2 Copyright (C) 2004, 2006 Free Software Foundation, Inc. 3 4 This file is a part of GNU Classpath. 5 6 GNU Classpath is free software; you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 2 of the License, or (at 9 your option) any later version. 10 11 GNU Classpath is distributed in the hope that it will be useful, but 12 WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with GNU Classpath; if not, write to the Free Software 18 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 19 USA 20 21 Linking this library statically or dynamically with other modules is 22 making a combined work based on this library. Thus, the terms and 23 conditions of the GNU General Public License cover the whole 24 combination. 25 26 As a special exception, the copyright holders of this library give you 27 permission to link this library with independent modules to produce an 28 executable, regardless of the license terms of these independent 29 modules, and to copy and distribute the resulting executable under 30 terms of your choice, provided that you also meet, for each linked 31 independent module, the terms and conditions of the license of that 32 module. An independent module is a module which is not derived from 33 or based on this library. If you modify this library, you may extend 34 this exception to your version of the library, but you are not 35 obligated to do so. If you do not wish to do so, delete this 36 exception statement from your version. */ 37 38 39 package gnu.javax.crypto.jce; 40 41 import gnu.java.security.Registry; 42 import gnu.javax.crypto.cipher.CipherFactory; 43 import gnu.javax.crypto.mac.MacFactory; 44 45 import java.security.AccessController; 46 import java.security.PrivilegedAction; 47 import java.security.Provider; 48 import java.util.HashSet; 49 import java.util.Set; 50 51 /** 52 * The additional GNU algorithm implementation as a Java Cryptographic Extension 53 * (JCE) Provider. 54 * 55 * @see java.security.Provider 56 */ 57 public final class GnuCrypto 58 extends Provider 59 { GnuCrypto()60 public GnuCrypto() 61 { 62 super(Registry.GNU_CRYPTO, 2.1, "GNU Crypto JCE Provider"); 63 64 AccessController.doPrivileged(new PrivilegedAction() 65 { 66 public Object run() 67 { 68 // Cipher 69 put("Cipher.ANUBIS", 70 gnu.javax.crypto.jce.cipher.AnubisSpi.class.getName()); 71 put("Cipher.ANUBIS ImplementedIn", "Software"); 72 put("Cipher.ARCFOUR", 73 gnu.javax.crypto.jce.cipher.ARCFourSpi.class.getName()); 74 put("Cipher.ARCFOUR ImplementedIn", "Software"); 75 put("Cipher.BLOWFISH", 76 gnu.javax.crypto.jce.cipher.BlowfishSpi.class.getName()); 77 put("Cipher.BLOWFISH ImplementedIn", "Software"); 78 put("Cipher.DES", gnu.javax.crypto.jce.cipher.DESSpi.class.getName()); 79 put("Cipher.DES ImplementedIn", "Software"); 80 put("Cipher.KHAZAD", 81 gnu.javax.crypto.jce.cipher.KhazadSpi.class.getName()); 82 put("Cipher.KHAZAD ImplementedIn", "Software"); 83 put("Cipher.NULL", 84 gnu.javax.crypto.jce.cipher.NullCipherSpi.class.getName()); 85 put("Cipher.NULL ImplementedIn", "Software"); 86 put("Cipher.AES", 87 gnu.javax.crypto.jce.cipher.RijndaelSpi.class.getName()); 88 put("Cipher.AES ImplementedIn", "Software"); 89 put("Cipher.RIJNDAEL", 90 gnu.javax.crypto.jce.cipher.RijndaelSpi.class.getName()); 91 put("Cipher.RIJNDAEL ImplementedIn", "Software"); 92 put("Cipher.SERPENT", 93 gnu.javax.crypto.jce.cipher.SerpentSpi.class.getName()); 94 put("Cipher.SERPENT ImplementedIn", "Software"); 95 put("Cipher.SQUARE", 96 gnu.javax.crypto.jce.cipher.SquareSpi.class.getName()); 97 put("Cipher.SQUARE ImplementedIn", "Software"); 98 put("Cipher.TRIPLEDES", 99 gnu.javax.crypto.jce.cipher.TripleDESSpi.class.getName()); 100 put("Cipher.TRIPLEDES ImplementedIn", "Software"); 101 put("Cipher.TWOFISH", 102 gnu.javax.crypto.jce.cipher.TwofishSpi.class.getName()); 103 put("Cipher.TWOFISH ImplementedIn", "Software"); 104 put("Cipher.CAST5", 105 gnu.javax.crypto.jce.cipher.Cast5Spi.class.getName()); 106 put("Cipher.CAST5 ImplementedIn", "Software"); 107 108 // PBES2 ciphers. 109 put("Cipher.PBEWithHMacHavalAndAES", 110 gnu.javax.crypto.jce.cipher.PBES2.HMacHaval.AES.class.getName()); 111 put("Cipher.PBEWithHMacHavalAndAnubis", 112 gnu.javax.crypto.jce.cipher.PBES2.HMacHaval.Anubis.class.getName()); 113 put("Cipher.PBEWithHMacHavalAndBlowfish", 114 gnu.javax.crypto.jce.cipher.PBES2.HMacHaval.Blowfish.class.getName()); 115 put("Cipher.PBEWithHMacHavalAndCast5", 116 gnu.javax.crypto.jce.cipher.PBES2.HMacHaval.Cast5.class.getName()); 117 put("Cipher.PBEWithHMacHavalAndDES", 118 gnu.javax.crypto.jce.cipher.PBES2.HMacHaval.DES.class.getName()); 119 put("Cipher.PBEWithHMacHavalAndKhazad", 120 gnu.javax.crypto.jce.cipher.PBES2.HMacHaval.Khazad.class.getName()); 121 put("Cipher.PBEWithHMacHavalAndSerpent", 122 gnu.javax.crypto.jce.cipher.PBES2.HMacHaval.Serpent.class.getName()); 123 put("Cipher.PBEWithHMacHavalAndSquare", 124 gnu.javax.crypto.jce.cipher.PBES2.HMacHaval.Square.class.getName()); 125 put("Cipher.PBEWithHMacHavalAndTripleDES", 126 gnu.javax.crypto.jce.cipher.PBES2.HMacHaval.TripleDES.class.getName()); 127 put("Cipher.PBEWithHMacHavalAndTwofish", 128 gnu.javax.crypto.jce.cipher.PBES2.HMacHaval.Twofish.class.getName()); 129 130 put("Cipher.PBEWithHMacMD2AndAES", 131 gnu.javax.crypto.jce.cipher.PBES2.HMacMD2.AES.class.getName()); 132 put("Cipher.PBEWithHMacMD2AndAnubis", 133 gnu.javax.crypto.jce.cipher.PBES2.HMacMD2.Anubis.class.getName()); 134 put("Cipher.PBEWithHMacMD2AndBlowfish", 135 gnu.javax.crypto.jce.cipher.PBES2.HMacMD2.Blowfish.class.getName()); 136 put("Cipher.PBEWithHMacMD2AndCast5", 137 gnu.javax.crypto.jce.cipher.PBES2.HMacMD2.Cast5.class.getName()); 138 put("Cipher.PBEWithHMacMD2AndDES", 139 gnu.javax.crypto.jce.cipher.PBES2.HMacMD2.DES.class.getName()); 140 put("Cipher.PBEWithHMacMD2AndKhazad", 141 gnu.javax.crypto.jce.cipher.PBES2.HMacMD2.Khazad.class.getName()); 142 put("Cipher.PBEWithHMacMD2AndSerpent", 143 gnu.javax.crypto.jce.cipher.PBES2.HMacMD2.Serpent.class.getName()); 144 put("Cipher.PBEWithHMacMD2AndSquare", 145 gnu.javax.crypto.jce.cipher.PBES2.HMacMD2.Square.class.getName()); 146 put("Cipher.PBEWithHMacMD2AndTripleDES", 147 gnu.javax.crypto.jce.cipher.PBES2.HMacMD2.TripleDES.class.getName()); 148 put("Cipher.PBEWithHMacMD2AndTwofish", 149 gnu.javax.crypto.jce.cipher.PBES2.HMacMD2.Twofish.class.getName()); 150 151 put("Cipher.PBEWithHMacMD4AndAES", 152 gnu.javax.crypto.jce.cipher.PBES2.HMacMD4.AES.class.getName()); 153 put("Cipher.PBEWithHMacMD4AndAnubis", 154 gnu.javax.crypto.jce.cipher.PBES2.HMacMD4.Anubis.class.getName()); 155 put("Cipher.PBEWithHMacMD4AndBlowfish", 156 gnu.javax.crypto.jce.cipher.PBES2.HMacMD4.Blowfish.class.getName()); 157 put("Cipher.PBEWithHMacMD4AndCast5", 158 gnu.javax.crypto.jce.cipher.PBES2.HMacMD4.Cast5.class.getName()); 159 put("Cipher.PBEWithHMacMD4AndDES", 160 gnu.javax.crypto.jce.cipher.PBES2.HMacMD4.DES.class.getName()); 161 put("Cipher.PBEWithHMacMD4AndKhazad", 162 gnu.javax.crypto.jce.cipher.PBES2.HMacMD4.Khazad.class.getName()); 163 put("Cipher.PBEWithHMacMD4AndSerpent", 164 gnu.javax.crypto.jce.cipher.PBES2.HMacMD4.Serpent.class.getName()); 165 put("Cipher.PBEWithHMacMD4AndSquare", 166 gnu.javax.crypto.jce.cipher.PBES2.HMacMD4.Square.class.getName()); 167 put("Cipher.PBEWithHMacMD4AndTripleDES", 168 gnu.javax.crypto.jce.cipher.PBES2.HMacMD4.TripleDES.class.getName()); 169 put("Cipher.PBEWithHMacMD4AndTwofish", 170 gnu.javax.crypto.jce.cipher.PBES2.HMacMD4.Twofish.class.getName()); 171 172 put("Cipher.PBEWithHMacMD5AndAES", 173 gnu.javax.crypto.jce.cipher.PBES2.HMacMD5.AES.class.getName()); 174 put("Cipher.PBEWithHMacMD5AndAnubis", 175 gnu.javax.crypto.jce.cipher.PBES2.HMacMD5.Anubis.class.getName()); 176 put("Cipher.PBEWithHMacMD5AndBlowfish", 177 gnu.javax.crypto.jce.cipher.PBES2.HMacMD5.Blowfish.class.getName()); 178 put("Cipher.PBEWithHMacMD5AndCast5", 179 gnu.javax.crypto.jce.cipher.PBES2.HMacMD5.Cast5.class.getName()); 180 put("Cipher.PBEWithHMacMD5AndDES", 181 gnu.javax.crypto.jce.cipher.PBES2.HMacMD5.DES.class.getName()); 182 put("Cipher.PBEWithHMacMD5AndKhazad", 183 gnu.javax.crypto.jce.cipher.PBES2.HMacMD5.Khazad.class.getName()); 184 put("Cipher.PBEWithHMacMD5AndSerpent", 185 gnu.javax.crypto.jce.cipher.PBES2.HMacMD5.Serpent.class.getName()); 186 put("Cipher.PBEWithHMacMD5AndSquare", 187 gnu.javax.crypto.jce.cipher.PBES2.HMacMD5.Square.class.getName()); 188 put("Cipher.PBEWithHMacMD5AndTripleDES", 189 gnu.javax.crypto.jce.cipher.PBES2.HMacMD5.TripleDES.class.getName()); 190 put("Cipher.PBEWithHMacMD5AndTwofish", 191 gnu.javax.crypto.jce.cipher.PBES2.HMacMD5.Twofish.class.getName()); 192 193 put("Cipher.PBEWithHMacSHA1AndAES", 194 gnu.javax.crypto.jce.cipher.PBES2.HMacSHA1.AES.class.getName()); 195 put("Cipher.PBEWithHMacSHA1AndAnubis", 196 gnu.javax.crypto.jce.cipher.PBES2.HMacSHA1.Anubis.class.getName()); 197 put("Cipher.PBEWithHMacSHA1AndBlowfish", 198 gnu.javax.crypto.jce.cipher.PBES2.HMacSHA1.Blowfish.class.getName()); 199 put("Cipher.PBEWithHMacSHA1AndCast5", 200 gnu.javax.crypto.jce.cipher.PBES2.HMacSHA1.Cast5.class.getName()); 201 put("Cipher.PBEWithHMacSHA1AndDES", 202 gnu.javax.crypto.jce.cipher.PBES2.HMacSHA1.DES.class.getName()); 203 put("Cipher.PBEWithHMacSHA1AndKhazad", 204 gnu.javax.crypto.jce.cipher.PBES2.HMacSHA1.Khazad.class.getName()); 205 put("Cipher.PBEWithHMacSHA1AndSerpent", 206 gnu.javax.crypto.jce.cipher.PBES2.HMacSHA1.Serpent.class.getName()); 207 put("Cipher.PBEWithHMacSHA1AndSquare", 208 gnu.javax.crypto.jce.cipher.PBES2.HMacSHA1.Square.class.getName()); 209 put( 210 "Cipher.PBEWithHMacSHA1AndTripleDES", 211 gnu.javax.crypto.jce.cipher.PBES2.HMacSHA1.TripleDES.class.getName()); 212 put("Cipher.PBEWithHMacSHA1AndTwofish", 213 gnu.javax.crypto.jce.cipher.PBES2.HMacSHA1.Twofish.class.getName()); 214 215 put("Cipher.PBEWithHMacSHA256AndAES", 216 gnu.javax.crypto.jce.cipher.PBES2.HMacSHA256.AES.class.getName()); 217 put("Cipher.PBEWithHMacSHA256AndAnubis", 218 gnu.javax.crypto.jce.cipher.PBES2.HMacSHA256.Anubis.class.getName()); 219 put("Cipher.PBEWithHMacSHA256AndBlowfish", 220 gnu.javax.crypto.jce.cipher.PBES2.HMacSHA256.Blowfish.class.getName()); 221 put("Cipher.PBEWithHMacSHA256AndCast5", 222 gnu.javax.crypto.jce.cipher.PBES2.HMacSHA256.Cast5.class.getName()); 223 put("Cipher.PBEWithHMacSHA256AndDES", 224 gnu.javax.crypto.jce.cipher.PBES2.HMacSHA256.DES.class.getName()); 225 put("Cipher.PBEWithHMacSHA256AndKhazad", 226 gnu.javax.crypto.jce.cipher.PBES2.HMacSHA256.Khazad.class.getName()); 227 put("Cipher.PBEWithHMacSHA256AndSerpent", 228 gnu.javax.crypto.jce.cipher.PBES2.HMacSHA256.Serpent.class.getName()); 229 put("Cipher.PBEWithHMacSHA256AndSquare", 230 gnu.javax.crypto.jce.cipher.PBES2.HMacSHA256.Square.class.getName()); 231 put("Cipher.PBEWithHMacSHA256AndTripleDES", 232 gnu.javax.crypto.jce.cipher.PBES2.HMacSHA256.TripleDES.class.getName()); 233 put("Cipher.PBEWithHMacSHA256AndTwofish", 234 gnu.javax.crypto.jce.cipher.PBES2.HMacSHA256.Twofish.class.getName()); 235 236 put("Cipher.PBEWithHMacSHA384AndAES", 237 gnu.javax.crypto.jce.cipher.PBES2.HMacSHA384.AES.class.getName()); 238 put("Cipher.PBEWithHMacSHA384AndAnubis", 239 gnu.javax.crypto.jce.cipher.PBES2.HMacSHA384.Anubis.class.getName()); 240 put("Cipher.PBEWithHMacSHA384AndBlowfish", 241 gnu.javax.crypto.jce.cipher.PBES2.HMacSHA384.Blowfish.class.getName()); 242 put("Cipher.PBEWithHMacSHA384AndCast5", 243 gnu.javax.crypto.jce.cipher.PBES2.HMacSHA384.Cast5.class.getName()); 244 put("Cipher.PBEWithHMacSHA384AndDES", 245 gnu.javax.crypto.jce.cipher.PBES2.HMacSHA384.DES.class.getName()); 246 put("Cipher.PBEWithHMacSHA384AndKhazad", 247 gnu.javax.crypto.jce.cipher.PBES2.HMacSHA384.Khazad.class.getName()); 248 put("Cipher.PBEWithHMacSHA384AndSerpent", 249 gnu.javax.crypto.jce.cipher.PBES2.HMacSHA384.Serpent.class.getName()); 250 put("Cipher.PBEWithHMacSHA384AndSquare", 251 gnu.javax.crypto.jce.cipher.PBES2.HMacSHA384.Square.class.getName()); 252 put("Cipher.PBEWithHMacSHA384AndTripleDES", 253 gnu.javax.crypto.jce.cipher.PBES2.HMacSHA384.TripleDES.class.getName()); 254 put("Cipher.PBEWithHMacSHA384AndTwofish", 255 gnu.javax.crypto.jce.cipher.PBES2.HMacSHA384.Twofish.class.getName()); 256 257 put("Cipher.PBEWithHMacSHA512AndAES", 258 gnu.javax.crypto.jce.cipher.PBES2.HMacSHA512.AES.class.getName()); 259 put("Cipher.PBEWithHMacSHA512AndAnubis", 260 gnu.javax.crypto.jce.cipher.PBES2.HMacSHA512.Anubis.class.getName()); 261 put("Cipher.PBEWithHMacSHA512AndBlowfish", 262 gnu.javax.crypto.jce.cipher.PBES2.HMacSHA512.Blowfish.class.getName()); 263 put("Cipher.PBEWithHMacSHA512AndCast5", 264 gnu.javax.crypto.jce.cipher.PBES2.HMacSHA512.Cast5.class.getName()); 265 put("Cipher.PBEWithHMacSHA512AndDES", 266 gnu.javax.crypto.jce.cipher.PBES2.HMacSHA512.DES.class.getName()); 267 put("Cipher.PBEWithHMacSHA512AndKhazad", 268 gnu.javax.crypto.jce.cipher.PBES2.HMacSHA512.Khazad.class.getName()); 269 put("Cipher.PBEWithHMacSHA512AndSerpent", 270 gnu.javax.crypto.jce.cipher.PBES2.HMacSHA512.Serpent.class.getName()); 271 put("Cipher.PBEWithHMacSHA512AndSquare", 272 gnu.javax.crypto.jce.cipher.PBES2.HMacSHA512.Square.class.getName()); 273 put("Cipher.PBEWithHMacSHA512AndTripleDES", 274 gnu.javax.crypto.jce.cipher.PBES2.HMacSHA512.TripleDES.class.getName()); 275 put("Cipher.PBEWithHMacSHA512AndTwofish", 276 gnu.javax.crypto.jce.cipher.PBES2.HMacSHA512.Twofish.class.getName()); 277 278 put("Cipher.PBEWithHMacTigerAndAES", 279 gnu.javax.crypto.jce.cipher.PBES2.HMacTiger.AES.class.getName()); 280 put("Cipher.PBEWithHMacTigerAndAnubis", 281 gnu.javax.crypto.jce.cipher.PBES2.HMacTiger.Anubis.class.getName()); 282 put("Cipher.PBEWithHMacTigerAndBlowfish", 283 gnu.javax.crypto.jce.cipher.PBES2.HMacTiger.Blowfish.class.getName()); 284 put("Cipher.PBEWithHMacTigerAndCast5", 285 gnu.javax.crypto.jce.cipher.PBES2.HMacTiger.Cast5.class.getName()); 286 put("Cipher.PBEWithHMacTigerAndDES", 287 gnu.javax.crypto.jce.cipher.PBES2.HMacTiger.DES.class.getName()); 288 put("Cipher.PBEWithHMacTigerAndKhazad", 289 gnu.javax.crypto.jce.cipher.PBES2.HMacTiger.Khazad.class.getName()); 290 put("Cipher.PBEWithHMacTigerAndSerpent", 291 gnu.javax.crypto.jce.cipher.PBES2.HMacTiger.Serpent.class.getName()); 292 put("Cipher.PBEWithHMacTigerAndSquare", 293 gnu.javax.crypto.jce.cipher.PBES2.HMacTiger.Square.class.getName()); 294 put("Cipher.PBEWithHMacTigerAndTripleDES", 295 gnu.javax.crypto.jce.cipher.PBES2.HMacTiger.TripleDES.class.getName()); 296 put("Cipher.PBEWithHMacTigerAndTwofish", 297 gnu.javax.crypto.jce.cipher.PBES2.HMacTiger.Twofish.class.getName()); 298 299 put("Cipher.PBEWithHMacWhirlpoolAndAES", 300 gnu.javax.crypto.jce.cipher.PBES2.HMacWhirlpool.AES.class.getName()); 301 put("Cipher.PBEWithHMacWhirlpoolAndAnubis", 302 gnu.javax.crypto.jce.cipher.PBES2.HMacWhirlpool.Anubis.class.getName()); 303 put("Cipher.PBEWithHMacWhirlpoolAndBlowfish", 304 gnu.javax.crypto.jce.cipher.PBES2.HMacWhirlpool.Blowfish.class.getName()); 305 put("Cipher.PBEWithHMacWhirlpoolAndCast5", 306 gnu.javax.crypto.jce.cipher.PBES2.HMacWhirlpool.Cast5.class.getName()); 307 put("Cipher.PBEWithHMacWhirlpoolAndDES", 308 gnu.javax.crypto.jce.cipher.PBES2.HMacWhirlpool.DES.class.getName()); 309 put("Cipher.PBEWithHMacWhirlpoolAndKhazad", 310 gnu.javax.crypto.jce.cipher.PBES2.HMacWhirlpool.Khazad.class.getName()); 311 put("Cipher.PBEWithHMacWhirlpoolAndSerpent", 312 gnu.javax.crypto.jce.cipher.PBES2.HMacWhirlpool.Serpent.class.getName()); 313 put("Cipher.PBEWithHMacWhirlpoolAndSquare", 314 gnu.javax.crypto.jce.cipher.PBES2.HMacWhirlpool.Square.class.getName()); 315 put("Cipher.PBEWithHMacWhirlpoolAndTripleDES", 316 gnu.javax.crypto.jce.cipher.PBES2.HMacWhirlpool.TripleDES.class.getName()); 317 put("Cipher.PBEWithHMacWhirlpoolAndTwofish", 318 gnu.javax.crypto.jce.cipher.PBES2.HMacWhirlpool.Twofish.class.getName()); 319 320 // Key Wrapping Algorithm cipher 321 put("Cipher." + Registry.AES128_KWA, 322 gnu.javax.crypto.jce.cipher.AES128KeyWrapSpi.class.getName()); 323 put("Cipher." + Registry.AES192_KWA, 324 gnu.javax.crypto.jce.cipher.AES192KeyWrapSpi.class.getName()); 325 put("Cipher." + Registry.AES256_KWA, 326 gnu.javax.crypto.jce.cipher.AES256KeyWrapSpi.class.getName()); 327 put("Cipher." + Registry.TRIPLEDES_KWA, 328 gnu.javax.crypto.jce.cipher.TripleDESKeyWrapSpi.class.getName()); 329 330 // SecretKeyFactory interface to PBKDF2. 331 put("SecretKeyFactory.PBKDF2WithHMacHaval", 332 gnu.javax.crypto.jce.PBKDF2SecretKeyFactory.HMacHaval.class.getName()); 333 put("SecretKeyFactory.PBKDF2WithHMacMD2", 334 gnu.javax.crypto.jce.PBKDF2SecretKeyFactory.HMacMD2.class.getName()); 335 put("SecretKeyFactory.PBKDF2WithHMacMD4", 336 gnu.javax.crypto.jce.PBKDF2SecretKeyFactory.HMacMD4.class.getName()); 337 put("SecretKeyFactory.PBKDF2WithHMacMD5", 338 gnu.javax.crypto.jce.PBKDF2SecretKeyFactory.HMacMD5.class.getName()); 339 put("SecretKeyFactory.PBKDF2WithHMacSHA1", 340 gnu.javax.crypto.jce.PBKDF2SecretKeyFactory.HMacSHA1.class.getName()); 341 put("SecretKeyFactory.PBKDF2WithHMacSHA256", 342 gnu.javax.crypto.jce.PBKDF2SecretKeyFactory.HMacSHA256.class.getName()); 343 put("SecretKeyFactory.PBKDF2WithHMacSHA384", 344 gnu.javax.crypto.jce.PBKDF2SecretKeyFactory.HMacSHA384.class.getName()); 345 put("SecretKeyFactory.PBKDF2WithHMacSHA512", 346 gnu.javax.crypto.jce.PBKDF2SecretKeyFactory.HMacSHA512.class.getName()); 347 put("SecretKeyFactory.PBKDF2WithHMacTiger", 348 gnu.javax.crypto.jce.PBKDF2SecretKeyFactory.HMacTiger.class.getName()); 349 put("SecretKeyFactory.PBKDF2WithHMacWhirlpool", 350 gnu.javax.crypto.jce.PBKDF2SecretKeyFactory.HMacWhirlpool.class.getName()); 351 352 // Simple SecretKeyFactory implementations. 353 put("SecretKeyFactory.Anubis", 354 gnu.javax.crypto.jce.key.AnubisSecretKeyFactoryImpl.class.getName()); 355 put("SecretKeyFactory.Blowfish", 356 gnu.javax.crypto.jce.key.BlowfishSecretKeyFactoryImpl.class.getName()); 357 put("SecretKeyFactory.Cast5", 358 gnu.javax.crypto.jce.key.Cast5SecretKeyFactoryImpl.class.getName()); 359 put("SecretKeyFactory.DES", 360 gnu.javax.crypto.jce.key.DESSecretKeyFactoryImpl.class.getName()); 361 put("SecretKeyFactory.Khazad", 362 gnu.javax.crypto.jce.key.KhazadSecretKeyFactoryImpl.class.getName()); 363 put("SecretKeyFactory.Rijndael", 364 gnu.javax.crypto.jce.key.RijndaelSecretKeyFactoryImpl.class.getName()); 365 put("SecretKeyFactory.Serpent", 366 gnu.javax.crypto.jce.key.SerpentSecretKeyFactoryImpl.class.getName()); 367 put("SecretKeyFactory.Square", 368 gnu.javax.crypto.jce.key.SquareSecretKeyFactoryImpl.class.getName()); 369 put("SecretKeyFactory.TripleDES", 370 gnu.javax.crypto.jce.key.DESedeSecretKeyFactoryImpl.class.getName()); 371 put("Alg.Alias.SecretKeyFactory.AES", "Rijndael"); 372 put("Alg.Alias.SecretKeyFactory.DESede", "TripleDES"); 373 put("Alg.Alias.SecretKeyFactory.3-DES", "TripleDES"); 374 put("Alg.Alias.SecretKeyFactory.3DES", "TripleDES"); 375 376 put("AlgorithmParameters.BlockCipherParameters", 377 gnu.javax.crypto.jce.params.BlockCipherParameters.class.getName()); 378 put("Alg.Alias.AlgorithmParameters.Anubis", "BlockCipherParameters"); 379 put("Alg.Alias.AlgorithmParameters.Blowfish", "BlockCipherParameters"); 380 put("Alg.Alias.AlgorithmParameters.Cast5", "BlockCipherParameters"); 381 put("Alg.Alias.AlgorithmParameters.DES", "BlockCipherParameters"); 382 put("Alg.Alias.AlgorithmParameters.Khazad", "BlockCipherParameters"); 383 put("Alg.Alias.AlgorithmParameters.Rijndael", "BlockCipherParameters"); 384 put("Alg.Alias.AlgorithmParameters.AES", "BlockCipherParameters"); 385 put("Alg.Alias.AlgorithmParameters.Serpent", "BlockCipherParameters"); 386 put("Alg.Alias.AlgorithmParameters.Square", "BlockCipherParameters"); 387 put("Alg.Alias.AlgorithmParameters.TripleDES", "BlockCipherParameters"); 388 put("Alg.Alias.AlgorithmParameters.DESede", "BlockCipherParameters"); 389 put("Alg.Alias.AlgorithmParameters.3-DES", "BlockCipherParameters"); 390 put("Alg.Alias.AlgorithmParameters.3DES", "BlockCipherParameters"); 391 392 // KeyGenerator Adapter implementations 393 put("KeyGenerator.Anubis", 394 gnu.javax.crypto.jce.key.AnubisKeyGeneratorImpl.class.getName()); 395 put("KeyGenerator.Blowfish", 396 gnu.javax.crypto.jce.key.BlowfishKeyGeneratorImpl.class.getName()); 397 put("KeyGenerator.Cast5", 398 gnu.javax.crypto.jce.key.Cast5KeyGeneratorImpl.class.getName()); 399 put("KeyGenerator.DES", 400 gnu.javax.crypto.jce.key.DESKeyGeneratorImpl.class.getName()); 401 put("KeyGenerator.Khazad", 402 gnu.javax.crypto.jce.key.KhazadKeyGeneratorImpl.class.getName()); 403 put("KeyGenerator.Rijndael", 404 gnu.javax.crypto.jce.key.RijndaelKeyGeneratorImpl.class.getName()); 405 put("KeyGenerator.Serpent", 406 gnu.javax.crypto.jce.key.SerpentKeyGeneratorImpl.class.getName()); 407 put("KeyGenerator.Square", 408 gnu.javax.crypto.jce.key.SquareKeyGeneratorImpl.class.getName()); 409 put("KeyGenerator.TripleDES", 410 gnu.javax.crypto.jce.key.TripleDESKeyGeneratorImpl.class.getName()); 411 put("Alg.Alias.KeyGenerator.AES", "Rijndael"); 412 put("Alg.Alias.KeyGenerator.DESede", "TripleDES"); 413 put("Alg.Alias.KeyGenerator.3-DES", "TripleDES"); 414 put("Alg.Alias.KeyGenerator.3DES", "TripleDES"); 415 416 // MAC 417 put("Mac.HMAC-MD2", gnu.javax.crypto.jce.mac.HMacMD2Spi.class.getName()); 418 put("Mac.HMAC-MD4", gnu.javax.crypto.jce.mac.HMacMD4Spi.class.getName()); 419 put("Mac.HMAC-MD5", gnu.javax.crypto.jce.mac.HMacMD5Spi.class.getName()); 420 put("Mac.HMAC-RIPEMD128", 421 gnu.javax.crypto.jce.mac.HMacRipeMD128Spi.class.getName()); 422 put("Mac.HMAC-RIPEMD160", 423 gnu.javax.crypto.jce.mac.HMacRipeMD160Spi.class.getName()); 424 put("Mac.HMAC-SHA160", 425 gnu.javax.crypto.jce.mac.HMacSHA160Spi.class.getName()); 426 put("Mac.HMAC-SHA256", 427 gnu.javax.crypto.jce.mac.HMacSHA256Spi.class.getName()); 428 put("Mac.HMAC-SHA384", 429 gnu.javax.crypto.jce.mac.HMacSHA384Spi.class.getName()); 430 put("Mac.HMAC-SHA512", 431 gnu.javax.crypto.jce.mac.HMacSHA512Spi.class.getName()); 432 put("Mac.HMAC-TIGER", 433 gnu.javax.crypto.jce.mac.HMacTigerSpi.class.getName()); 434 put("Mac.HMAC-HAVAL", 435 gnu.javax.crypto.jce.mac.HMacHavalSpi.class.getName()); 436 put("Mac.HMAC-WHIRLPOOL", 437 gnu.javax.crypto.jce.mac.HMacWhirlpoolSpi.class.getName()); 438 put("Mac.TMMH16", gnu.javax.crypto.jce.mac.TMMH16Spi.class.getName()); 439 put("Mac.UHASH32", gnu.javax.crypto.jce.mac.UHash32Spi.class.getName()); 440 put("Mac.UMAC32", gnu.javax.crypto.jce.mac.UMac32Spi.class.getName()); 441 442 put("Mac.OMAC-ANUBIS", 443 gnu.javax.crypto.jce.mac.OMacAnubisImpl.class.getName()); 444 put("Mac.OMAC-BLOWFISH", 445 gnu.javax.crypto.jce.mac.OMacBlowfishImpl.class.getName()); 446 put("Mac.OMAC-CAST5", 447 gnu.javax.crypto.jce.mac.OMacCast5Impl.class.getName()); 448 put("Mac.OMAC-DES", 449 gnu.javax.crypto.jce.mac.OMacDESImpl.class.getName()); 450 put("Mac.OMAC-KHAZAD", 451 gnu.javax.crypto.jce.mac.OMacKhazadImpl.class.getName()); 452 put("Mac.OMAC-RIJNDAEL", 453 gnu.javax.crypto.jce.mac.OMacRijndaelImpl.class.getName()); 454 put("Mac.OMAC-SERPENT", 455 gnu.javax.crypto.jce.mac.OMacSerpentImpl.class.getName()); 456 put("Mac.OMAC-SQUARE", 457 gnu.javax.crypto.jce.mac.OMacSquareImpl.class.getName()); 458 put("Mac.OMAC-TRIPLEDES", 459 gnu.javax.crypto.jce.mac.OMacTripleDESImpl.class.getName()); 460 put("Mac.OMAC-TWOFISH", 461 gnu.javax.crypto.jce.mac.OMacTwofishImpl.class.getName()); 462 463 // Aliases 464 put("Alg.Alias.AlgorithmParameters.AES", "BlockCipherParameters"); 465 put("Alg.Alias.AlgorithmParameters.BLOWFISH", "BlockCipherParameters"); 466 put("Alg.Alias.AlgorithmParameters.ANUBIS", "BlockCipherParameters"); 467 put("Alg.Alias.AlgorithmParameters.KHAZAD", "BlockCipherParameters"); 468 put("Alg.Alias.AlgorithmParameters.NULL", "BlockCipherParameters"); 469 put("Alg.Alias.AlgorithmParameters.RIJNDAEL", "BlockCipherParameters"); 470 put("Alg.Alias.AlgorithmParameters.SERPENT", "BlockCipherParameters"); 471 put("Alg.Alias.AlgorithmParameters.SQUARE", "BlockCipherParameters"); 472 put("Alg.Alias.AlgorithmParameters.TWOFISH", "BlockCipherParameters"); 473 put("Alg.Alias.Cipher.RC4", "ARCFOUR"); 474 put("Alg.Alias.Cipher.3-DES", "TRIPLEDES"); 475 put("Alg.Alias.Cipher.3DES", "TRIPLEDES"); 476 put("Alg.Alias.Cipher.DES-EDE", "TRIPLEDES"); 477 put("Alg.Alias.Cipher.DESede", "TRIPLEDES"); 478 put("Alg.Alias.Cipher.CAST128", "CAST5"); 479 put("Alg.Alias.Cipher.CAST-128", "CAST5"); 480 put("Alg.Alias.Mac.HMAC-SHS", "HMAC-SHA160"); 481 put("Alg.Alias.Mac.HMAC-SHA", "HMAC-SHA160"); 482 put("Alg.Alias.Mac.HMAC-SHA1", "HMAC-SHA160"); 483 put("Alg.Alias.Mac.HMAC-SHA-160", "HMAC-SHA160"); 484 put("Alg.Alias.Mac.HMAC-SHA-256", "HMAC-SHA256"); 485 put("Alg.Alias.Mac.HMAC-SHA-384", "HMAC-SHA384"); 486 put("Alg.Alias.Mac.HMAC-SHA-512", "HMAC-SHA512"); 487 put("Alg.Alias.Mac.HMAC-RIPEMD-160", "HMAC-RIPEMD160"); 488 put("Alg.Alias.Mac.HMAC-RIPEMD-128", "HMAC-RIPEMD128"); 489 put("Alg.Alias.Mac.OMAC-AES", "OMAC-RIJNDAEL"); 490 put("Alg.Alias.Mac.OMAC-3DES", "OMAC-3DES"); 491 put("Alg.Alias.Mac.HmacMD4", "HMAC-MD4"); 492 put("Alg.Alias.Mac.HmacMD5", "HMAC-MD5"); 493 put("Alg.Alias.Mac.HmacSHA-1", "HMAC-SHA-1"); 494 put("Alg.Alias.Mac.HmacSHA1", "HMAC-SHA1"); 495 put("Alg.Alias.Mac.HmacSHA-160", "HMAC-SHA-160"); 496 put("Alg.Alias.Mac.HmacSHA160", "HMAC-SHA-160"); 497 put("Alg.Alias.Mac.HmacSHA-256", "HMAC-SHA-256"); 498 put("Alg.Alias.Mac.HmacSHA256", "HMAC-SHA-256"); 499 put("Alg.Alias.Mac.HmacSHA-384", "HMAC-SHA-384"); 500 put("Alg.Alias.Mac.HmacSHA384", "HMAC-SHA-384"); 501 put("Alg.Alias.Mac.HmacSHA-512", "HMAC-SHA-512"); 502 put("Alg.Alias.Mac.HmacSHA512", "HMAC-SHA-512"); 503 put("Alg.Alias.Mac.HmacRIPEMD128", "HMAC-RIPEMD128"); 504 put("Alg.Alias.Mac.HmacRIPEMD-128", "HMAC-RIPEMD128"); 505 put("Alg.Alias.Mac.HmacRIPEMD160", "HMAC-RIPEMD160"); 506 put("Alg.Alias.Mac.HmacRIPEMD-160", "HMAC-RIPEMD160"); 507 put("Alg.Alias.Mac.HmacTiger", "HMAC-TIGER"); 508 put("Alg.Alias.Mac.HmacHaval", "HMAC-HAVAL"); 509 put("Alg.Alias.Mac.HmacWhirlpool", "HMAC-WHIRLPOOL"); 510 511 // KeyAgreement 512 put("KeyAgreement.DH", 513 gnu.javax.crypto.jce.DiffieHellmanImpl.class.getName()); 514 put("Alg.Alias.KeyAgreement.DiffieHellman", "DH"); 515 516 // Cipher 517 put("Cipher.RSAES-PKCS1-v1_5", 518 gnu.javax.crypto.RSACipherImpl.class.getName()); 519 put("Alg.Alias.Cipher.RSA", "RSAES-PKCS1-v1_5"); 520 521 // SecureRandom 522 put("SecureRandom.ARCFOUR", 523 gnu.javax.crypto.jce.prng.ARCFourRandomSpi.class.getName()); 524 put("SecureRandom.ARCFOUR ImplementedIn", "Software"); 525 put("SecureRandom.CSPRNG", 526 gnu.javax.crypto.jce.prng.CSPRNGSpi.class.getName()); 527 put("SecureRandom.CSPRNG ImplementedIn", "Software"); 528 put("SecureRandom.ICM", 529 gnu.javax.crypto.jce.prng.ICMRandomSpi.class.getName()); 530 put("SecureRandom.ICM ImplementedIn", "Software"); 531 put("SecureRandom.UMAC-KDF", 532 gnu.javax.crypto.jce.prng.UMacRandomSpi.class.getName()); 533 put("SecureRandom.UMAC-KDF ImplementedIn", "Software"); 534 put("SecureRandom.Fortuna", 535 gnu.javax.crypto.jce.prng.FortunaImpl.class.getName()); 536 put("SecureRandom.Fortuna ImplementedIn", "Software"); 537 538 // KeyStore 539 put("KeyStore.GKR", 540 gnu.javax.crypto.jce.keyring.GnuKeyring.class.getName()); 541 put("Alg.Alias.KeyStore.GnuKeyring", "GKR"); 542 543 // KeyPairGenerator --------------------------------------------------- 544 put("KeyPairGenerator.DH", 545 gnu.javax.crypto.jce.sig.DHKeyPairGeneratorSpi.class.getName()); 546 put("KeyPairGenerator.DH KeySize", "512"); 547 put("KeyPairGenerator.DH ImplementedIn", "Software"); 548 549 put("Alg.Alias.KeyPairGenerator.DiffieHellman", "DH"); 550 551 // KeyFactory --------------------------------------------------------- 552 put("KeyFactory.DH", 553 gnu.javax.crypto.jce.sig.DHKeyFactory.class.getName()); 554 555 put("Alg.Alias,KeyFactory.DiffieHellman", "DH"); 556 557 // Algorithm Parameters ----------------------------------------------- 558 put("AlgorithmParameters.DH", 559 gnu.javax.crypto.jce.sig.DHParameters.class.getName()); 560 561 put("Alg.Alias.AlgorithmParameters.DiffieHellman", "DH"); 562 563 // Algorithm Parameters Generator ------------------------------------- 564 put("AlgorithmParameterGenerator.DH", 565 gnu.javax.crypto.jce.sig.DHParametersGenerator.class.getName()); 566 567 put("Alg.Alias.AlgorithmParameterGenerator.DiffieHellman", "DH"); 568 569 return null; 570 } 571 }); 572 } 573 574 /** 575 * Returns a {@link Set} of names of symmetric key block cipher algorithms 576 * available from this {@link Provider}. 577 * 578 * @return a {@link Set} of cipher names (Strings). 579 */ getCipherNames()580 public static final Set getCipherNames() 581 { 582 HashSet s = new HashSet(); 583 s.addAll(CipherFactory.getNames()); 584 s.add(Registry.ARCFOUR_PRNG); 585 return s; 586 } 587 588 /** 589 * Returns a {@link Set} of names of MAC algorithms available from this 590 * {@link Provider}. 591 * 592 * @return a {@link Set} of MAC names (Strings). 593 */ getMacNames()594 public static final Set getMacNames() 595 { 596 return MacFactory.getNames(); 597 } 598 } 599