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  * - Cipher modes ECB, CBC, CFB, OFB, PCBC, CTR, and CTS for all block ciphers
  61  *   and mode GCM for AES cipher
  62  *
  63  * - Cipher padding ISO10126Padding for non-PKCS#5 block ciphers and
  64  *   NoPadding and PKCS5Padding for all block ciphers
  65  *
  66  * - Password-based Encryption (PBE)
  67  *
  68  * - Diffie-Hellman Key Agreement
  69  *
  70  * - HMAC-MD5, HMAC-SHA1, HMAC-SHA-224, HMAC-SHA-256, HMAC-SHA-384, HMAC-SHA-512
  71  *
  72  */
  73 
  74 public final class SunJCE extends Provider {
  75 
  76     private static final long serialVersionUID = 6812507587804302833L;
  77 
  78     private static final String info = "SunJCE Provider " +
  79     "(implements RSA, DES, Triple DES, AES, Blowfish, ARCFOUR, RC2, PBE, "
  80     + "Diffie-Hellman, HMAC)";
  81 
  82     private static final String OID_PKCS12_RC4_128 = "1.2.840.113549.1.12.1.1";
  83     private static final String OID_PKCS12_RC4_40 = "1.2.840.113549.1.12.1.2";
  84     private static final String OID_PKCS12_DESede = "1.2.840.113549.1.12.1.3";
  85     private static final String OID_PKCS12_RC2_128 = "1.2.840.113549.1.12.1.5";
  86     private static final String OID_PKCS12_RC2_40 = "1.2.840.113549.1.12.1.6";
  87     private static final String OID_PKCS5_MD5_DES = "1.2.840.113549.1.5.3";
  88     private static final String OID_PKCS5_PBKDF2 = "1.2.840.113549.1.5.12";
  89     private static final String OID_PKCS5_PBES2 = "1.2.840.113549.1.5.13";
  90     private static final String OID_PKCS3 = "1.2.840.113549.1.3.1";
  91 
  92     /* Are we debugging? -- for developers */
  93     static final boolean debug = false;
  94 
  95     // Instance of this provider, so we don't have to call the provider list
  96     // to find ourselves or run the risk of not being in the list.
  97     private static volatile SunJCE instance;
  98 
  99     // lazy initialize SecureRandom to avoid potential recursion if Sun
 100     // provider has not been installed yet
 101     private static class SecureRandomHolder {
 102         static final SecureRandom RANDOM = new SecureRandom();
 103     }
 104     static SecureRandom getRandom() { return SecureRandomHolder.RANDOM; }
 105 
 106     public SunJCE() {
 107         /* We are the "SunJCE" provider */
 108         super("SunJCE", PROVIDER_VER, info);
 109 
 110         final String BLOCK_MODES = "ECB|CBC|PCBC|CTR|CTS|CFB|OFB" +
 111             "|CFB8|CFB16|CFB24|CFB32|CFB40|CFB48|CFB56|CFB64" +
 112             "|OFB8|OFB16|OFB24|OFB32|OFB40|OFB48|OFB56|OFB64";
 113         final String BLOCK_MODES128 = BLOCK_MODES +
 114             "|GCM|CFB72|CFB80|CFB88|CFB96|CFB104|CFB112|CFB120|CFB128" +
 115             "|OFB72|OFB80|OFB88|OFB96|OFB104|OFB112|OFB120|OFB128";
 116         final String BLOCK_PADS = "NOPADDING|PKCS5PADDING|ISO10126PADDING";
 117 
 118         AccessController.doPrivileged(
 119             new java.security.PrivilegedAction<>() {
 120                 public Object run() {
 121 
 122                     /*
 123                      * Cipher engines
 124                      */
 125                     put("Cipher.RSA", "com.sun.crypto.provider.RSACipher");
 126                     put("Cipher.RSA SupportedModes", "ECB");
 127                     put("Cipher.RSA SupportedPaddings",
 128                             "NOPADDING|PKCS1PADDING|OAEPPADDING"
 129                             + "|OAEPWITHMD5ANDMGF1PADDING"
 130                             + "|OAEPWITHSHA1ANDMGF1PADDING"
 131                             + "|OAEPWITHSHA-1ANDMGF1PADDING"
 132                             + "|OAEPWITHSHA-224ANDMGF1PADDING"
 133                             + "|OAEPWITHSHA-256ANDMGF1PADDING"
 134                             + "|OAEPWITHSHA-384ANDMGF1PADDING"
 135                             + "|OAEPWITHSHA-512ANDMGF1PADDING"
 136                             + "|OAEPWITHSHA-512/224ANDMGF1PADDING"
 137                             + "|OAEPWITHSHA-512/256ANDMGF1PADDING");
 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                     /*
 340                      * Key(pair) Generator engines
 341                      */
 342                     put("KeyGenerator.DES",
 343                         "com.sun.crypto.provider.DESKeyGenerator");
 344 
 345                     put("KeyGenerator.DESede",
 346                         "com.sun.crypto.provider.DESedeKeyGenerator");
 347                     put("Alg.Alias.KeyGenerator.TripleDES", "DESede");
 348 
 349                     put("KeyGenerator.Blowfish",
 350                         "com.sun.crypto.provider.BlowfishKeyGenerator");
 351 
 352                     put("KeyGenerator.AES",
 353                         "com.sun.crypto.provider.AESKeyGenerator");
 354                     put("Alg.Alias.KeyGenerator.Rijndael", "AES");
 355 
 356                     put("KeyGenerator.RC2",
 357                         "com.sun.crypto.provider.KeyGeneratorCore$" +
 358                         "RC2KeyGenerator");
 359                     put("KeyGenerator.ARCFOUR",
 360                         "com.sun.crypto.provider.KeyGeneratorCore$" +
 361                         "ARCFOURKeyGenerator");
 362                     put("Alg.Alias.KeyGenerator.RC4", "ARCFOUR");
 363 
 364                     put("KeyGenerator.HmacMD5",
 365                         "com.sun.crypto.provider.HmacMD5KeyGenerator");
 366 
 367                     put("KeyGenerator.HmacSHA1",
 368                         "com.sun.crypto.provider.HmacSHA1KeyGenerator");
 369                     put("Alg.Alias.KeyGenerator.OID.1.2.840.113549.2.7", "HmacSHA1");
 370                     put("Alg.Alias.KeyGenerator.1.2.840.113549.2.7", "HmacSHA1");
 371 
 372                     put("KeyGenerator.HmacSHA224",
 373                         "com.sun.crypto.provider.KeyGeneratorCore$HmacSHA2KG$SHA224");
 374                     put("Alg.Alias.KeyGenerator.OID.1.2.840.113549.2.8", "HmacSHA224");
 375                     put("Alg.Alias.KeyGenerator.1.2.840.113549.2.8", "HmacSHA224");
 376 
 377                     put("KeyGenerator.HmacSHA256",
 378                         "com.sun.crypto.provider.KeyGeneratorCore$HmacSHA2KG$SHA256");
 379                     put("Alg.Alias.KeyGenerator.OID.1.2.840.113549.2.9", "HmacSHA256");
 380                     put("Alg.Alias.KeyGenerator.1.2.840.113549.2.9", "HmacSHA256");
 381 
 382                     put("KeyGenerator.HmacSHA384",
 383                         "com.sun.crypto.provider.KeyGeneratorCore$HmacSHA2KG$SHA384");
 384                     put("Alg.Alias.KeyGenerator.OID.1.2.840.113549.2.10", "HmacSHA384");
 385                     put("Alg.Alias.KeyGenerator.1.2.840.113549.2.10", "HmacSHA384");
 386 
 387                     put("KeyGenerator.HmacSHA512",
 388                         "com.sun.crypto.provider.KeyGeneratorCore$HmacSHA2KG$SHA512");
 389                     put("Alg.Alias.KeyGenerator.OID.1.2.840.113549.2.11", "HmacSHA512");
 390                     put("Alg.Alias.KeyGenerator.1.2.840.113549.2.11", "HmacSHA512");
 391 
 392                     put("KeyPairGenerator.DiffieHellman",
 393                         "com.sun.crypto.provider.DHKeyPairGenerator");
 394                     put("Alg.Alias.KeyPairGenerator.DH", "DiffieHellman");
 395                     put("Alg.Alias.KeyPairGenerator.OID."+OID_PKCS3,
 396                         "DiffieHellman");
 397                     put("Alg.Alias.KeyPairGenerator."+OID_PKCS3,
 398                         "DiffieHellman");
 399 
 400                     /*
 401                      * Algorithm parameter generation engines
 402                      */
 403                     put("AlgorithmParameterGenerator.DiffieHellman",
 404                         "com.sun.crypto.provider.DHParameterGenerator");
 405                     put("Alg.Alias.AlgorithmParameterGenerator.DH",
 406                         "DiffieHellman");
 407                     put("Alg.Alias.AlgorithmParameterGenerator.OID."+OID_PKCS3,
 408                         "DiffieHellman");
 409                     put("Alg.Alias.AlgorithmParameterGenerator."+OID_PKCS3,
 410                         "DiffieHellman");
 411 
 412                     /*
 413                      * Key Agreement engines
 414                      */
 415                     put("KeyAgreement.DiffieHellman",
 416                         "com.sun.crypto.provider.DHKeyAgreement");
 417                     put("Alg.Alias.KeyAgreement.DH", "DiffieHellman");
 418                     put("Alg.Alias.KeyAgreement.OID."+OID_PKCS3, "DiffieHellman");
 419                     put("Alg.Alias.KeyAgreement."+OID_PKCS3, "DiffieHellman");
 420 
 421                     put("KeyAgreement.DiffieHellman SupportedKeyClasses",
 422                         "javax.crypto.interfaces.DHPublicKey" +
 423                         "|javax.crypto.interfaces.DHPrivateKey");
 424 
 425                     /*
 426                      * Algorithm Parameter engines
 427                      */
 428                     put("AlgorithmParameters.DiffieHellman",
 429                         "com.sun.crypto.provider.DHParameters");
 430                     put("Alg.Alias.AlgorithmParameters.DH", "DiffieHellman");
 431                     put("Alg.Alias.AlgorithmParameters.OID."+OID_PKCS3,
 432                         "DiffieHellman");
 433                     put("Alg.Alias.AlgorithmParameters."+OID_PKCS3,
 434                         "DiffieHellman");
 435 
 436                     put("AlgorithmParameters.DES",
 437                         "com.sun.crypto.provider.DESParameters");
 438 
 439                     put("AlgorithmParameters.DESede",
 440                         "com.sun.crypto.provider.DESedeParameters");
 441                     put("Alg.Alias.AlgorithmParameters.TripleDES", "DESede");
 442 
 443                     put("AlgorithmParameters.PBE",
 444                         "com.sun.crypto.provider.PBEParameters");
 445 
 446                     put("AlgorithmParameters.PBEWithMD5AndDES",
 447                         "com.sun.crypto.provider.PBEParameters");
 448                     put("Alg.Alias.AlgorithmParameters.OID."+OID_PKCS5_MD5_DES,
 449                         "PBEWithMD5AndDES");
 450                     put("Alg.Alias.AlgorithmParameters."+OID_PKCS5_MD5_DES,
 451                         "PBEWithMD5AndDES");
 452 
 453                     put("AlgorithmParameters.PBEWithMD5AndTripleDES",
 454                         "com.sun.crypto.provider.PBEParameters");
 455 
 456                     put("AlgorithmParameters.PBEWithSHA1AndDESede",
 457                         "com.sun.crypto.provider.PBEParameters");
 458                     put("Alg.Alias.AlgorithmParameters.OID."+OID_PKCS12_DESede,
 459                         "PBEWithSHA1AndDESede");
 460                     put("Alg.Alias.AlgorithmParameters."+OID_PKCS12_DESede,
 461                         "PBEWithSHA1AndDESede");
 462 
 463                     put("AlgorithmParameters.PBEWithSHA1AndRC2_40",
 464                         "com.sun.crypto.provider.PBEParameters");
 465                     put("Alg.Alias.AlgorithmParameters.OID."+OID_PKCS12_RC2_40,
 466                         "PBEWithSHA1AndRC2_40");
 467                     put("Alg.Alias.AlgorithmParameters." + OID_PKCS12_RC2_40,
 468                         "PBEWithSHA1AndRC2_40");
 469 
 470                     put("AlgorithmParameters.PBEWithSHA1AndRC2_128",
 471                         "com.sun.crypto.provider.PBEParameters");
 472                     put("Alg.Alias.AlgorithmParameters.OID."+OID_PKCS12_RC2_128,
 473                         "PBEWithSHA1AndRC2_128");
 474                     put("Alg.Alias.AlgorithmParameters." + OID_PKCS12_RC2_128,
 475                         "PBEWithSHA1AndRC2_128");
 476 
 477                     put("AlgorithmParameters.PBEWithSHA1AndRC4_40",
 478                         "com.sun.crypto.provider.PBEParameters");
 479                     put("Alg.Alias.AlgorithmParameters.OID."+OID_PKCS12_RC4_40,
 480                         "PBEWithSHA1AndRC4_40");
 481                     put("Alg.Alias.AlgorithmParameters." + OID_PKCS12_RC4_40,
 482                         "PBEWithSHA1AndRC4_40");
 483 
 484                     put("AlgorithmParameters.PBEWithSHA1AndRC4_128",
 485                         "com.sun.crypto.provider.PBEParameters");
 486                     put("Alg.Alias.AlgorithmParameters.OID."+OID_PKCS12_RC4_128,
 487                         "PBEWithSHA1AndRC4_128");
 488                     put("Alg.Alias.AlgorithmParameters." + OID_PKCS12_RC4_128,
 489                         "PBEWithSHA1AndRC4_128");
 490 
 491                     put("AlgorithmParameters.PBES2",
 492                         "com.sun.crypto.provider.PBES2Parameters$General");
 493                     put("Alg.Alias.AlgorithmParameters.OID."+OID_PKCS5_PBES2,
 494                         "PBES2");
 495                     put("Alg.Alias.AlgorithmParameters." + OID_PKCS5_PBES2,
 496                         "PBES2");
 497 
 498                     put("AlgorithmParameters.PBEWithHmacSHA1AndAES_128",
 499                         "com.sun.crypto.provider.PBES2Parameters$HmacSHA1AndAES_128");
 500 
 501                     put("AlgorithmParameters.PBEWithHmacSHA224AndAES_128",
 502                         "com.sun.crypto.provider.PBES2Parameters$HmacSHA224AndAES_128");
 503 
 504                     put("AlgorithmParameters.PBEWithHmacSHA256AndAES_128",
 505                         "com.sun.crypto.provider.PBES2Parameters$HmacSHA256AndAES_128");
 506 
 507                     put("AlgorithmParameters.PBEWithHmacSHA384AndAES_128",
 508                         "com.sun.crypto.provider.PBES2Parameters$HmacSHA384AndAES_128");
 509 
 510                     put("AlgorithmParameters.PBEWithHmacSHA512AndAES_128",
 511                         "com.sun.crypto.provider.PBES2Parameters$HmacSHA512AndAES_128");
 512 
 513                     put("AlgorithmParameters.PBEWithHmacSHA1AndAES_256",
 514                         "com.sun.crypto.provider.PBES2Parameters$HmacSHA1AndAES_256");
 515 
 516                     put("AlgorithmParameters.PBEWithHmacSHA224AndAES_256",
 517                         "com.sun.crypto.provider.PBES2Parameters$HmacSHA224AndAES_256");
 518 
 519                     put("AlgorithmParameters.PBEWithHmacSHA256AndAES_256",
 520                         "com.sun.crypto.provider.PBES2Parameters$HmacSHA256AndAES_256");
 521 
 522                     put("AlgorithmParameters.PBEWithHmacSHA384AndAES_256",
 523                         "com.sun.crypto.provider.PBES2Parameters$HmacSHA384AndAES_256");
 524 
 525                     put("AlgorithmParameters.PBEWithHmacSHA512AndAES_256",
 526                         "com.sun.crypto.provider.PBES2Parameters$HmacSHA512AndAES_256");
 527 
 528                     put("AlgorithmParameters.Blowfish",
 529                         "com.sun.crypto.provider.BlowfishParameters");
 530 
 531                     put("AlgorithmParameters.AES",
 532                         "com.sun.crypto.provider.AESParameters");
 533                     put("Alg.Alias.AlgorithmParameters.Rijndael", "AES");
 534                     put("AlgorithmParameters.GCM",
 535                         "com.sun.crypto.provider.GCMParameters");
 536 
 537 
 538                     put("AlgorithmParameters.RC2",
 539                         "com.sun.crypto.provider.RC2Parameters");
 540 
 541                     put("AlgorithmParameters.OAEP",
 542                         "com.sun.crypto.provider.OAEPParameters");
 543 
 544                     /*
 545                      * Key factories
 546                      */
 547                     put("KeyFactory.DiffieHellman",
 548                         "com.sun.crypto.provider.DHKeyFactory");
 549                     put("Alg.Alias.KeyFactory.DH", "DiffieHellman");
 550                     put("Alg.Alias.KeyFactory.OID."+OID_PKCS3,
 551                         "DiffieHellman");
 552                     put("Alg.Alias.KeyFactory."+OID_PKCS3, "DiffieHellman");
 553 
 554                     /*
 555                      * Secret-key factories
 556                      */
 557                     put("SecretKeyFactory.DES",
 558                         "com.sun.crypto.provider.DESKeyFactory");
 559 
 560                     put("SecretKeyFactory.DESede",
 561                         "com.sun.crypto.provider.DESedeKeyFactory");
 562                     put("Alg.Alias.SecretKeyFactory.TripleDES", "DESede");
 563 
 564                     put("SecretKeyFactory.PBEWithMD5AndDES",
 565                         "com.sun.crypto.provider.PBEKeyFactory$PBEWithMD5AndDES"
 566                         );
 567                     put("Alg.Alias.SecretKeyFactory.OID."+OID_PKCS5_MD5_DES,
 568                         "PBEWithMD5AndDES");
 569                     put("Alg.Alias.SecretKeyFactory."+OID_PKCS5_MD5_DES,
 570                         "PBEWithMD5AndDES");
 571 
 572                     put("Alg.Alias.SecretKeyFactory.PBE",
 573                         "PBEWithMD5AndDES");
 574 
 575                     /*
 576                      * Internal in-house crypto algorithm used for
 577                      * the JCEKS keystore type.  Since this was developed
 578                      * internally, there isn't an OID corresponding to this
 579                      * algorithm.
 580                      */
 581                     put("SecretKeyFactory.PBEWithMD5AndTripleDES",
 582                         "com.sun.crypto.provider.PBEKeyFactory$" +
 583                         "PBEWithMD5AndTripleDES"
 584                         );
 585 
 586                     put("SecretKeyFactory.PBEWithSHA1AndDESede",
 587                         "com.sun.crypto.provider.PBEKeyFactory$PBEWithSHA1AndDESede"
 588                         );
 589                     put("Alg.Alias.SecretKeyFactory.OID."+OID_PKCS12_DESede,
 590                         "PBEWithSHA1AndDESede");
 591                     put("Alg.Alias.SecretKeyFactory." + OID_PKCS12_DESede,
 592                         "PBEWithSHA1AndDESede");
 593 
 594                     put("SecretKeyFactory.PBEWithSHA1AndRC2_40",
 595                         "com.sun.crypto.provider.PBEKeyFactory$PBEWithSHA1AndRC2_40"
 596                         );
 597                     put("Alg.Alias.SecretKeyFactory.OID." + OID_PKCS12_RC2_40,
 598                         "PBEWithSHA1AndRC2_40");
 599                     put("Alg.Alias.SecretKeyFactory." + OID_PKCS12_RC2_40,
 600                         "PBEWithSHA1AndRC2_40");
 601 
 602                     put("SecretKeyFactory.PBEWithSHA1AndRC2_128",
 603                         "com.sun.crypto.provider.PBEKeyFactory$PBEWithSHA1AndRC2_128"
 604                         );
 605                     put("Alg.Alias.SecretKeyFactory.OID." + OID_PKCS12_RC2_128,
 606                         "PBEWithSHA1AndRC2_128");
 607                     put("Alg.Alias.SecretKeyFactory." + OID_PKCS12_RC2_128,
 608                         "PBEWithSHA1AndRC2_128");
 609 
 610                     put("SecretKeyFactory.PBEWithSHA1AndRC4_40",
 611                         "com.sun.crypto.provider.PBEKeyFactory$PBEWithSHA1AndRC4_40"
 612                         );
 613 
 614                     put("Alg.Alias.SecretKeyFactory.OID." + OID_PKCS12_RC4_40,
 615                         "PBEWithSHA1AndRC4_40");
 616                     put("Alg.Alias.SecretKeyFactory." + OID_PKCS12_RC4_40,
 617                         "PBEWithSHA1AndRC4_40");
 618 
 619                     put("SecretKeyFactory.PBEWithSHA1AndRC4_128",
 620                         "com.sun.crypto.provider.PBEKeyFactory$PBEWithSHA1AndRC4_128"
 621                         );
 622 
 623                     put("Alg.Alias.SecretKeyFactory.OID." + OID_PKCS12_RC4_128,
 624                         "PBEWithSHA1AndRC4_128");
 625                     put("Alg.Alias.SecretKeyFactory." + OID_PKCS12_RC4_128,
 626                         "PBEWithSHA1AndRC4_128");
 627 
 628                     put("SecretKeyFactory.PBEWithHmacSHA1AndAES_128",
 629                         "com.sun.crypto.provider.PBEKeyFactory$" +
 630                         "PBEWithHmacSHA1AndAES_128");
 631 
 632                     put("SecretKeyFactory.PBEWithHmacSHA224AndAES_128",
 633                         "com.sun.crypto.provider.PBEKeyFactory$" +
 634                         "PBEWithHmacSHA224AndAES_128");
 635 
 636                     put("SecretKeyFactory.PBEWithHmacSHA256AndAES_128",
 637                         "com.sun.crypto.provider.PBEKeyFactory$" +
 638                         "PBEWithHmacSHA256AndAES_128");
 639 
 640                     put("SecretKeyFactory.PBEWithHmacSHA384AndAES_128",
 641                         "com.sun.crypto.provider.PBEKeyFactory$" +
 642                         "PBEWithHmacSHA384AndAES_128");
 643 
 644                     put("SecretKeyFactory.PBEWithHmacSHA512AndAES_128",
 645                         "com.sun.crypto.provider.PBEKeyFactory$" +
 646                         "PBEWithHmacSHA512AndAES_128");
 647 
 648                     put("SecretKeyFactory.PBEWithHmacSHA1AndAES_256",
 649                         "com.sun.crypto.provider.PBEKeyFactory$" +
 650                         "PBEWithHmacSHA1AndAES_256");
 651 
 652                     put("SecretKeyFactory.PBEWithHmacSHA224AndAES_256",
 653                         "com.sun.crypto.provider.PBEKeyFactory$" +
 654                         "PBEWithHmacSHA224AndAES_256");
 655 
 656                     put("SecretKeyFactory.PBEWithHmacSHA256AndAES_256",
 657                         "com.sun.crypto.provider.PBEKeyFactory$" +
 658                         "PBEWithHmacSHA256AndAES_256");
 659 
 660                     put("SecretKeyFactory.PBEWithHmacSHA384AndAES_256",
 661                         "com.sun.crypto.provider.PBEKeyFactory$" +
 662                         "PBEWithHmacSHA384AndAES_256");
 663 
 664                     put("SecretKeyFactory.PBEWithHmacSHA512AndAES_256",
 665                         "com.sun.crypto.provider.PBEKeyFactory$" +
 666                         "PBEWithHmacSHA512AndAES_256");
 667 
 668                     // PBKDF2
 669 
 670                     put("SecretKeyFactory.PBKDF2WithHmacSHA1",
 671                         "com.sun.crypto.provider.PBKDF2Core$HmacSHA1");
 672                     put("Alg.Alias.SecretKeyFactory.OID." + OID_PKCS5_PBKDF2,
 673                         "PBKDF2WithHmacSHA1");
 674                     put("Alg.Alias.SecretKeyFactory." + OID_PKCS5_PBKDF2,
 675                         "PBKDF2WithHmacSHA1");
 676 
 677                     put("SecretKeyFactory.PBKDF2WithHmacSHA224",
 678                         "com.sun.crypto.provider.PBKDF2Core$HmacSHA224");
 679                     put("SecretKeyFactory.PBKDF2WithHmacSHA256",
 680                         "com.sun.crypto.provider.PBKDF2Core$HmacSHA256");
 681                     put("SecretKeyFactory.PBKDF2WithHmacSHA384",
 682                         "com.sun.crypto.provider.PBKDF2Core$HmacSHA384");
 683                     put("SecretKeyFactory.PBKDF2WithHmacSHA512",
 684                         "com.sun.crypto.provider.PBKDF2Core$HmacSHA512");
 685 
 686                     /*
 687                      * MAC
 688                      */
 689                     put("Mac.HmacMD5", "com.sun.crypto.provider.HmacMD5");
 690                     put("Mac.HmacSHA1", "com.sun.crypto.provider.HmacSHA1");
 691                     put("Alg.Alias.Mac.OID.1.2.840.113549.2.7", "HmacSHA1");
 692                     put("Alg.Alias.Mac.1.2.840.113549.2.7", "HmacSHA1");
 693                     put("Mac.HmacSHA224",
 694                         "com.sun.crypto.provider.HmacCore$HmacSHA224");
 695                     put("Alg.Alias.Mac.OID.1.2.840.113549.2.8", "HmacSHA224");
 696                     put("Alg.Alias.Mac.1.2.840.113549.2.8", "HmacSHA224");
 697                     put("Mac.HmacSHA256",
 698                         "com.sun.crypto.provider.HmacCore$HmacSHA256");
 699                     put("Alg.Alias.Mac.OID.1.2.840.113549.2.9", "HmacSHA256");
 700                     put("Alg.Alias.Mac.1.2.840.113549.2.9", "HmacSHA256");
 701                     put("Mac.HmacSHA384",
 702                         "com.sun.crypto.provider.HmacCore$HmacSHA384");
 703                     put("Alg.Alias.Mac.OID.1.2.840.113549.2.10", "HmacSHA384");
 704                     put("Alg.Alias.Mac.1.2.840.113549.2.10", "HmacSHA384");
 705                     put("Mac.HmacSHA512",
 706                         "com.sun.crypto.provider.HmacCore$HmacSHA512");
 707                     put("Alg.Alias.Mac.OID.1.2.840.113549.2.11", "HmacSHA512");
 708                     put("Alg.Alias.Mac.1.2.840.113549.2.11", "HmacSHA512");
 709 
 710                     // TODO: aliases with OIDs
 711                     put("Mac.HmacSHA512/224",
 712                             "com.sun.crypto.provider.HmacCore$HmacSHA512_224");
 713                     put("Mac.HmacSHA512/256",
 714                             "com.sun.crypto.provider.HmacCore$HmacSHA512_256");
 715 
 716                     put("Mac.HmacPBESHA1",
 717                         "com.sun.crypto.provider.HmacPKCS12PBESHA1");
 718 
 719                     // PBMAC1
 720 
 721                     put("Mac.PBEWithHmacSHA1",
 722                         "com.sun.crypto.provider.PBMAC1Core$HmacSHA1");
 723                     put("Mac.PBEWithHmacSHA224",
 724                         "com.sun.crypto.provider.PBMAC1Core$HmacSHA224");
 725                     put("Mac.PBEWithHmacSHA256",
 726                         "com.sun.crypto.provider.PBMAC1Core$HmacSHA256");
 727                     put("Mac.PBEWithHmacSHA384",
 728                         "com.sun.crypto.provider.PBMAC1Core$HmacSHA384");
 729                     put("Mac.PBEWithHmacSHA512",
 730                         "com.sun.crypto.provider.PBMAC1Core$HmacSHA512");
 731 
 732                     put("Mac.SslMacMD5",
 733                         "com.sun.crypto.provider.SslMacCore$SslMacMD5");
 734                     put("Mac.SslMacSHA1",
 735                         "com.sun.crypto.provider.SslMacCore$SslMacSHA1");
 736 
 737                     put("Mac.HmacMD5 SupportedKeyFormats", "RAW");
 738                     put("Mac.HmacSHA1 SupportedKeyFormats", "RAW");
 739                     put("Mac.HmacSHA224 SupportedKeyFormats", "RAW");
 740                     put("Mac.HmacSHA256 SupportedKeyFormats", "RAW");
 741                     put("Mac.HmacSHA384 SupportedKeyFormats", "RAW");
 742                     put("Mac.HmacSHA512 SupportedKeyFormats", "RAW");
 743                     put("Mac.HmacPBESHA1 SupportedKeyFormats", "RAW");
 744                     put("Mac.PBEWithHmacSHA1 SupportedKeyFormatS", "RAW");
 745                     put("Mac.PBEWithHmacSHA224 SupportedKeyFormats", "RAW");
 746                     put("Mac.PBEWithHmacSHA256 SupportedKeyFormats", "RAW");
 747                     put("Mac.PBEWithHmacSHA384 SupportedKeyFormats", "RAW");
 748                     put("Mac.PBEWithHmacSHA512 SupportedKeyFormats", "RAW");
 749                     put("Mac.SslMacMD5 SupportedKeyFormats", "RAW");
 750                     put("Mac.SslMacSHA1 SupportedKeyFormats", "RAW");
 751 
 752                     /*
 753                      * KeyStore
 754                      */
 755                     put("KeyStore.JCEKS", "com.sun.crypto.provider.JceKeyStore");
 756 
 757                     /*
 758                      * SSL/TLS mechanisms
 759                      *
 760                      * These are strictly internal implementations and may
 761                      * be changed at any time.  These names were chosen
 762                      * because PKCS11/SunPKCS11 does not yet have TLS1.2
 763                      * mechanisms, and it will cause calls to come here.
 764                      */
 765                     put("KeyGenerator.SunTlsPrf",
 766                             "com.sun.crypto.provider.TlsPrfGenerator$V10");
 767                     put("KeyGenerator.SunTls12Prf",
 768                             "com.sun.crypto.provider.TlsPrfGenerator$V12");
 769 
 770                     put("KeyGenerator.SunTlsMasterSecret",
 771                         "com.sun.crypto.provider.TlsMasterSecretGenerator");
 772                     put("Alg.Alias.KeyGenerator.SunTls12MasterSecret",
 773                         "SunTlsMasterSecret");
 774                     put("Alg.Alias.KeyGenerator.SunTlsExtendedMasterSecret",
 775                         "SunTlsMasterSecret");
 776 
 777                     put("KeyGenerator.SunTlsKeyMaterial",
 778                         "com.sun.crypto.provider.TlsKeyMaterialGenerator");
 779                     put("Alg.Alias.KeyGenerator.SunTls12KeyMaterial",
 780                         "SunTlsKeyMaterial");
 781 
 782                     put("KeyGenerator.SunTlsRsaPremasterSecret",
 783                         "com.sun.crypto.provider.TlsRsaPremasterSecretGenerator");
 784                     put("Alg.Alias.KeyGenerator.SunTls12RsaPremasterSecret",
 785                         "SunTlsRsaPremasterSecret");
 786 
 787                     return null;
 788                 }
 789             });
 790 
 791         if (instance == null) {
 792             instance = this;
 793         }
 794     }
 795 
 796     // Return the instance of this class or create one if needed.
 797     static SunJCE getInstance() {
 798         if (instance == null) {
 799             return new SunJCE();
 800         }
 801         return instance;
 802     }
 803 }