Skip to content

Supported JCE Algorithms and Classes

wolfJCE currently supports the following algorithms and classes:

MessageDigest Class
    MD5
    SHA-1
    SHA-224
    SHA-256
    SHA-384
    SHA-512
    SHA3-224
    SHA3-256
    SHA3-384
    SHA3-512

SecureRandom Class
    DEFAULT (maps to HashDRBG)
    HashDRBG (aliased also as: Hash_DRBG, DRBG)

Cipher Class
    AES/CBC/NoPadding
    AES/CBC/PKCS5Padding
    AES/CCM/NoPadding
    AES/CTR/NoPadding
    AES/CTS/NoPadding
    AES/ECB/NoPadding
    AES/ECB/PKCS5Padding (aliased also as: AES)
    AES/GCM/NoPadding
    AES/OFB/NoPadding
    DESede/CBC/NoPadding
    RSA
    RSA/ECB/PKCS1Padding
    RSA/ECB/OAEPWithSHA-1AndMGF1Padding
    RSA/ECB/OAEPWithSHA-256AndMGF1Padding

Mac Class
    AESCMAC (aliased also as: AES-CMAC)
    AESGMAC (aliased also as: AES-GMAC)
    HmacMD5
    HmacSHA1
    HmacSHA224
    HmacSHA256
    HmacSHA384
    HmacSHA512
    HmacSHA3-224
    HmacSHA3-256
    HmacSHA3-384
    HmacSHA3-512

Signature Class
    MD5withRSA
    SHA1withRSA
    SHA224withRSA
    SHA256withRSA
    SHA384withRSA
    SHA512withRSA
    SHA3-224withRSA
    SHA3-256withRSA
    SHA3-384withRSA
    SHA3-512withRSA
    RSASSA-PSS
    SHA224withRSA/PSS
    SHA256withRSA/PSS
    SHA384withRSA/PSS
    SHA512withRSA/PSS
    SHA1withECDSA
    SHA224withECDSA
    SHA256withECDSA
    SHA384withECDSA
    SHA512withECDSA
    SHA3-224withECDSA
    SHA3-256withECDSA
    SHA3-384withECDSA
    SHA3-512withECDSA
    SHA256withECDSAinP1363Format
    SHA384withECDSAinP1363Format
    SHA512withECDSAinP1363Format
    SHA3-256withECDSAinP1363Format
    SHA3-384withECDSAinP1363Format
    SHA3-512withECDSAinP1363Format
    ML-DSA (any ML-DSA-44/65/87 key)
    ML-DSA-44
    ML-DSA-65
    ML-DSA-87
    XMSS (verify-only)
    XMSSMT (verify-only)
    LMS (aliased also as: HSS/LMS, verify-only)
    SLH-DSA (any SLH-DSA parameter set key)
    SLH-DSA-SHA2-128s
    SLH-DSA-SHA2-128f
    SLH-DSA-SHA2-192s
    SLH-DSA-SHA2-192f
    SLH-DSA-SHA2-256s
    SLH-DSA-SHA2-256f
    SLH-DSA-SHAKE-128s
    SLH-DSA-SHAKE-128f
    SLH-DSA-SHAKE-192s
    SLH-DSA-SHAKE-192f
    SLH-DSA-SHAKE-256s
    SLH-DSA-SHAKE-256f
    HASH-SLH-DSA (pre-hash, any SLH-DSA parameter set key)
    SLH-DSA-SHA2-128s-WITH-SHA256
    SLH-DSA-SHA2-128f-WITH-SHA256
    SLH-DSA-SHA2-192s-WITH-SHA512
    SLH-DSA-SHA2-192f-WITH-SHA512
    SLH-DSA-SHA2-256s-WITH-SHA512
    SLH-DSA-SHA2-256f-WITH-SHA512
    SLH-DSA-SHAKE-128s-WITH-SHAKE128
    SLH-DSA-SHAKE-128f-WITH-SHAKE128
    SLH-DSA-SHAKE-192s-WITH-SHAKE256
    SLH-DSA-SHAKE-192f-WITH-SHAKE256
    SLH-DSA-SHAKE-256s-WITH-SHAKE256
    SLH-DSA-SHAKE-256f-WITH-SHAKE256

KeyAgreement Class
    DiffieHellman
    DH
    ECDH

KeyGenerator Class
    AES
    HmacSHA1
    HmacSHA224
    HmacSHA256
    HmacSHA384
    HmacSHA512
    HmacSHA3-224
    HmacSHA3-256
    HmacSHA3-384
    HmacSHA3-512

KeyPairGenerator Class
    RSA
    RSASSA-PSS
    EC
    DH (aliased also as: DiffieHellman)
    ML-DSA (defaults to ML-DSA-65, level overridable via init())
    ML-DSA-44
    ML-DSA-65
    ML-DSA-87
    SLH-DSA (defaults to SLH-DSA-SHA2-128f, set overridable via init())
    SLH-DSA-SHA2-128s
    SLH-DSA-SHA2-128f
    SLH-DSA-SHA2-192s
    SLH-DSA-SHA2-192f
    SLH-DSA-SHA2-256s
    SLH-DSA-SHA2-256f
    SLH-DSA-SHAKE-128s
    SLH-DSA-SHAKE-128f
    SLH-DSA-SHAKE-192s
    SLH-DSA-SHAKE-192f
    SLH-DSA-SHAKE-256s
    SLH-DSA-SHAKE-256f
    ML-KEM (defaults to ML-KEM-768, level overridable via init())
    ML-KEM-512
    ML-KEM-768
    ML-KEM-1024

