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 }