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 }