1 /* 2 * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package com.sun.crypto.provider; 27 28 import java.security.AccessController; 29 import java.security.Provider; 30 import java.security.SecureRandom; 31 32 33 /** 34 * The "SunJCE" Cryptographic Service Provider. 35 * 36 * @author Jan Luehe 37 * @author Sharon Liu 38 */ 39 40 /** 41 * Defines the "SunJCE" provider. 42 * 43 * Supported algorithms and their names: 44 * 45 * - RSA encryption (PKCS#1 v1.5 and raw) 46 * 47 * - DES 48 * 49 * - DES-EDE 50 * 51 * - AES 52 * 53 * - Blowfish 54 * 55 * - RC2 56 * 57 * - ARCFOUR (RC4 compatible) 58 * 59 * - Cipher modes ECB, CBC, CFB, OFB, PCBC, CTR, and CTS for all block ciphers 60 * and mode GCM for AES cipher 61 * 62 * - Cipher padding ISO10126Padding for non-PKCS#5 block ciphers and 63 * NoPadding and PKCS5Padding for all block ciphers 64 * 65 * - Password-based Encryption (PBE) 66 * 67 * - Diffie-Hellman Key Agreement 68 * 69 * - HMAC-MD5, HMAC-SHA1, HMAC-SHA-224, HMAC-SHA-256, HMAC-SHA-384, HMAC-SHA-512 70 * 71 */ 72 73 public final class SunJCE extends Provider { 74 75 private static final long serialVersionUID = 6812507587804302833L; 76 77 private static final String info = "SunJCE Provider " + 78 "(implements RSA, DES, Triple DES, AES, Blowfish, ARCFOUR, RC2, PBE, " 79 + "Diffie-Hellman, HMAC)"; 80 81 private static final String OID_PKCS12_RC4_128 = "1.2.840.113549.1.12.1.1"; 82 private static final String OID_PKCS12_RC4_40 = "1.2.840.113549.1.12.1.2"; 83 private static final String OID_PKCS12_DESede = "1.2.840.113549.1.12.1.3"; 84 private static final String OID_PKCS12_RC2_128 = "1.2.840.113549.1.12.1.5"; 85 private static final String OID_PKCS12_RC2_40 = "1.2.840.113549.1.12.1.6"; 86 private static final String OID_PKCS5_MD5_DES = "1.2.840.113549.1.5.3"; 87 private static final String OID_PKCS5_PBKDF2 = "1.2.840.113549.1.5.12"; 88 private static final String OID_PKCS5_PBES2 = "1.2.840.113549.1.5.13"; 89 private static final String OID_PKCS3 = "1.2.840.113549.1.3.1"; 90 91 /* Are we debugging? -- for developers */ 92 static final boolean debug = false; 93 94 // Instance of this provider, so we don't have to call the provider list 95 // to find ourselves or run the risk of not being in the list. 96 private static volatile SunJCE instance; 97 98 // lazy initialize SecureRandom to avoid potential recursion if Sun 99 // provider has not been installed yet 100 private static class SecureRandomHolder { 101 static final SecureRandom RANDOM = new SecureRandom(); 102 } 103 static SecureRandom getRandom() { return SecureRandomHolder.RANDOM; } 104 105 public SunJCE() { 106 /* We are the "SunJCE" provider */ 107 super("SunJCE", 9.0d, info); 108 109 final String BLOCK_MODES = "ECB|CBC|PCBC|CTR|CTS|CFB|OFB" + 110 "|CFB8|CFB16|CFB24|CFB32|CFB40|CFB48|CFB56|CFB64" + 111 "|OFB8|OFB16|OFB24|OFB32|OFB40|OFB48|OFB56|OFB64"; 112 final String BLOCK_MODES128 = BLOCK_MODES + 113 "|GCM|CFB72|CFB80|CFB88|CFB96|CFB104|CFB112|CFB120|CFB128" + 114 "|OFB72|OFB80|OFB88|OFB96|OFB104|OFB112|OFB120|OFB128"; 115 final String BLOCK_PADS = "NOPADDING|PKCS5PADDING|ISO10126PADDING"; 116 117 AccessController.doPrivileged( 118 new java.security.PrivilegedAction<>() { 119 public Object run() { 120 121 /* 122 * Cipher engines 123 */ 124 put("Cipher.RSA", "com.sun.crypto.provider.RSACipher"); 125 put("Cipher.RSA SupportedModes", "ECB"); 126 put("Cipher.RSA SupportedPaddings", 127 "NOPADDING|PKCS1PADDING|OAEPPADDING" 128 + "|OAEPWITHMD5ANDMGF1PADDING" 129 + "|OAEPWITHSHA1ANDMGF1PADDING" 130 + "|OAEPWITHSHA-1ANDMGF1PADDING" 131 + "|OAEPWITHSHA-224ANDMGF1PADDING" 132 + "|OAEPWITHSHA-256ANDMGF1PADDING" 133 + "|OAEPWITHSHA-384ANDMGF1PADDING" 134 + "|OAEPWITHSHA-512ANDMGF1PADDING"); 135 put("Cipher.RSA SupportedKeyClasses", 136 "java.security.interfaces.RSAPublicKey" + 137 "|java.security.interfaces.RSAPrivateKey"); 138 139 put("Cipher.DES", "com.sun.crypto.provider.DESCipher"); 140 put("Cipher.DES SupportedModes", BLOCK_MODES); 141 put("Cipher.DES SupportedPaddings", BLOCK_PADS); 142 put("Cipher.DES SupportedKeyFormats", "RAW"); 143 144 put("Cipher.DESede", "com.sun.crypto.provider.DESedeCipher"); 145 put("Alg.Alias.Cipher.TripleDES", "DESede"); 146 put("Cipher.DESede SupportedModes", BLOCK_MODES); 147 put("Cipher.DESede SupportedPaddings", BLOCK_PADS); 148 put("Cipher.DESede SupportedKeyFormats", "RAW"); 149 150 put("Cipher.DESedeWrap", 151 "com.sun.crypto.provider.DESedeWrapCipher"); 152 put("Cipher.DESedeWrap SupportedModes", "CBC"); 153 put("Cipher.DESedeWrap SupportedPaddings", "NOPADDING"); 154 put("Cipher.DESedeWrap SupportedKeyFormats", "RAW"); 155 156 // PBES1 157 158 put("Cipher.PBEWithMD5AndDES", 159 "com.sun.crypto.provider.PBEWithMD5AndDESCipher"); 160 put("Alg.Alias.Cipher.OID."+OID_PKCS5_MD5_DES, 161 "PBEWithMD5AndDES"); 162 put("Alg.Alias.Cipher."+OID_PKCS5_MD5_DES, 163 "PBEWithMD5AndDES"); 164 165 put("Cipher.PBEWithMD5AndTripleDES", 166 "com.sun.crypto.provider.PBEWithMD5AndTripleDESCipher"); 167 168 put("Cipher.PBEWithSHA1AndDESede", 169 "com.sun.crypto.provider.PKCS12PBECipherCore$" + 170 "PBEWithSHA1AndDESede"); 171 put("Alg.Alias.Cipher.OID." + OID_PKCS12_DESede, 172 "PBEWithSHA1AndDESede"); 173 put("Alg.Alias.Cipher." + OID_PKCS12_DESede, 174 "PBEWithSHA1AndDESede"); 175 176 put("Cipher.PBEWithSHA1AndRC2_40", 177 "com.sun.crypto.provider.PKCS12PBECipherCore$" + 178 "PBEWithSHA1AndRC2_40"); 179 put("Alg.Alias.Cipher.OID." + OID_PKCS12_RC2_40, 180 "PBEWithSHA1AndRC2_40"); 181 put("Alg.Alias.Cipher." + OID_PKCS12_RC2_40, 182 "PBEWithSHA1AndRC2_40"); 183 184 put("Cipher.PBEWithSHA1AndRC2_128", 185 "com.sun.crypto.provider.PKCS12PBECipherCore$" + 186 "PBEWithSHA1AndRC2_128"); 187 put("Alg.Alias.Cipher.OID." + OID_PKCS12_RC2_128, 188 "PBEWithSHA1AndRC2_128"); 189 put("Alg.Alias.Cipher." + OID_PKCS12_RC2_128, 190 "PBEWithSHA1AndRC2_128"); 191 192 put("Cipher.PBEWithSHA1AndRC4_40", 193 "com.sun.crypto.provider.PKCS12PBECipherCore$" + 194 "PBEWithSHA1AndRC4_40"); 195 put("Alg.Alias.Cipher.OID." + OID_PKCS12_RC4_40, 196 "PBEWithSHA1AndRC4_40"); 197 put("Alg.Alias.Cipher." + OID_PKCS12_RC4_40, 198 "PBEWithSHA1AndRC4_40"); 199 200 put("Cipher.PBEWithSHA1AndRC4_128", 201 "com.sun.crypto.provider.PKCS12PBECipherCore$" + 202 "PBEWithSHA1AndRC4_128"); 203 put("Alg.Alias.Cipher.OID." + OID_PKCS12_RC4_128, 204 "PBEWithSHA1AndRC4_128"); 205 put("Alg.Alias.Cipher." + OID_PKCS12_RC4_128, 206 "PBEWithSHA1AndRC4_128"); 207 208 //PBES2 209 210 put("Cipher.PBEWithHmacSHA1AndAES_128", 211 "com.sun.crypto.provider.PBES2Core$HmacSHA1AndAES_128"); 212 213 put("Cipher.PBEWithHmacSHA224AndAES_128", 214 "com.sun.crypto.provider.PBES2Core$" + 215 "HmacSHA224AndAES_128"); 216 217 put("Cipher.PBEWithHmacSHA256AndAES_128", 218 "com.sun.crypto.provider.PBES2Core$" + 219 "HmacSHA256AndAES_128"); 220 221 put("Cipher.PBEWithHmacSHA384AndAES_128", 222 "com.sun.crypto.provider.PBES2Core$" + 223 "HmacSHA384AndAES_128"); 224 225 put("Cipher.PBEWithHmacSHA512AndAES_128", 226 "com.sun.crypto.provider.PBES2Core$" + 227 "HmacSHA512AndAES_128"); 228 229 put("Cipher.PBEWithHmacSHA1AndAES_256", 230 "com.sun.crypto.provider.PBES2Core$HmacSHA1AndAES_256"); 231 232 put("Cipher.PBEWithHmacSHA224AndAES_256", 233 "com.sun.crypto.provider.PBES2Core$" + 234 "HmacSHA224AndAES_256"); 235 236 put("Cipher.PBEWithHmacSHA256AndAES_256", 237 "com.sun.crypto.provider.PBES2Core$" + 238 "HmacSHA256AndAES_256"); 239 240 put("Cipher.PBEWithHmacSHA384AndAES_256", 241 "com.sun.crypto.provider.PBES2Core$" + 242 "HmacSHA384AndAES_256"); 243 244 put("Cipher.PBEWithHmacSHA512AndAES_256", 245 "com.sun.crypto.provider.PBES2Core$" + 246 "HmacSHA512AndAES_256"); 247 248 put("Cipher.Blowfish", 249 "com.sun.crypto.provider.BlowfishCipher"); 250 put("Cipher.Blowfish SupportedModes", BLOCK_MODES); 251 put("Cipher.Blowfish SupportedPaddings", BLOCK_PADS); 252 put("Cipher.Blowfish SupportedKeyFormats", "RAW"); 253 254 put("Cipher.AES", "com.sun.crypto.provider.AESCipher$General"); 255 put("Alg.Alias.Cipher.Rijndael", "AES"); 256 put("Cipher.AES SupportedModes", BLOCK_MODES128); 257 put("Cipher.AES SupportedPaddings", BLOCK_PADS); 258 put("Cipher.AES SupportedKeyFormats", "RAW"); 259 260 put("Cipher.AES_128/ECB/NoPadding", "com.sun.crypto.provider.AESCipher$AES128_ECB_NoPadding"); 261 put("Alg.Alias.Cipher.2.16.840.1.101.3.4.1.1", "AES_128/ECB/NoPadding"); 262 put("Alg.Alias.Cipher.OID.2.16.840.1.101.3.4.1.1", "AES_128/ECB/NoPadding"); 263 put("Cipher.AES_128/CBC/NoPadding", "com.sun.crypto.provider.AESCipher$AES128_CBC_NoPadding"); 264 put("Alg.Alias.Cipher.2.16.840.1.101.3.4.1.2", "AES_128/CBC/NoPadding"); 265 put("Alg.Alias.Cipher.OID.2.16.840.1.101.3.4.1.2", "AES_128/CBC/NoPadding"); 266 put("Cipher.AES_128/OFB/NoPadding", "com.sun.crypto.provider.AESCipher$AES128_OFB_NoPadding"); 267 put("Alg.Alias.Cipher.2.16.840.1.101.3.4.1.3", "AES_128/OFB/NoPadding"); 268 put("Alg.Alias.Cipher.OID.2.16.840.1.101.3.4.1.3", "AES_128/OFB/NoPadding"); 269 put("Cipher.AES_128/CFB/NoPadding", "com.sun.crypto.provider.AESCipher$AES128_CFB_NoPadding"); 270 put("Alg.Alias.Cipher.2.16.840.1.101.3.4.1.4", "AES_128/CFB/NoPadding"); 271 put("Alg.Alias.Cipher.OID.2.16.840.1.101.3.4.1.4", "AES_128/CFB/NoPadding"); 272 put("Cipher.AES_128/GCM/NoPadding", "com.sun.crypto.provider.AESCipher$AES128_GCM_NoPadding"); 273 put("Alg.Alias.Cipher.2.16.840.1.101.3.4.1.6", "AES_128/GCM/NoPadding"); 274 put("Alg.Alias.Cipher.OID.2.16.840.1.101.3.4.1.6", "AES_128/GCM/NoPadding"); 275 276 put("Cipher.AES_192/ECB/NoPadding", "com.sun.crypto.provider.AESCipher$AES192_ECB_NoPadding"); 277 put("Alg.Alias.Cipher.2.16.840.1.101.3.4.1.21", "AES_192/ECB/NoPadding"); 278 put("Alg.Alias.Cipher.OID.2.16.840.1.101.3.4.1.21", "AES_192/ECB/NoPadding"); 279 put("Cipher.AES_192/CBC/NoPadding", "com.sun.crypto.provider.AESCipher$AES192_CBC_NoPadding"); 280 put("Alg.Alias.Cipher.2.16.840.1.101.3.4.1.22", "AES_192/CBC/NoPadding"); 281 put("Alg.Alias.Cipher.OID.2.16.840.1.101.3.4.1.22", "AES_192/CBC/NoPadding"); 282 put("Cipher.AES_192/OFB/NoPadding", "com.sun.crypto.provider.AESCipher$AES192_OFB_NoPadding"); 283 put("Alg.Alias.Cipher.2.16.840.1.101.3.4.1.23", "AES_192/OFB/NoPadding"); 284 put("Alg.Alias.Cipher.OID.2.16.840.1.101.3.4.1.23", "AES_192/OFB/NoPadding"); 285 put("Cipher.AES_192/CFB/NoPadding", "com.sun.crypto.provider.AESCipher$AES192_CFB_NoPadding"); 286 put("Alg.Alias.Cipher.2.16.840.1.101.3.4.1.24", "AES_192/CFB/NoPadding"); 287 put("Alg.Alias.Cipher.OID.2.16.840.1.101.3.4.1.24", "AES_192/CFB/NoPadding"); 288 put("Cipher.AES_192/GCM/NoPadding", "com.sun.crypto.provider.AESCipher$AES192_GCM_NoPadding"); 289 put("Alg.Alias.Cipher.2.16.840.1.101.3.4.1.26", "AES_192/GCM/NoPadding"); 290 put("Alg.Alias.Cipher.OID.2.16.840.1.101.3.4.1.26", "AES_192/GCM/NoPadding"); 291 292 put("Cipher.AES_256/ECB/NoPadding", "com.sun.crypto.provider.AESCipher$AES256_ECB_NoPadding"); 293 put("Alg.Alias.Cipher.2.16.840.1.101.3.4.1.41", "AES_256/ECB/NoPadding"); 294 put("Alg.Alias.Cipher.OID.2.16.840.1.101.3.4.1.41", "AES_256/ECB/NoPadding"); 295 put("Cipher.AES_256/CBC/NoPadding", "com.sun.crypto.provider.AESCipher$AES256_CBC_NoPadding"); 296 put("Alg.Alias.Cipher.2.16.840.1.101.3.4.1.42", "AES_256/CBC/NoPadding"); 297 put("Alg.Alias.Cipher.OID.2.16.840.1.101.3.4.1.42", "AES_256/CBC/NoPadding"); 298 put("Cipher.AES_256/OFB/NoPadding", "com.sun.crypto.provider.AESCipher$AES256_OFB_NoPadding"); 299 put("Alg.Alias.Cipher.2.16.840.1.101.3.4.1.43", "AES_256/OFB/NoPadding"); 300 put("Alg.Alias.Cipher.OID.2.16.840.1.101.3.4.1.43", "AES_256/OFB/NoPadding"); 301 put("Cipher.AES_256/CFB/NoPadding", "com.sun.crypto.provider.AESCipher$AES256_CFB_NoPadding"); 302 put("Alg.Alias.Cipher.2.16.840.1.101.3.4.1.44", "AES_256/CFB/NoPadding"); 303 put("Alg.Alias.Cipher.OID.2.16.840.1.101.3.4.1.44", "AES_256/CFB/NoPadding"); 304 put("Cipher.AES_256/GCM/NoPadding", "com.sun.crypto.provider.AESCipher$AES256_GCM_NoPadding"); 305 put("Alg.Alias.Cipher.2.16.840.1.101.3.4.1.46", "AES_256/GCM/NoPadding"); 306 put("Alg.Alias.Cipher.OID.2.16.840.1.101.3.4.1.46", "AES_256/GCM/NoPadding"); 307 308 put("Cipher.AESWrap", "com.sun.crypto.provider.AESWrapCipher$General"); 309 put("Cipher.AESWrap SupportedModes", "ECB"); 310 put("Cipher.AESWrap SupportedPaddings", "NOPADDING"); 311 put("Cipher.AESWrap SupportedKeyFormats", "RAW"); 312 313 put("Cipher.AESWrap_128", "com.sun.crypto.provider.AESWrapCipher$AES128"); 314 put("Alg.Alias.Cipher.2.16.840.1.101.3.4.1.5", "AESWrap_128"); 315 put("Alg.Alias.Cipher.OID.2.16.840.1.101.3.4.1.5", "AESWrap_128"); 316 put("Cipher.AESWrap_192", "com.sun.crypto.provider.AESWrapCipher$AES192"); 317 put("Alg.Alias.Cipher.2.16.840.1.101.3.4.1.25", "AESWrap_192"); 318 put("Alg.Alias.Cipher.OID.2.16.840.1.101.3.4.1.25", "AESWrap_192"); 319 put("Cipher.AESWrap_256", "com.sun.crypto.provider.AESWrapCipher$AES256"); 320 put("Alg.Alias.Cipher.2.16.840.1.101.3.4.1.45", "AESWrap_256"); 321 put("Alg.Alias.Cipher.OID.2.16.840.1.101.3.4.1.45", "AESWrap_256"); 322 323 put("Cipher.RC2", 324 "com.sun.crypto.provider.RC2Cipher"); 325 put("Cipher.RC2 SupportedModes", BLOCK_MODES); 326 put("Cipher.RC2 SupportedPaddings", BLOCK_PADS); 327 put("Cipher.RC2 SupportedKeyFormats", "RAW"); 328 329 put("Cipher.ARCFOUR", 330 "com.sun.crypto.provider.ARCFOURCipher"); 331 put("Alg.Alias.Cipher.RC4", "ARCFOUR"); 332 put("Cipher.ARCFOUR SupportedModes", "ECB"); 333 put("Cipher.ARCFOUR SupportedPaddings", "NOPADDING"); 334 put("Cipher.ARCFOUR SupportedKeyFormats", "RAW"); 335 336 /* 337 * Key(pair) Generator engines 338 */ 339 put("KeyGenerator.DES", 340 "com.sun.crypto.provider.DESKeyGenerator"); 341 342 put("KeyGenerator.DESede", 343 "com.sun.crypto.provider.DESedeKeyGenerator"); 344 put("Alg.Alias.KeyGenerator.TripleDES", "DESede"); 345 346 put("KeyGenerator.Blowfish", 347 "com.sun.crypto.provider.BlowfishKeyGenerator"); 348 349 put("KeyGenerator.AES", 350 "com.sun.crypto.provider.AESKeyGenerator"); 351 put("Alg.Alias.KeyGenerator.Rijndael", "AES"); 352 353 put("KeyGenerator.RC2", 354 "com.sun.crypto.provider.KeyGeneratorCore$" + 355 "RC2KeyGenerator"); 356 put("KeyGenerator.ARCFOUR", 357 "com.sun.crypto.provider.KeyGeneratorCore$" + 358 "ARCFOURKeyGenerator"); 359 put("Alg.Alias.KeyGenerator.RC4", "ARCFOUR"); 360 361 put("KeyGenerator.HmacMD5", 362 "com.sun.crypto.provider.HmacMD5KeyGenerator"); 363 364 put("KeyGenerator.HmacSHA1", 365 "com.sun.crypto.provider.HmacSHA1KeyGenerator"); 366 put("Alg.Alias.KeyGenerator.OID.1.2.840.113549.2.7", "HmacSHA1"); 367 put("Alg.Alias.KeyGenerator.1.2.840.113549.2.7", "HmacSHA1"); 368 369 put("KeyGenerator.HmacSHA224", 370 "com.sun.crypto.provider.KeyGeneratorCore$HmacSHA2KG$SHA224"); 371 put("Alg.Alias.KeyGenerator.OID.1.2.840.113549.2.8", "HmacSHA224"); 372 put("Alg.Alias.KeyGenerator.1.2.840.113549.2.8", "HmacSHA224"); 373 374 put("KeyGenerator.HmacSHA256", 375 "com.sun.crypto.provider.KeyGeneratorCore$HmacSHA2KG$SHA256"); 376 put("Alg.Alias.KeyGenerator.OID.1.2.840.113549.2.9", "HmacSHA256"); 377 put("Alg.Alias.KeyGenerator.1.2.840.113549.2.9", "HmacSHA256"); 378 379 put("KeyGenerator.HmacSHA384", 380 "com.sun.crypto.provider.KeyGeneratorCore$HmacSHA2KG$SHA384"); 381 put("Alg.Alias.KeyGenerator.OID.1.2.840.113549.2.10", "HmacSHA384"); 382 put("Alg.Alias.KeyGenerator.1.2.840.113549.2.10", "HmacSHA384"); 383 384 put("KeyGenerator.HmacSHA512", 385 "com.sun.crypto.provider.KeyGeneratorCore$HmacSHA2KG$SHA512"); 386 put("Alg.Alias.KeyGenerator.OID.1.2.840.113549.2.11", "HmacSHA512"); 387 put("Alg.Alias.KeyGenerator.1.2.840.113549.2.11", "HmacSHA512"); 388 389 put("KeyPairGenerator.DiffieHellman", 390 "com.sun.crypto.provider.DHKeyPairGenerator"); 391 put("Alg.Alias.KeyPairGenerator.DH", "DiffieHellman"); 392 put("Alg.Alias.KeyPairGenerator.OID."+OID_PKCS3, 393 "DiffieHellman"); 394 put("Alg.Alias.KeyPairGenerator."+OID_PKCS3, 395 "DiffieHellman"); 396 397 /* 398 * Algorithm parameter generation engines 399 */ 400 put("AlgorithmParameterGenerator.DiffieHellman", 401 "com.sun.crypto.provider.DHParameterGenerator"); 402 put("Alg.Alias.AlgorithmParameterGenerator.DH", 403 "DiffieHellman"); 404 put("Alg.Alias.AlgorithmParameterGenerator.OID."+OID_PKCS3, 405 "DiffieHellman"); 406 put("Alg.Alias.AlgorithmParameterGenerator."+OID_PKCS3, 407 "DiffieHellman"); 408 409 /* 410 * Key Agreement engines 411 */ 412 put("KeyAgreement.DiffieHellman", 413 "com.sun.crypto.provider.DHKeyAgreement"); 414 put("Alg.Alias.KeyAgreement.DH", "DiffieHellman"); 415 put("Alg.Alias.KeyAgreement.OID."+OID_PKCS3, "DiffieHellman"); 416 put("Alg.Alias.KeyAgreement."+OID_PKCS3, "DiffieHellman"); 417 418 put("KeyAgreement.DiffieHellman SupportedKeyClasses", 419 "javax.crypto.interfaces.DHPublicKey" + 420 "|javax.crypto.interfaces.DHPrivateKey"); 421 422 /* 423 * Algorithm Parameter engines 424 */ 425 put("AlgorithmParameters.DiffieHellman", 426 "com.sun.crypto.provider.DHParameters"); 427 put("Alg.Alias.AlgorithmParameters.DH", "DiffieHellman"); 428 put("Alg.Alias.AlgorithmParameters.OID."+OID_PKCS3, 429 "DiffieHellman"); 430 put("Alg.Alias.AlgorithmParameters."+OID_PKCS3, 431 "DiffieHellman"); 432 433 put("AlgorithmParameters.DES", 434 "com.sun.crypto.provider.DESParameters"); 435 436 put("AlgorithmParameters.DESede", 437 "com.sun.crypto.provider.DESedeParameters"); 438 put("Alg.Alias.AlgorithmParameters.TripleDES", "DESede"); 439 440 put("AlgorithmParameters.PBE", 441 "com.sun.crypto.provider.PBEParameters"); 442 443 put("AlgorithmParameters.PBEWithMD5AndDES", 444 "com.sun.crypto.provider.PBEParameters"); 445 put("Alg.Alias.AlgorithmParameters.OID."+OID_PKCS5_MD5_DES, 446 "PBEWithMD5AndDES"); 447 put("Alg.Alias.AlgorithmParameters."+OID_PKCS5_MD5_DES, 448 "PBEWithMD5AndDES"); 449 450 put("AlgorithmParameters.PBEWithMD5AndTripleDES", 451 "com.sun.crypto.provider.PBEParameters"); 452 453 put("AlgorithmParameters.PBEWithSHA1AndDESede", 454 "com.sun.crypto.provider.PBEParameters"); 455 put("Alg.Alias.AlgorithmParameters.OID."+OID_PKCS12_DESede, 456 "PBEWithSHA1AndDESede"); 457 put("Alg.Alias.AlgorithmParameters."+OID_PKCS12_DESede, 458 "PBEWithSHA1AndDESede"); 459 460 put("AlgorithmParameters.PBEWithSHA1AndRC2_40", 461 "com.sun.crypto.provider.PBEParameters"); 462 put("Alg.Alias.AlgorithmParameters.OID."+OID_PKCS12_RC2_40, 463 "PBEWithSHA1AndRC2_40"); 464 put("Alg.Alias.AlgorithmParameters." + OID_PKCS12_RC2_40, 465 "PBEWithSHA1AndRC2_40"); 466 467 put("AlgorithmParameters.PBEWithSHA1AndRC2_128", 468 "com.sun.crypto.provider.PBEParameters"); 469 put("Alg.Alias.AlgorithmParameters.OID."+OID_PKCS12_RC2_128, 470 "PBEWithSHA1AndRC2_128"); 471 put("Alg.Alias.AlgorithmParameters." + OID_PKCS12_RC2_128, 472 "PBEWithSHA1AndRC2_128"); 473 474 put("AlgorithmParameters.PBEWithSHA1AndRC4_40", 475 "com.sun.crypto.provider.PBEParameters"); 476 put("Alg.Alias.AlgorithmParameters.OID."+OID_PKCS12_RC4_40, 477 "PBEWithSHA1AndRC4_40"); 478 put("Alg.Alias.AlgorithmParameters." + OID_PKCS12_RC4_40, 479 "PBEWithSHA1AndRC4_40"); 480 481 put("AlgorithmParameters.PBEWithSHA1AndRC4_128", 482 "com.sun.crypto.provider.PBEParameters"); 483 put("Alg.Alias.AlgorithmParameters.OID."+OID_PKCS12_RC4_128, 484 "PBEWithSHA1AndRC4_128"); 485 put("Alg.Alias.AlgorithmParameters." + OID_PKCS12_RC4_128, 486 "PBEWithSHA1AndRC4_128"); 487 488 put("AlgorithmParameters.PBES2", 489 "com.sun.crypto.provider.PBES2Parameters$General"); 490 put("Alg.Alias.AlgorithmParameters.OID."+OID_PKCS5_PBES2, 491 "PBES2"); 492 put("Alg.Alias.AlgorithmParameters." + OID_PKCS5_PBES2, 493 "PBES2"); 494 495 put("AlgorithmParameters.PBEWithHmacSHA1AndAES_128", 496 "com.sun.crypto.provider.PBES2Parameters$HmacSHA1AndAES_128"); 497 498 put("AlgorithmParameters.PBEWithHmacSHA224AndAES_128", 499 "com.sun.crypto.provider.PBES2Parameters$HmacSHA224AndAES_128"); 500 501 put("AlgorithmParameters.PBEWithHmacSHA256AndAES_128", 502 "com.sun.crypto.provider.PBES2Parameters$HmacSHA256AndAES_128"); 503 504 put("AlgorithmParameters.PBEWithHmacSHA384AndAES_128", 505 "com.sun.crypto.provider.PBES2Parameters$HmacSHA384AndAES_128"); 506 507 put("AlgorithmParameters.PBEWithHmacSHA512AndAES_128", 508 "com.sun.crypto.provider.PBES2Parameters$HmacSHA512AndAES_128"); 509 510 put("AlgorithmParameters.PBEWithHmacSHA1AndAES_256", 511 "com.sun.crypto.provider.PBES2Parameters$HmacSHA1AndAES_256"); 512 513 put("AlgorithmParameters.PBEWithHmacSHA224AndAES_256", 514 "com.sun.crypto.provider.PBES2Parameters$HmacSHA224AndAES_256"); 515 516 put("AlgorithmParameters.PBEWithHmacSHA256AndAES_256", 517 "com.sun.crypto.provider.PBES2Parameters$HmacSHA256AndAES_256"); 518 519 put("AlgorithmParameters.PBEWithHmacSHA384AndAES_256", 520 "com.sun.crypto.provider.PBES2Parameters$HmacSHA384AndAES_256"); 521 522 put("AlgorithmParameters.PBEWithHmacSHA512AndAES_256", 523 "com.sun.crypto.provider.PBES2Parameters$HmacSHA512AndAES_256"); 524 525 put("AlgorithmParameters.Blowfish", 526 "com.sun.crypto.provider.BlowfishParameters"); 527 528 put("AlgorithmParameters.AES", 529 "com.sun.crypto.provider.AESParameters"); 530 put("Alg.Alias.AlgorithmParameters.Rijndael", "AES"); 531 put("AlgorithmParameters.GCM", 532 "com.sun.crypto.provider.GCMParameters"); 533 534 535 put("AlgorithmParameters.RC2", 536 "com.sun.crypto.provider.RC2Parameters"); 537 538 put("AlgorithmParameters.OAEP", 539 "com.sun.crypto.provider.OAEPParameters"); 540 541 /* 542 * Key factories 543 */ 544 put("KeyFactory.DiffieHellman", 545 "com.sun.crypto.provider.DHKeyFactory"); 546 put("Alg.Alias.KeyFactory.DH", "DiffieHellman"); 547 put("Alg.Alias.KeyFactory.OID."+OID_PKCS3, 548 "DiffieHellman"); 549 put("Alg.Alias.KeyFactory."+OID_PKCS3, "DiffieHellman"); 550 551 /* 552 * Secret-key factories 553 */ 554 put("SecretKeyFactory.DES", 555 "com.sun.crypto.provider.DESKeyFactory"); 556 557 put("SecretKeyFactory.DESede", 558 "com.sun.crypto.provider.DESedeKeyFactory"); 559 put("Alg.Alias.SecretKeyFactory.TripleDES", "DESede"); 560 561 put("SecretKeyFactory.PBEWithMD5AndDES", 562 "com.sun.crypto.provider.PBEKeyFactory$PBEWithMD5AndDES" 563 ); 564 put("Alg.Alias.SecretKeyFactory.OID."+OID_PKCS5_MD5_DES, 565 "PBEWithMD5AndDES"); 566 put("Alg.Alias.SecretKeyFactory."+OID_PKCS5_MD5_DES, 567 "PBEWithMD5AndDES"); 568 569 put("Alg.Alias.SecretKeyFactory.PBE", 570 "PBEWithMD5AndDES"); 571 572 /* 573 * Internal in-house crypto algorithm used for 574 * the JCEKS keystore type. Since this was developed 575 * internally, there isn't an OID corresponding to this 576 * algorithm. 577 */ 578 put("SecretKeyFactory.PBEWithMD5AndTripleDES", 579 "com.sun.crypto.provider.PBEKeyFactory$" + 580 "PBEWithMD5AndTripleDES" 581 ); 582 583 put("SecretKeyFactory.PBEWithSHA1AndDESede", 584 "com.sun.crypto.provider.PBEKeyFactory$PBEWithSHA1AndDESede" 585 ); 586 put("Alg.Alias.SecretKeyFactory.OID."+OID_PKCS12_DESede, 587 "PBEWithSHA1AndDESede"); 588 put("Alg.Alias.SecretKeyFactory." + OID_PKCS12_DESede, 589 "PBEWithSHA1AndDESede"); 590 591 put("SecretKeyFactory.PBEWithSHA1AndRC2_40", 592 "com.sun.crypto.provider.PBEKeyFactory$PBEWithSHA1AndRC2_40" 593 ); 594 put("Alg.Alias.SecretKeyFactory.OID." + OID_PKCS12_RC2_40, 595 "PBEWithSHA1AndRC2_40"); 596 put("Alg.Alias.SecretKeyFactory." + OID_PKCS12_RC2_40, 597 "PBEWithSHA1AndRC2_40"); 598 599 put("SecretKeyFactory.PBEWithSHA1AndRC2_128", 600 "com.sun.crypto.provider.PBEKeyFactory$PBEWithSHA1AndRC2_128" 601 ); 602 put("Alg.Alias.SecretKeyFactory.OID." + OID_PKCS12_RC2_128, 603 "PBEWithSHA1AndRC2_128"); 604 put("Alg.Alias.SecretKeyFactory." + OID_PKCS12_RC2_128, 605 "PBEWithSHA1AndRC2_128"); 606 607 put("SecretKeyFactory.PBEWithSHA1AndRC4_40", 608 "com.sun.crypto.provider.PBEKeyFactory$PBEWithSHA1AndRC4_40" 609 ); 610 611 put("Alg.Alias.SecretKeyFactory.OID." + OID_PKCS12_RC4_40, 612 "PBEWithSHA1AndRC4_40"); 613 put("Alg.Alias.SecretKeyFactory." + OID_PKCS12_RC4_40, 614 "PBEWithSHA1AndRC4_40"); 615 616 put("SecretKeyFactory.PBEWithSHA1AndRC4_128", 617 "com.sun.crypto.provider.PBEKeyFactory$PBEWithSHA1AndRC4_128" 618 ); 619 620 put("Alg.Alias.SecretKeyFactory.OID." + OID_PKCS12_RC4_128, 621 "PBEWithSHA1AndRC4_128"); 622 put("Alg.Alias.SecretKeyFactory." + OID_PKCS12_RC4_128, 623 "PBEWithSHA1AndRC4_128"); 624 625 put("SecretKeyFactory.PBEWithHmacSHA1AndAES_128", 626 "com.sun.crypto.provider.PBEKeyFactory$" + 627 "PBEWithHmacSHA1AndAES_128"); 628 629 put("SecretKeyFactory.PBEWithHmacSHA224AndAES_128", 630 "com.sun.crypto.provider.PBEKeyFactory$" + 631 "PBEWithHmacSHA224AndAES_128"); 632 633 put("SecretKeyFactory.PBEWithHmacSHA256AndAES_128", 634 "com.sun.crypto.provider.PBEKeyFactory$" + 635 "PBEWithHmacSHA256AndAES_128"); 636 637 put("SecretKeyFactory.PBEWithHmacSHA384AndAES_128", 638 "com.sun.crypto.provider.PBEKeyFactory$" + 639 "PBEWithHmacSHA384AndAES_128"); 640 641 put("SecretKeyFactory.PBEWithHmacSHA512AndAES_128", 642 "com.sun.crypto.provider.PBEKeyFactory$" + 643 "PBEWithHmacSHA512AndAES_128"); 644 645 put("SecretKeyFactory.PBEWithHmacSHA1AndAES_256", 646 "com.sun.crypto.provider.PBEKeyFactory$" + 647 "PBEWithHmacSHA1AndAES_256"); 648 649 put("SecretKeyFactory.PBEWithHmacSHA224AndAES_256", 650 "com.sun.crypto.provider.PBEKeyFactory$" + 651 "PBEWithHmacSHA224AndAES_256"); 652 653 put("SecretKeyFactory.PBEWithHmacSHA256AndAES_256", 654 "com.sun.crypto.provider.PBEKeyFactory$" + 655 "PBEWithHmacSHA256AndAES_256"); 656 657 put("SecretKeyFactory.PBEWithHmacSHA384AndAES_256", 658 "com.sun.crypto.provider.PBEKeyFactory$" + 659 "PBEWithHmacSHA384AndAES_256"); 660 661 put("SecretKeyFactory.PBEWithHmacSHA512AndAES_256", 662 "com.sun.crypto.provider.PBEKeyFactory$" + 663 "PBEWithHmacSHA512AndAES_256"); 664 665 // PBKDF2 666 667 put("SecretKeyFactory.PBKDF2WithHmacSHA1", 668 "com.sun.crypto.provider.PBKDF2Core$HmacSHA1"); 669 put("Alg.Alias.SecretKeyFactory.OID." + OID_PKCS5_PBKDF2, 670 "PBKDF2WithHmacSHA1"); 671 put("Alg.Alias.SecretKeyFactory." + OID_PKCS5_PBKDF2, 672 "PBKDF2WithHmacSHA1"); 673 674 put("SecretKeyFactory.PBKDF2WithHmacSHA224", 675 "com.sun.crypto.provider.PBKDF2Core$HmacSHA224"); 676 put("SecretKeyFactory.PBKDF2WithHmacSHA256", 677 "com.sun.crypto.provider.PBKDF2Core$HmacSHA256"); 678 put("SecretKeyFactory.PBKDF2WithHmacSHA384", 679 "com.sun.crypto.provider.PBKDF2Core$HmacSHA384"); 680 put("SecretKeyFactory.PBKDF2WithHmacSHA512", 681 "com.sun.crypto.provider.PBKDF2Core$HmacSHA512"); 682 683 /* 684 * MAC 685 */ 686 put("Mac.HmacMD5", "com.sun.crypto.provider.HmacMD5"); 687 put("Mac.HmacSHA1", "com.sun.crypto.provider.HmacSHA1"); 688 put("Alg.Alias.Mac.OID.1.2.840.113549.2.7", "HmacSHA1"); 689 put("Alg.Alias.Mac.1.2.840.113549.2.7", "HmacSHA1"); 690 put("Mac.HmacSHA224", 691 "com.sun.crypto.provider.HmacCore$HmacSHA224"); 692 put("Alg.Alias.Mac.OID.1.2.840.113549.2.8", "HmacSHA224"); 693 put("Alg.Alias.Mac.1.2.840.113549.2.8", "HmacSHA224"); 694 put("Mac.HmacSHA256", 695 "com.sun.crypto.provider.HmacCore$HmacSHA256"); 696 put("Alg.Alias.Mac.OID.1.2.840.113549.2.9", "HmacSHA256"); 697 put("Alg.Alias.Mac.1.2.840.113549.2.9", "HmacSHA256"); 698 put("Mac.HmacSHA384", 699 "com.sun.crypto.provider.HmacCore$HmacSHA384"); 700 put("Alg.Alias.Mac.OID.1.2.840.113549.2.10", "HmacSHA384"); 701 put("Alg.Alias.Mac.1.2.840.113549.2.10", "HmacSHA384"); 702 put("Mac.HmacSHA512", 703 "com.sun.crypto.provider.HmacCore$HmacSHA512"); 704 put("Alg.Alias.Mac.OID.1.2.840.113549.2.11", "HmacSHA512"); 705 put("Alg.Alias.Mac.1.2.840.113549.2.11", "HmacSHA512"); 706 707 // TODO: aliases with OIDs 708 put("Mac.HmacSHA512/224", 709 "com.sun.crypto.provider.HmacCore$HmacSHA512_224"); 710 put("Mac.HmacSHA512/256", 711 "com.sun.crypto.provider.HmacCore$HmacSHA512_256"); 712 713 put("Mac.HmacPBESHA1", 714 "com.sun.crypto.provider.HmacPKCS12PBESHA1"); 715 716 // PBMAC1 717 718 put("Mac.PBEWithHmacSHA1", 719 "com.sun.crypto.provider.PBMAC1Core$HmacSHA1"); 720 put("Mac.PBEWithHmacSHA224", 721 "com.sun.crypto.provider.PBMAC1Core$HmacSHA224"); 722 put("Mac.PBEWithHmacSHA256", 723 "com.sun.crypto.provider.PBMAC1Core$HmacSHA256"); 724 put("Mac.PBEWithHmacSHA384", 725 "com.sun.crypto.provider.PBMAC1Core$HmacSHA384"); 726 put("Mac.PBEWithHmacSHA512", 727 "com.sun.crypto.provider.PBMAC1Core$HmacSHA512"); 728 729 put("Mac.SslMacMD5", 730 "com.sun.crypto.provider.SslMacCore$SslMacMD5"); 731 put("Mac.SslMacSHA1", 732 "com.sun.crypto.provider.SslMacCore$SslMacSHA1"); 733 734 put("Mac.HmacMD5 SupportedKeyFormats", "RAW"); 735 put("Mac.HmacSHA1 SupportedKeyFormats", "RAW"); 736 put("Mac.HmacSHA224 SupportedKeyFormats", "RAW"); 737 put("Mac.HmacSHA256 SupportedKeyFormats", "RAW"); 738 put("Mac.HmacSHA384 SupportedKeyFormats", "RAW"); 739 put("Mac.HmacSHA512 SupportedKeyFormats", "RAW"); 740 put("Mac.HmacPBESHA1 SupportedKeyFormats", "RAW"); 741 put("Mac.PBEWithHmacSHA1 SupportedKeyFormatS", "RAW"); 742 put("Mac.PBEWithHmacSHA224 SupportedKeyFormats", "RAW"); 743 put("Mac.PBEWithHmacSHA256 SupportedKeyFormats", "RAW"); 744 put("Mac.PBEWithHmacSHA384 SupportedKeyFormats", "RAW"); 745 put("Mac.PBEWithHmacSHA512 SupportedKeyFormats", "RAW"); 746 put("Mac.SslMacMD5 SupportedKeyFormats", "RAW"); 747 put("Mac.SslMacSHA1 SupportedKeyFormats", "RAW"); 748 749 /* 750 * KeyStore 751 */ 752 put("KeyStore.JCEKS", "com.sun.crypto.provider.JceKeyStore"); 753 754 /* 755 * SSL/TLS mechanisms 756 * 757 * These are strictly internal implementations and may 758 * be changed at any time. These names were chosen 759 * because PKCS11/SunPKCS11 does not yet have TLS1.2 760 * mechanisms, and it will cause calls to come here. 761 */ 762 put("KeyGenerator.SunTlsPrf", 763 "com.sun.crypto.provider.TlsPrfGenerator$V10"); 764 put("KeyGenerator.SunTls12Prf", 765 "com.sun.crypto.provider.TlsPrfGenerator$V12"); 766 767 put("KeyGenerator.SunTlsMasterSecret", 768 "com.sun.crypto.provider.TlsMasterSecretGenerator"); 769 put("Alg.Alias.KeyGenerator.SunTls12MasterSecret", 770 "SunTlsMasterSecret"); 771 772 put("KeyGenerator.SunTlsKeyMaterial", 773 "com.sun.crypto.provider.TlsKeyMaterialGenerator"); 774 put("Alg.Alias.KeyGenerator.SunTls12KeyMaterial", 775 "SunTlsKeyMaterial"); 776 777 put("KeyGenerator.SunTlsRsaPremasterSecret", 778 "com.sun.crypto.provider.TlsRsaPremasterSecretGenerator"); 779 put("Alg.Alias.KeyGenerator.SunTls12RsaPremasterSecret", 780 "SunTlsRsaPremasterSecret"); 781 782 return null; 783 } 784 }); 785 786 if (instance == null) { 787 instance = this; 788 } 789 } 790 791 // Return the instance of this class or create one if needed. 792 static SunJCE getInstance() { 793 if (instance == null) { 794 return new SunJCE(); 795 } 796 return instance; 797 } 798 }