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