mirror of
https://github.com/openjdk/jdk.git
synced 2026-01-28 12:09:14 +00:00
810 lines
33 KiB
Java
810 lines
33 KiB
Java
/*
|
|
* Copyright (c) 1997, 2025, Oracle and/or its affiliates. All rights reserved.
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
*
|
|
* This code is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License version 2 only, as
|
|
* published by the Free Software Foundation. Oracle designates this
|
|
* particular file as subject to the "Classpath" exception as provided
|
|
* by Oracle in the LICENSE file that accompanied this code.
|
|
*
|
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
* version 2 for more details (a copy is included in the LICENSE file that
|
|
* accompanied this code).
|
|
*
|
|
* You should have received a copy of the GNU General Public License version
|
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
*
|
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
|
* or visit www.oracle.com if you need additional information or have any
|
|
* questions.
|
|
*/
|
|
|
|
package com.sun.crypto.provider;
|
|
|
|
import java.security.Provider;
|
|
import java.security.SecureRandom;
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
import static sun.security.util.SecurityConstants.PROVIDER_VER;
|
|
import static sun.security.util.SecurityProviderConstants.*;
|
|
|
|
/*
|
|
* The "SunJCE" Cryptographic Service Provider.
|
|
*
|
|
* @author Jan Luehe
|
|
* @author Sharon Liu
|
|
*/
|
|
|
|
/**
|
|
* Defines the "SunJCE" provider.
|
|
*
|
|
* Supported algorithms and their names:
|
|
*
|
|
* - RSA encryption (PKCS#1 v1.5 and raw)
|
|
*
|
|
* - DES
|
|
*
|
|
* - DES-EDE
|
|
*
|
|
* - AES
|
|
*
|
|
* - Blowfish
|
|
*
|
|
* - RC2
|
|
*
|
|
* - ARCFOUR (RC4 compatible)
|
|
*
|
|
* - ChaCha20 (Stream cipher only and in AEAD mode with Poly1305)
|
|
*
|
|
* - Cipher modes ECB, CBC, CFB, OFB, PCBC, CTR, and CTS for all block ciphers
|
|
* and mode GCM for AES cipher
|
|
*
|
|
* - Cipher padding ISO10126Padding for non-PKCS#5 block ciphers and
|
|
* NoPadding and PKCS5Padding for all block ciphers
|
|
*
|
|
* - Password-based Encryption (PBE)
|
|
*
|
|
* - Diffie-Hellman Key Agreement
|
|
*
|
|
* - HMAC-MD5, HMAC-SHA1, HMAC with SHA2 family and SHA3 family of digests
|
|
*
|
|
* - JCEKS KeyStore
|
|
*
|
|
* - DHKEM
|
|
*
|
|
* - ML-KEM
|
|
*
|
|
* - HKDF-SHA256, HKDF-SHA384, and HKDF-SHA512
|
|
*/
|
|
|
|
public final class SunJCE extends Provider {
|
|
|
|
@java.io.Serial
|
|
private static final long serialVersionUID = 6812507587804302833L;
|
|
|
|
private static final String info = "SunJCE Provider " +
|
|
"(implements RSA, DES, Triple DES, AES, Blowfish, ARCFOUR, RC2, PBE, "
|
|
+ "Diffie-Hellman, HMAC, ChaCha20, DHKEM, ML-KEM, and HKDF)";
|
|
|
|
/* Are we debugging? -- for developers */
|
|
static final boolean debug = false;
|
|
|
|
// Instance of this provider, so we don't have to call the provider list
|
|
// to find ourselves or run the risk of not being in the list.
|
|
private static volatile SunJCE instance;
|
|
|
|
// lazy initialize SecureRandom to avoid potential recursion if Sun
|
|
// provider has not been installed yet
|
|
private static class SecureRandomHolder {
|
|
static final SecureRandom RANDOM = new SecureRandom();
|
|
}
|
|
static SecureRandom getRandom() { return SecureRandomHolder.RANDOM; }
|
|
|
|
// ps: putService
|
|
private void ps(String type, String algo, String cn) {
|
|
putService(new Provider.Service(this, type, algo, cn, null, null));
|
|
}
|
|
|
|
private void ps(String type, String algo, String cn, List<String> als,
|
|
HashMap<String, String> attrs) {
|
|
putService(new Provider.Service(this, type, algo, cn, als,
|
|
attrs));
|
|
}
|
|
|
|
// psA: putService with default aliases
|
|
private void psA(String type, String algo, String cn,
|
|
HashMap<String, String> attrs) {
|
|
putService(new Provider.Service(this, type, algo, cn, getAliases(algo),
|
|
attrs));
|
|
}
|
|
|
|
public SunJCE() {
|
|
/* We are the "SunJCE" provider */
|
|
super("SunJCE", PROVIDER_VER, info);
|
|
|
|
putEntries();
|
|
|
|
if (instance == null) {
|
|
instance = this;
|
|
}
|
|
}
|
|
|
|
void putEntries() {
|
|
// reuse attribute map and reset before each reuse
|
|
HashMap<String, String> attrs = new HashMap<>(3);
|
|
attrs.put("SupportedModes", "ECB");
|
|
attrs.put("SupportedPaddings", "NOPADDING|PKCS1PADDING|OAEPPADDING"
|
|
+ "|OAEPWITHMD5ANDMGF1PADDING"
|
|
+ "|OAEPWITHSHA1ANDMGF1PADDING"
|
|
+ "|OAEPWITHSHA-1ANDMGF1PADDING"
|
|
+ "|OAEPWITHSHA-224ANDMGF1PADDING"
|
|
+ "|OAEPWITHSHA-256ANDMGF1PADDING"
|
|
+ "|OAEPWITHSHA-384ANDMGF1PADDING"
|
|
+ "|OAEPWITHSHA-512ANDMGF1PADDING"
|
|
+ "|OAEPWITHSHA-512/224ANDMGF1PADDING"
|
|
+ "|OAEPWITHSHA-512/256ANDMGF1PADDING");
|
|
attrs.put("SupportedKeyClasses",
|
|
"java.security.interfaces.RSAPublicKey" +
|
|
"|java.security.interfaces.RSAPrivateKey");
|
|
ps("Cipher", "RSA",
|
|
"com.sun.crypto.provider.RSACipher", null, attrs);
|
|
|
|
// common block cipher modes, pads
|
|
final String BLOCK_MODES = "ECB|CBC|PCBC|CTR|CTS|CFB|OFB" +
|
|
"|CFB8|CFB16|CFB24|CFB32|CFB40|CFB48|CFB56|CFB64" +
|
|
"|OFB8|OFB16|OFB24|OFB32|OFB40|OFB48|OFB56|OFB64";
|
|
final String BLOCK_MODES128 = BLOCK_MODES +
|
|
"|CFB72|CFB80|CFB88|CFB96|CFB104|CFB112|CFB120|CFB128" +
|
|
"|OFB72|OFB80|OFB88|OFB96|OFB104|OFB112|OFB120|OFB128";
|
|
final String BLOCK_PADS = "NOPADDING|PKCS5PADDING|ISO10126PADDING";
|
|
|
|
attrs.clear();
|
|
attrs.put("SupportedModes", BLOCK_MODES);
|
|
attrs.put("SupportedPaddings", BLOCK_PADS);
|
|
attrs.put("SupportedKeyFormats", "RAW");
|
|
ps("Cipher", "DES",
|
|
"com.sun.crypto.provider.DESCipher", null, attrs);
|
|
psA("Cipher", "DESede", "com.sun.crypto.provider.DESedeCipher",
|
|
attrs);
|
|
ps("Cipher", "Blowfish",
|
|
"com.sun.crypto.provider.BlowfishCipher", null, attrs);
|
|
|
|
ps("Cipher", "RC2",
|
|
"com.sun.crypto.provider.RC2Cipher", null, attrs);
|
|
|
|
attrs.clear();
|
|
attrs.put("SupportedModes", BLOCK_MODES128);
|
|
attrs.put("SupportedPaddings", BLOCK_PADS);
|
|
attrs.put("SupportedKeyFormats", "RAW");
|
|
psA("Cipher", "AES",
|
|
"com.sun.crypto.provider.AESCipher$General", attrs);
|
|
|
|
attrs.clear();
|
|
attrs.put("SupportedKeyFormats", "RAW");
|
|
psA("Cipher", "AES/KW/NoPadding",
|
|
"com.sun.crypto.provider.KeyWrapCipher$AES_KW_NoPadding",
|
|
attrs);
|
|
ps("Cipher", "AES/KW/PKCS5Padding",
|
|
"com.sun.crypto.provider.KeyWrapCipher$AES_KW_PKCS5Padding",
|
|
null, attrs);
|
|
psA("Cipher", "AES/KWP/NoPadding",
|
|
"com.sun.crypto.provider.KeyWrapCipher$AES_KWP_NoPadding",
|
|
attrs);
|
|
|
|
psA("Cipher", "AES_128/ECB/NoPadding",
|
|
"com.sun.crypto.provider.AESCipher$AES128_ECB_NoPadding",
|
|
attrs);
|
|
psA("Cipher", "AES_128/CBC/NoPadding",
|
|
"com.sun.crypto.provider.AESCipher$AES128_CBC_NoPadding",
|
|
attrs);
|
|
psA("Cipher", "AES_128/OFB/NoPadding",
|
|
"com.sun.crypto.provider.AESCipher$AES128_OFB_NoPadding",
|
|
attrs);
|
|
psA("Cipher", "AES_128/CFB/NoPadding",
|
|
"com.sun.crypto.provider.AESCipher$AES128_CFB_NoPadding",
|
|
attrs);
|
|
psA("Cipher", "AES_128/KW/NoPadding",
|
|
"com.sun.crypto.provider.KeyWrapCipher$AES128_KW_NoPadding",
|
|
attrs);
|
|
ps("Cipher", "AES_128/KW/PKCS5Padding",
|
|
"com.sun.crypto.provider.KeyWrapCipher$AES128_KW_PKCS5Padding",
|
|
null, attrs);
|
|
psA("Cipher", "AES_128/KWP/NoPadding",
|
|
"com.sun.crypto.provider.KeyWrapCipher$AES128_KWP_NoPadding",
|
|
attrs);
|
|
|
|
psA("Cipher", "AES_192/ECB/NoPadding",
|
|
"com.sun.crypto.provider.AESCipher$AES192_ECB_NoPadding",
|
|
attrs);
|
|
psA("Cipher", "AES_192/CBC/NoPadding",
|
|
"com.sun.crypto.provider.AESCipher$AES192_CBC_NoPadding",
|
|
attrs);
|
|
psA("Cipher", "AES_192/OFB/NoPadding",
|
|
"com.sun.crypto.provider.AESCipher$AES192_OFB_NoPadding",
|
|
attrs);
|
|
psA("Cipher", "AES_192/CFB/NoPadding",
|
|
"com.sun.crypto.provider.AESCipher$AES192_CFB_NoPadding",
|
|
attrs);
|
|
psA("Cipher", "AES_192/KW/NoPadding",
|
|
"com.sun.crypto.provider.KeyWrapCipher$AES192_KW_NoPadding",
|
|
attrs);
|
|
ps("Cipher", "AES_192/KW/PKCS5Padding",
|
|
"com.sun.crypto.provider.KeyWrapCipher$AES192_KW_PKCS5Padding",
|
|
null, attrs);
|
|
psA("Cipher", "AES_192/KWP/NoPadding",
|
|
"com.sun.crypto.provider.KeyWrapCipher$AES192_KWP_NoPadding",
|
|
attrs);
|
|
|
|
psA("Cipher", "AES_256/ECB/NoPadding",
|
|
"com.sun.crypto.provider.AESCipher$AES256_ECB_NoPadding",
|
|
attrs);
|
|
psA("Cipher", "AES_256/CBC/NoPadding",
|
|
"com.sun.crypto.provider.AESCipher$AES256_CBC_NoPadding",
|
|
attrs);
|
|
psA("Cipher", "AES_256/OFB/NoPadding",
|
|
"com.sun.crypto.provider.AESCipher$AES256_OFB_NoPadding",
|
|
attrs);
|
|
psA("Cipher", "AES_256/CFB/NoPadding",
|
|
"com.sun.crypto.provider.AESCipher$AES256_CFB_NoPadding",
|
|
attrs);
|
|
psA("Cipher", "AES_256/KW/NoPadding",
|
|
"com.sun.crypto.provider.KeyWrapCipher$AES256_KW_NoPadding",
|
|
attrs);
|
|
ps("Cipher", "AES_256/KW/PKCS5Padding",
|
|
"com.sun.crypto.provider.KeyWrapCipher$AES256_KW_PKCS5Padding",
|
|
null, attrs);
|
|
psA("Cipher", "AES_256/KWP/NoPadding",
|
|
"com.sun.crypto.provider.KeyWrapCipher$AES256_KWP_NoPadding",
|
|
attrs);
|
|
|
|
attrs.clear();
|
|
attrs.put("SupportedModes", "GCM");
|
|
attrs.put("SupportedKeyFormats", "RAW");
|
|
|
|
ps("Cipher", "AES/GCM/NoPadding",
|
|
"com.sun.crypto.provider.GaloisCounterMode$AESGCM", null,
|
|
attrs);
|
|
psA("Cipher", "AES_128/GCM/NoPadding",
|
|
"com.sun.crypto.provider.GaloisCounterMode$AES128",
|
|
attrs);
|
|
psA("Cipher", "AES_192/GCM/NoPadding",
|
|
"com.sun.crypto.provider.GaloisCounterMode$AES192",
|
|
attrs);
|
|
psA("Cipher", "AES_256/GCM/NoPadding",
|
|
"com.sun.crypto.provider.GaloisCounterMode$AES256",
|
|
attrs);
|
|
|
|
attrs.clear();
|
|
attrs.put("SupportedModes", "CBC");
|
|
attrs.put("SupportedPaddings", "NOPADDING");
|
|
attrs.put("SupportedKeyFormats", "RAW");
|
|
ps("Cipher", "DESedeWrap",
|
|
"com.sun.crypto.provider.DESedeWrapCipher", null, attrs);
|
|
|
|
attrs.clear();
|
|
attrs.put("SupportedModes", "ECB");
|
|
attrs.put("SupportedPaddings", "NOPADDING");
|
|
attrs.put("SupportedKeyFormats", "RAW");
|
|
psA("Cipher", "ARCFOUR",
|
|
"com.sun.crypto.provider.ARCFOURCipher", attrs);
|
|
|
|
attrs.clear();
|
|
attrs.put("SupportedKeyFormats", "RAW");
|
|
ps("Cipher", "ChaCha20",
|
|
"com.sun.crypto.provider.ChaCha20Cipher$ChaCha20Only",
|
|
null, attrs);
|
|
psA("Cipher", "ChaCha20-Poly1305",
|
|
"com.sun.crypto.provider.ChaCha20Cipher$ChaCha20Poly1305",
|
|
attrs);
|
|
|
|
// PBES1
|
|
psA("Cipher", "PBEWithMD5AndDES",
|
|
"com.sun.crypto.provider.PBEWithMD5AndDESCipher",
|
|
null);
|
|
ps("Cipher", "PBEWithMD5AndTripleDES",
|
|
"com.sun.crypto.provider.PBEWithMD5AndTripleDESCipher");
|
|
psA("Cipher", "PBEWithSHA1AndDESede",
|
|
"com.sun.crypto.provider.PKCS12PBECipherCore$PBEWithSHA1AndDESede",
|
|
null);
|
|
psA("Cipher", "PBEWithSHA1AndRC2_40",
|
|
"com.sun.crypto.provider.PKCS12PBECipherCore$PBEWithSHA1AndRC2_40",
|
|
null);
|
|
psA("Cipher", "PBEWithSHA1AndRC2_128",
|
|
"com.sun.crypto.provider.PKCS12PBECipherCore$PBEWithSHA1AndRC2_128",
|
|
null);
|
|
psA("Cipher", "PBEWithSHA1AndRC4_40",
|
|
"com.sun.crypto.provider.PKCS12PBECipherCore$PBEWithSHA1AndRC4_40",
|
|
null);
|
|
|
|
psA("Cipher", "PBEWithSHA1AndRC4_128",
|
|
"com.sun.crypto.provider.PKCS12PBECipherCore$PBEWithSHA1AndRC4_128",
|
|
null);
|
|
|
|
// PBES2
|
|
ps("Cipher", "PBEWithHmacSHA1AndAES_128",
|
|
"com.sun.crypto.provider.PBES2Core$HmacSHA1AndAES_128");
|
|
|
|
ps("Cipher", "PBEWithHmacSHA224AndAES_128",
|
|
"com.sun.crypto.provider.PBES2Core$HmacSHA224AndAES_128");
|
|
|
|
ps("Cipher", "PBEWithHmacSHA256AndAES_128",
|
|
"com.sun.crypto.provider.PBES2Core$HmacSHA256AndAES_128");
|
|
|
|
ps("Cipher", "PBEWithHmacSHA384AndAES_128",
|
|
"com.sun.crypto.provider.PBES2Core$HmacSHA384AndAES_128");
|
|
|
|
ps("Cipher", "PBEWithHmacSHA512AndAES_128",
|
|
"com.sun.crypto.provider.PBES2Core$HmacSHA512AndAES_128");
|
|
|
|
ps("Cipher", "PBEWithHmacSHA512/224AndAES_128",
|
|
"com.sun.crypto.provider.PBES2Core$HmacSHA512_224AndAES_128");
|
|
|
|
ps("Cipher", "PBEWithHmacSHA512/256AndAES_128",
|
|
"com.sun.crypto.provider.PBES2Core$HmacSHA512_256AndAES_128");
|
|
|
|
|
|
ps("Cipher", "PBEWithHmacSHA1AndAES_256",
|
|
"com.sun.crypto.provider.PBES2Core$HmacSHA1AndAES_256");
|
|
|
|
ps("Cipher", "PBEWithHmacSHA224AndAES_256",
|
|
"com.sun.crypto.provider.PBES2Core$HmacSHA224AndAES_256");
|
|
|
|
ps("Cipher", "PBEWithHmacSHA256AndAES_256",
|
|
"com.sun.crypto.provider.PBES2Core$HmacSHA256AndAES_256");
|
|
|
|
ps("Cipher", "PBEWithHmacSHA384AndAES_256",
|
|
"com.sun.crypto.provider.PBES2Core$HmacSHA384AndAES_256");
|
|
|
|
ps("Cipher", "PBEWithHmacSHA512AndAES_256",
|
|
"com.sun.crypto.provider.PBES2Core$HmacSHA512AndAES_256");
|
|
|
|
ps("Cipher", "PBEWithHmacSHA512/224AndAES_256",
|
|
"com.sun.crypto.provider.PBES2Core$HmacSHA512_224AndAES_256");
|
|
|
|
ps("Cipher", "PBEWithHmacSHA512/256AndAES_256",
|
|
"com.sun.crypto.provider.PBES2Core$HmacSHA512_256AndAES_256");
|
|
|
|
/*
|
|
* Key(pair) Generator engines
|
|
*/
|
|
ps("KeyGenerator", "DES",
|
|
"com.sun.crypto.provider.DESKeyGenerator");
|
|
psA("KeyGenerator", "DESede",
|
|
"com.sun.crypto.provider.DESedeKeyGenerator",
|
|
null);
|
|
ps("KeyGenerator", "Blowfish",
|
|
"com.sun.crypto.provider.BlowfishKeyGenerator");
|
|
psA("KeyGenerator", "AES",
|
|
"com.sun.crypto.provider.AESKeyGenerator",
|
|
null);
|
|
ps("KeyGenerator", "RC2",
|
|
"com.sun.crypto.provider.KeyGeneratorCore$RC2KeyGenerator");
|
|
psA("KeyGenerator", "ARCFOUR",
|
|
"com.sun.crypto.provider.KeyGeneratorCore$ARCFOURKeyGenerator",
|
|
null);
|
|
ps("KeyGenerator", "ChaCha20",
|
|
"com.sun.crypto.provider.KeyGeneratorCore$ChaCha20KeyGenerator");
|
|
ps("KeyGenerator", "HmacMD5",
|
|
"com.sun.crypto.provider.HmacMD5KeyGenerator");
|
|
|
|
psA("KeyGenerator", "HmacSHA1",
|
|
"com.sun.crypto.provider.HmacSHA1KeyGenerator", null);
|
|
psA("KeyGenerator", "HmacSHA224",
|
|
"com.sun.crypto.provider.KeyGeneratorCore$HmacKG$SHA224",
|
|
null);
|
|
psA("KeyGenerator", "HmacSHA256",
|
|
"com.sun.crypto.provider.KeyGeneratorCore$HmacKG$SHA256",
|
|
null);
|
|
psA("KeyGenerator", "HmacSHA384",
|
|
"com.sun.crypto.provider.KeyGeneratorCore$HmacKG$SHA384",
|
|
null);
|
|
psA("KeyGenerator", "HmacSHA512",
|
|
"com.sun.crypto.provider.KeyGeneratorCore$HmacKG$SHA512",
|
|
null);
|
|
psA("KeyGenerator", "HmacSHA512/224",
|
|
"com.sun.crypto.provider.KeyGeneratorCore$HmacKG$SHA512_224",
|
|
null);
|
|
psA("KeyGenerator", "HmacSHA512/256",
|
|
"com.sun.crypto.provider.KeyGeneratorCore$HmacKG$SHA512_256",
|
|
null);
|
|
|
|
psA("KeyGenerator", "HmacSHA3-224",
|
|
"com.sun.crypto.provider.KeyGeneratorCore$HmacKG$SHA3_224",
|
|
null);
|
|
psA("KeyGenerator", "HmacSHA3-256",
|
|
"com.sun.crypto.provider.KeyGeneratorCore$HmacKG$SHA3_256",
|
|
null);
|
|
psA("KeyGenerator", "HmacSHA3-384",
|
|
"com.sun.crypto.provider.KeyGeneratorCore$HmacKG$SHA3_384",
|
|
null);
|
|
psA("KeyGenerator", "HmacSHA3-512",
|
|
"com.sun.crypto.provider.KeyGeneratorCore$HmacKG$SHA3_512",
|
|
null);
|
|
|
|
psA("KeyPairGenerator", "DiffieHellman",
|
|
"com.sun.crypto.provider.DHKeyPairGenerator",
|
|
null);
|
|
|
|
/*
|
|
* Algorithm parameter generation engines
|
|
*/
|
|
psA("AlgorithmParameterGenerator",
|
|
"DiffieHellman", "com.sun.crypto.provider.DHParameterGenerator",
|
|
null);
|
|
|
|
/*
|
|
* Key Agreement engines
|
|
*/
|
|
attrs.clear();
|
|
attrs.put("SupportedKeyClasses", "javax.crypto.interfaces.DHPublicKey" +
|
|
"|javax.crypto.interfaces.DHPrivateKey");
|
|
psA("KeyAgreement", "DiffieHellman",
|
|
"com.sun.crypto.provider.DHKeyAgreement",
|
|
attrs);
|
|
|
|
/*
|
|
* Key Derivation engines
|
|
*/
|
|
ps("KDF", "HKDF-SHA256",
|
|
"com.sun.crypto.provider.HKDFKeyDerivation$HKDFSHA256");
|
|
ps("KDF", "HKDF-SHA384",
|
|
"com.sun.crypto.provider.HKDFKeyDerivation$HKDFSHA384");
|
|
ps("KDF", "HKDF-SHA512",
|
|
"com.sun.crypto.provider.HKDFKeyDerivation$HKDFSHA512");
|
|
|
|
/*
|
|
* Algorithm Parameter engines
|
|
*/
|
|
psA("AlgorithmParameters", "DiffieHellman",
|
|
"com.sun.crypto.provider.DHParameters", null);
|
|
|
|
ps("AlgorithmParameters", "DES",
|
|
"com.sun.crypto.provider.DESParameters");
|
|
|
|
psA("AlgorithmParameters", "DESede",
|
|
"com.sun.crypto.provider.DESedeParameters", null);
|
|
|
|
psA("AlgorithmParameters", "PBEWithMD5AndDES",
|
|
"com.sun.crypto.provider.PBEParameters",
|
|
null);
|
|
|
|
ps("AlgorithmParameters", "PBEWithMD5AndTripleDES",
|
|
"com.sun.crypto.provider.PBEParameters");
|
|
|
|
psA("AlgorithmParameters", "PBEWithSHA1AndDESede",
|
|
"com.sun.crypto.provider.PBEParameters",
|
|
null);
|
|
|
|
psA("AlgorithmParameters", "PBEWithSHA1AndRC2_40",
|
|
"com.sun.crypto.provider.PBEParameters",
|
|
null);
|
|
|
|
psA("AlgorithmParameters", "PBEWithSHA1AndRC2_128",
|
|
"com.sun.crypto.provider.PBEParameters",
|
|
null);
|
|
|
|
psA("AlgorithmParameters", "PBEWithSHA1AndRC4_40",
|
|
"com.sun.crypto.provider.PBEParameters",
|
|
null);
|
|
|
|
psA("AlgorithmParameters", "PBEWithSHA1AndRC4_128",
|
|
"com.sun.crypto.provider.PBEParameters",
|
|
null);
|
|
|
|
psA("AlgorithmParameters", "PBES2",
|
|
"com.sun.crypto.provider.PBES2Parameters$General",
|
|
null);
|
|
|
|
ps("AlgorithmParameters", "PBEWithHmacSHA1AndAES_128",
|
|
"com.sun.crypto.provider.PBES2Parameters$HmacSHA1AndAES_128");
|
|
|
|
ps("AlgorithmParameters", "PBEWithHmacSHA224AndAES_128",
|
|
"com.sun.crypto.provider.PBES2Parameters$HmacSHA224AndAES_128");
|
|
|
|
ps("AlgorithmParameters", "PBEWithHmacSHA256AndAES_128",
|
|
"com.sun.crypto.provider.PBES2Parameters$HmacSHA256AndAES_128");
|
|
|
|
ps("AlgorithmParameters", "PBEWithHmacSHA384AndAES_128",
|
|
"com.sun.crypto.provider.PBES2Parameters$HmacSHA384AndAES_128");
|
|
|
|
ps("AlgorithmParameters", "PBEWithHmacSHA512AndAES_128",
|
|
"com.sun.crypto.provider.PBES2Parameters$HmacSHA512AndAES_128");
|
|
|
|
ps("AlgorithmParameters", "PBEWithHmacSHA512/224AndAES_128",
|
|
"com.sun.crypto.provider.PBES2Parameters$HmacSHA512_224AndAES_128");
|
|
|
|
ps("AlgorithmParameters", "PBEWithHmacSHA512/256AndAES_128",
|
|
"com.sun.crypto.provider.PBES2Parameters$HmacSHA512_256AndAES_128");
|
|
|
|
ps("AlgorithmParameters", "PBEWithHmacSHA1AndAES_256",
|
|
"com.sun.crypto.provider.PBES2Parameters$HmacSHA1AndAES_256");
|
|
|
|
ps("AlgorithmParameters", "PBEWithHmacSHA224AndAES_256",
|
|
"com.sun.crypto.provider.PBES2Parameters$HmacSHA224AndAES_256");
|
|
|
|
ps("AlgorithmParameters", "PBEWithHmacSHA256AndAES_256",
|
|
"com.sun.crypto.provider.PBES2Parameters$HmacSHA256AndAES_256");
|
|
|
|
ps("AlgorithmParameters", "PBEWithHmacSHA384AndAES_256",
|
|
"com.sun.crypto.provider.PBES2Parameters$HmacSHA384AndAES_256");
|
|
|
|
ps("AlgorithmParameters", "PBEWithHmacSHA512AndAES_256",
|
|
"com.sun.crypto.provider.PBES2Parameters$HmacSHA512AndAES_256");
|
|
|
|
ps("AlgorithmParameters", "PBEWithHmacSHA512/224AndAES_256",
|
|
"com.sun.crypto.provider.PBES2Parameters$HmacSHA512_224AndAES_256");
|
|
|
|
ps("AlgorithmParameters", "PBEWithHmacSHA512/256AndAES_256",
|
|
"com.sun.crypto.provider.PBES2Parameters$HmacSHA512_256AndAES_256");
|
|
|
|
ps("AlgorithmParameters", "Blowfish",
|
|
"com.sun.crypto.provider.BlowfishParameters");
|
|
|
|
psA("AlgorithmParameters", "AES",
|
|
"com.sun.crypto.provider.AESParameters", null);
|
|
|
|
ps("AlgorithmParameters", "GCM",
|
|
"sun.security.util.GCMParameters");
|
|
|
|
ps("AlgorithmParameters", "RC2",
|
|
"com.sun.crypto.provider.RC2Parameters");
|
|
|
|
psA("AlgorithmParameters", "OAEP",
|
|
"com.sun.crypto.provider.OAEPParameters", null);
|
|
|
|
psA("AlgorithmParameters", "ChaCha20-Poly1305",
|
|
"com.sun.crypto.provider.ChaCha20Poly1305Parameters", null);
|
|
|
|
/*
|
|
* Key factories
|
|
*/
|
|
psA("KeyFactory", "DiffieHellman",
|
|
"com.sun.crypto.provider.DHKeyFactory",
|
|
null);
|
|
|
|
/*
|
|
* Secret key factories
|
|
*/
|
|
ps("SecretKeyFactory", "DES",
|
|
"com.sun.crypto.provider.DESKeyFactory");
|
|
|
|
psA("SecretKeyFactory", "DESede",
|
|
"com.sun.crypto.provider.DESedeKeyFactory", null);
|
|
|
|
psA("SecretKeyFactory", "PBEWithMD5AndDES",
|
|
"com.sun.crypto.provider.PBEKeyFactory$PBEWithMD5AndDES",
|
|
null);
|
|
|
|
/*
|
|
* Internal in-house crypto algorithm used for
|
|
* the JCEKS keystore type. Since this was developed
|
|
* internally, there isn't an OID corresponding to this
|
|
* algorithm.
|
|
*/
|
|
ps("SecretKeyFactory", "PBEWithMD5AndTripleDES",
|
|
"com.sun.crypto.provider.PBEKeyFactory$PBEWithMD5AndTripleDES");
|
|
|
|
psA("SecretKeyFactory", "PBEWithSHA1AndDESede",
|
|
"com.sun.crypto.provider.PBEKeyFactory$PBEWithSHA1AndDESede",
|
|
null);
|
|
|
|
psA("SecretKeyFactory", "PBEWithSHA1AndRC2_40",
|
|
"com.sun.crypto.provider.PBEKeyFactory$PBEWithSHA1AndRC2_40",
|
|
null);
|
|
|
|
psA("SecretKeyFactory", "PBEWithSHA1AndRC2_128",
|
|
"com.sun.crypto.provider.PBEKeyFactory$PBEWithSHA1AndRC2_128",
|
|
null);
|
|
|
|
psA("SecretKeyFactory", "PBEWithSHA1AndRC4_40",
|
|
"com.sun.crypto.provider.PBEKeyFactory$PBEWithSHA1AndRC4_40",
|
|
null);
|
|
|
|
psA("SecretKeyFactory", "PBEWithSHA1AndRC4_128",
|
|
"com.sun.crypto.provider.PBEKeyFactory$PBEWithSHA1AndRC4_128",
|
|
null);
|
|
|
|
ps("SecretKeyFactory", "PBEWithHmacSHA1AndAES_128",
|
|
"com.sun.crypto.provider.PBEKeyFactory$PBEWithHmacSHA1AndAES_128");
|
|
|
|
ps("SecretKeyFactory", "PBEWithHmacSHA224AndAES_128",
|
|
"com.sun.crypto.provider.PBEKeyFactory$PBEWithHmacSHA224AndAES_128");
|
|
|
|
ps("SecretKeyFactory", "PBEWithHmacSHA256AndAES_128",
|
|
"com.sun.crypto.provider.PBEKeyFactory$PBEWithHmacSHA256AndAES_128");
|
|
|
|
ps("SecretKeyFactory", "PBEWithHmacSHA384AndAES_128",
|
|
"com.sun.crypto.provider.PBEKeyFactory$PBEWithHmacSHA384AndAES_128");
|
|
|
|
ps("SecretKeyFactory", "PBEWithHmacSHA512AndAES_128",
|
|
"com.sun.crypto.provider.PBEKeyFactory$PBEWithHmacSHA512AndAES_128");
|
|
|
|
ps("SecretKeyFactory", "PBEWithHmacSHA512/224AndAES_128",
|
|
"com.sun.crypto.provider.PBEKeyFactory$PBEWithHmacSHA512_224AndAES_128");
|
|
|
|
ps("SecretKeyFactory", "PBEWithHmacSHA512/256AndAES_128",
|
|
"com.sun.crypto.provider.PBEKeyFactory$PBEWithHmacSHA512_256AndAES_128");
|
|
|
|
ps("SecretKeyFactory", "PBEWithHmacSHA1AndAES_256",
|
|
"com.sun.crypto.provider.PBEKeyFactory$PBEWithHmacSHA1AndAES_256");
|
|
|
|
ps("SecretKeyFactory", "PBEWithHmacSHA224AndAES_256",
|
|
"com.sun.crypto.provider.PBEKeyFactory$PBEWithHmacSHA224AndAES_256");
|
|
|
|
ps("SecretKeyFactory", "PBEWithHmacSHA256AndAES_256",
|
|
"com.sun.crypto.provider.PBEKeyFactory$PBEWithHmacSHA256AndAES_256");
|
|
|
|
ps("SecretKeyFactory", "PBEWithHmacSHA384AndAES_256",
|
|
"com.sun.crypto.provider.PBEKeyFactory$PBEWithHmacSHA384AndAES_256");
|
|
|
|
ps("SecretKeyFactory", "PBEWithHmacSHA512AndAES_256",
|
|
"com.sun.crypto.provider.PBEKeyFactory$PBEWithHmacSHA512AndAES_256");
|
|
|
|
ps("SecretKeyFactory", "PBEWithHmacSHA512/224AndAES_256",
|
|
"com.sun.crypto.provider.PBEKeyFactory$PBEWithHmacSHA512_224AndAES_256");
|
|
|
|
ps("SecretKeyFactory", "PBEWithHmacSHA512/256AndAES_256",
|
|
"com.sun.crypto.provider.PBEKeyFactory$PBEWithHmacSHA512_256AndAES_256");
|
|
|
|
// PBKDF2
|
|
psA("SecretKeyFactory", "PBKDF2WithHmacSHA1",
|
|
"com.sun.crypto.provider.PBKDF2Core$HmacSHA1",
|
|
null);
|
|
ps("SecretKeyFactory", "PBKDF2WithHmacSHA224",
|
|
"com.sun.crypto.provider.PBKDF2Core$HmacSHA224");
|
|
ps("SecretKeyFactory", "PBKDF2WithHmacSHA256",
|
|
"com.sun.crypto.provider.PBKDF2Core$HmacSHA256");
|
|
ps("SecretKeyFactory", "PBKDF2WithHmacSHA384",
|
|
"com.sun.crypto.provider.PBKDF2Core$HmacSHA384");
|
|
ps("SecretKeyFactory", "PBKDF2WithHmacSHA512",
|
|
"com.sun.crypto.provider.PBKDF2Core$HmacSHA512");
|
|
ps("SecretKeyFactory", "PBKDF2WithHmacSHA512/224",
|
|
"com.sun.crypto.provider.PBKDF2Core$HmacSHA512_224");
|
|
ps("SecretKeyFactory", "PBKDF2WithHmacSHA512/256",
|
|
"com.sun.crypto.provider.PBKDF2Core$HmacSHA512_256");
|
|
|
|
/*
|
|
* MAC
|
|
*/
|
|
attrs.clear();
|
|
attrs.put("SupportedKeyFormats", "RAW");
|
|
ps("Mac", "HmacMD5", "com.sun.crypto.provider.HmacMD5", null, attrs);
|
|
psA("Mac", "HmacSHA1", "com.sun.crypto.provider.HmacSHA1",
|
|
attrs);
|
|
psA("Mac", "HmacSHA224",
|
|
"com.sun.crypto.provider.HmacCore$HmacSHA224", attrs);
|
|
psA("Mac", "HmacSHA256",
|
|
"com.sun.crypto.provider.HmacCore$HmacSHA256", attrs);
|
|
psA("Mac", "HmacSHA384",
|
|
"com.sun.crypto.provider.HmacCore$HmacSHA384", attrs);
|
|
psA("Mac", "HmacSHA512",
|
|
"com.sun.crypto.provider.HmacCore$HmacSHA512", attrs);
|
|
psA("Mac", "HmacSHA512/224",
|
|
"com.sun.crypto.provider.HmacCore$HmacSHA512_224", attrs);
|
|
psA("Mac", "HmacSHA512/256",
|
|
"com.sun.crypto.provider.HmacCore$HmacSHA512_256", attrs);
|
|
psA("Mac", "HmacSHA3-224",
|
|
"com.sun.crypto.provider.HmacCore$HmacSHA3_224", attrs);
|
|
psA("Mac", "HmacSHA3-256",
|
|
"com.sun.crypto.provider.HmacCore$HmacSHA3_256", attrs);
|
|
psA("Mac", "HmacSHA3-384",
|
|
"com.sun.crypto.provider.HmacCore$HmacSHA3_384", attrs);
|
|
psA("Mac", "HmacSHA3-512",
|
|
"com.sun.crypto.provider.HmacCore$HmacSHA3_512", attrs);
|
|
|
|
ps("Mac", "HmacPBESHA1",
|
|
"com.sun.crypto.provider.HmacPKCS12PBECore$HmacPKCS12PBE_SHA1",
|
|
null, attrs);
|
|
ps("Mac", "HmacPBESHA224",
|
|
"com.sun.crypto.provider.HmacPKCS12PBECore$HmacPKCS12PBE_SHA224",
|
|
null, attrs);
|
|
ps("Mac", "HmacPBESHA256",
|
|
"com.sun.crypto.provider.HmacPKCS12PBECore$HmacPKCS12PBE_SHA256",
|
|
null, attrs);
|
|
ps("Mac", "HmacPBESHA384",
|
|
"com.sun.crypto.provider.HmacPKCS12PBECore$HmacPKCS12PBE_SHA384",
|
|
null, attrs);
|
|
ps("Mac", "HmacPBESHA512",
|
|
"com.sun.crypto.provider.HmacPKCS12PBECore$HmacPKCS12PBE_SHA512",
|
|
null, attrs);
|
|
ps("Mac", "HmacPBESHA512/224",
|
|
"com.sun.crypto.provider.HmacPKCS12PBECore$HmacPKCS12PBE_SHA512_224",
|
|
null, attrs);
|
|
ps("Mac", "HmacPBESHA512/256",
|
|
"com.sun.crypto.provider.HmacPKCS12PBECore$HmacPKCS12PBE_SHA512_256",
|
|
null, attrs);
|
|
|
|
|
|
// PBMAC1
|
|
ps("Mac", "PBEWithHmacSHA1",
|
|
"com.sun.crypto.provider.PBMAC1Core$HmacSHA1", null, attrs);
|
|
ps("Mac", "PBEWithHmacSHA224",
|
|
"com.sun.crypto.provider.PBMAC1Core$HmacSHA224", null, attrs);
|
|
ps("Mac", "PBEWithHmacSHA256",
|
|
"com.sun.crypto.provider.PBMAC1Core$HmacSHA256", null, attrs);
|
|
ps("Mac", "PBEWithHmacSHA384",
|
|
"com.sun.crypto.provider.PBMAC1Core$HmacSHA384", null, attrs);
|
|
ps("Mac", "PBEWithHmacSHA512",
|
|
"com.sun.crypto.provider.PBMAC1Core$HmacSHA512", null, attrs);
|
|
ps("Mac", "PBEWithHmacSHA512/224",
|
|
"com.sun.crypto.provider.PBMAC1Core$HmacSHA512_224", null, attrs);
|
|
ps("Mac", "PBEWithHmacSHA512/256",
|
|
"com.sun.crypto.provider.PBMAC1Core$HmacSHA512_256", null, attrs);
|
|
|
|
ps("Mac", "SslMacMD5",
|
|
"com.sun.crypto.provider.SslMacCore$SslMacMD5", null, attrs);
|
|
ps("Mac", "SslMacSHA1",
|
|
"com.sun.crypto.provider.SslMacCore$SslMacSHA1", null, attrs);
|
|
|
|
/*
|
|
* KeyStore
|
|
*/
|
|
ps("KeyStore", "JCEKS",
|
|
"com.sun.crypto.provider.JceKeyStore");
|
|
|
|
/*
|
|
* KEMs
|
|
*/
|
|
attrs.clear();
|
|
attrs.put("ImplementedIn", "Software");
|
|
attrs.put("SupportedKeyClasses", "java.security.interfaces.ECKey" +
|
|
"|java.security.interfaces.XECKey");
|
|
ps("KEM", "DHKEM", "com.sun.crypto.provider.DHKEM", null, attrs);
|
|
|
|
attrs.clear();
|
|
attrs.put("ImplementedIn", "Software");
|
|
ps("KEM", "ML-KEM", "com.sun.crypto.provider.ML_KEM_Impls$K", null, attrs);
|
|
psA("KEM", "ML-KEM-512", "com.sun.crypto.provider.ML_KEM_Impls$K2", attrs);
|
|
psA("KEM", "ML-KEM-768", "com.sun.crypto.provider.ML_KEM_Impls$K3", attrs);
|
|
psA("KEM", "ML-KEM-1024", "com.sun.crypto.provider.ML_KEM_Impls$K5",attrs);
|
|
|
|
ps("KeyPairGenerator", "ML-KEM", "com.sun.crypto.provider.ML_KEM_Impls$KPG", null, attrs);
|
|
psA("KeyPairGenerator", "ML-KEM-512", "com.sun.crypto.provider.ML_KEM_Impls$KPG2", attrs);
|
|
psA("KeyPairGenerator", "ML-KEM-768", "com.sun.crypto.provider.ML_KEM_Impls$KPG3", attrs);
|
|
psA("KeyPairGenerator", "ML-KEM-1024", "com.sun.crypto.provider.ML_KEM_Impls$KPG5", attrs);
|
|
|
|
ps("KeyFactory", "ML-KEM", "com.sun.crypto.provider.ML_KEM_Impls$KF", null, attrs);
|
|
psA("KeyFactory", "ML-KEM-512", "com.sun.crypto.provider.ML_KEM_Impls$KF2", attrs);
|
|
psA("KeyFactory", "ML-KEM-768", "com.sun.crypto.provider.ML_KEM_Impls$KF3", attrs);
|
|
psA("KeyFactory", "ML-KEM-1024", "com.sun.crypto.provider.ML_KEM_Impls$KF5", attrs);
|
|
|
|
/*
|
|
* SSL/TLS mechanisms
|
|
*
|
|
* These are strictly internal implementations and may
|
|
* be changed at any time. These names were chosen
|
|
* because PKCS11/SunPKCS11 does not yet have TLS1.2
|
|
* mechanisms, and it will cause calls to come here.
|
|
*/
|
|
ps("KeyGenerator", "SunTlsPrf",
|
|
"com.sun.crypto.provider.TlsPrfGenerator$V10");
|
|
ps("KeyGenerator", "SunTls12Prf",
|
|
"com.sun.crypto.provider.TlsPrfGenerator$V12");
|
|
|
|
ps("KeyGenerator", "SunTlsMasterSecret",
|
|
"com.sun.crypto.provider.TlsMasterSecretGenerator",
|
|
List.of("SunTls12MasterSecret", "SunTlsExtendedMasterSecret"),
|
|
null);
|
|
|
|
ps("KeyGenerator", "SunTlsKeyMaterial",
|
|
"com.sun.crypto.provider.TlsKeyMaterialGenerator",
|
|
List.of("SunTls12KeyMaterial"), null);
|
|
|
|
ps("KeyGenerator", "SunTlsRsaPremasterSecret",
|
|
"com.sun.crypto.provider.TlsRsaPremasterSecretGenerator",
|
|
List.of("SunTls12RsaPremasterSecret"), null);
|
|
}
|
|
|
|
// Return the instance of this class or create one if needed.
|
|
static SunJCE getInstance() {
|
|
if (instance == null) {
|
|
return new SunJCE();
|
|
}
|
|
return instance;
|
|
}
|
|
}
|