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