KeyFactory Class
    RSA
    EC
    DH (aliased also as: DiffieHellman)
    ML-DSA
    ML-DSA-44
    ML-DSA-65
    ML-DSA-87
    SLH-DSA
    SLH-DSA-SHA2-128s
    SLH-DSA-SHA2-128f
    SLH-DSA-SHA2-192s
    SLH-DSA-SHA2-192f
    SLH-DSA-SHA2-256s
    SLH-DSA-SHA2-256f
    SLH-DSA-SHAKE-128s
    SLH-DSA-SHAKE-128f
    SLH-DSA-SHAKE-192s
    SLH-DSA-SHAKE-192f
    SLH-DSA-SHAKE-256s
    SLH-DSA-SHAKE-256f
    ML-KEM
    ML-KEM-512
    ML-KEM-768
    ML-KEM-1024
    XMSS (verify-only)
    XMSSMT (verify-only)
    LMS (aliased also as: HSS/LMS)

KEM Class (javax.crypto.KEM, requires JDK 21 or later)
    ML-KEM
    ML-KEM-512
    ML-KEM-768
    ML-KEM-1024

CertPathValidator Class
    PKIX (with PKIXRevocationChecker via getRevocationChecker())

CertPathBuilder Class
    PKIX

SecretKeyFactory Class
    PBKDF2WithHmacSHA1
    PBKDF2WithHmacSHA224
    PBKDF2WithHmacSHA256
    PBKDF2WithHmacSHA384
    PBKDF2WithHmacSHA512
    PBKDF2WithHmacSHA3-224
    PBKDF2WithHmacSHA3-256
    PBKDF2WithHmacSHA3-384
    PBKDF2WithHmacSHA3-512
    AES
    DESede

KeyStore Class
    WKS

AlgorithmParameters Class
    AES
    DH (aliased also as: DiffieHellman)
    GCM (aliased also as: AES-GCM)
    RSASSA-PSS

AlgorithmParameterGenerator Class
    DH (aliased also as: DiffieHellman)

In addition to the algorithm names above, many services are also registered under their standard OID aliases (for example, Cipher AES OIDs, MessageDigest SHA-2 OIDs, Mac HMAC OIDs, and the ML-DSA, SLH-DSA, ML-KEM, XMSS, and LMS object identifiers), allowing lookup by OID string. A complete list of aliases can be found in the wolfcrypt-jni README_JCE.md file.

The RSA Cipher implementations also support Cipher.WRAP_MODE and Cipher.UNWRAP_MODE for RSA-based key wrapping and unwrapping.

Native wolfSSL Feature Requirements

The ML-KEM, ML-DSA, SLH-DSA, XMSS/XMSS^MT, and LMS/HSS services require the matching algorithm support to be compiled into the native wolfSSL library. If native support is missing, wolfJCE will still compile and run normally, but the corresponding services will not be registered. See Chapter 2 for the native wolfSSL configure options required for each algorithm.

ML-KEM (FIPS 203) Notes

wolfJCE supports ML-KEM, the Module-Lattice-Based Key Encapsulation Mechanism from FIPS 203 (formerly Kyber). The KeyPairGenerator, KeyFactory, and key classes work on Java 8 and later. The KEM service (javax.crypto.KEM) requires JDK 21 or later - on earlier JDKs the KEM service is not registered, but key generation and key encoding are still available.

To select a parameter set, either use the parameter-set-specific names directly (ex: KeyPairGenerator.getInstance("ML-KEM-768", "wolfJCE")), or use the family name ML-KEM (defaults to ML-KEM-768) and initialize with a parameter spec. On JDK 11+ use java.security.spec.NamedParameterSpec.ML_KEM_768, and on Java 8 use com.wolfssl.provider.jce.WolfPQCParameterSpec.ML_KEM_768. As with the JDK reference implementation, ML-KEM does not accept an integer key size via initialize(int).

Generated keys report getAlgorithm() of ML-KEM (matching the JDK reference implementation) regardless of parameter set. Public keys use X.509 SubjectPublicKeyInfo encoding and private keys use PKCS#8, per RFC 9935. On input, wolfJCE accepts all three RFC 9935 private key CHOICE forms (seed, expandedKey, and both). On output, the form is controlled by the jdk.mlkem.pkcs8.encoding property (the same property the JDK reference implementation uses), defaulting to expandedKey, which is importable by the widest range of providers.

Example Applications

The examples/provider directory in the wolfcrypt-jni package contains example applications demonstrating several of the algorithm classes above, including MlKemExample.java (ML-KEM encapsulation/decapsulation and key encoding), MlDsaExample.java, SlhDsaExample.java, XmssExample.java, and CertPathBuilderExample.java.