Release 1.10.0 of wolfCrypt JNI and JCE has bug fixes and new features including:
New JCE Functionality:
- Add Cipher
RSA/ECB/OAEPWithSHA-256AndMGF1Paddingsupport (PR 188) - Add Cipher
RSA/ECB/OAEPWithSHA-1AndMGF1Paddingsupport (PR 191) - Add Cipher
WRAP_MODEandUNWRAP_MODEsupport for RSA-based key wrapping (PR 197) - Add PKIX CertPathBuilder implementation using native wolfSSL
X509_STORE(PR 190, 192, 198, 200) - Add
jdk.certpath.disabledAlgorithmsenforcement to CertPathBuilder and CertPathValidator (PR 200) - Register default FIPS error callback in
WolfCryptProviderfor FIPS error debugging (PR 207) - Enrich
WolfCryptExceptionwith FIPS module status forFIPS_NOT_ALLOWED_Eerrors (PR 207)
New JNI Functionality:
- Add hex string conversion via
WolfCrypt.toHexString()andWolfCrypt.hexStringToByteArray()(PR 187) - Add PEM to DER conversion support for keys and certificates (PR 186)
- Add
setFlags()andsetVerificationTime()methods toWolfSSLX509StoreCtx(PR 192)
New Property Support:
- Add
wolfssl.skipLibraryLoadsystem property for custom native library loading (PR 189) - Add
wolfjce.ioTimeoutsystem property for OCSP/CRL IO timeouts (PR 199)
JNI and JCE Changes:
- Fix FIPS error callback lifecycle, deregister native callback in
JNI_OnUnload(PR 203) - Fix Ed25519 signature verification passing message length instead of signature length (PR 205)
- Fix
jlongtoword32pointer cast inRsaFlattenPublicKeyandRsaExportCrtKey(PR 205) - Fix unsigned return value handling for
wc_RsaEncryptSize()across RSA functions (PR 205, 206) - Add HMAC offset/length bounds validation for byte array and ByteBuffer variants (PR 205)
- Improve NULL check handling in HMAC, Ed25519, Curve25519, and Pwdbased JNI wrappers (PR 205)
- Add missing
releaseByteArray()calls across ECC, RSA, ChaCha, and AES-GCM JNI functions (PR 205, 206) - Fix incorrect error code in
HmacFinalhash size check (PR 205) - Return defensive copy of IV array from
engineGetIV()(PR 205) - Fix
wc_ecc_import_private_raw()not passing validatedcurveIdto underlying import function (PR 206) - Zeroize encoded key byte array in
WolfCryptPBEKey.destroy()(PR 206) - Use constant-time comparison for GMAC tag verification (PR 206)
- Add missing AES-CTR and AES-OFB cleanup in
WolfCryptCipher.finalize()(PR 206) - Fix signed integer overflow in JNI offset/length bounds checks (PR 206)
- Add ByteBuffer bounds validation in SHA, MD5, and RNG native functions (PR 206)
- Fix missing return after throw in SHA and MD5 copy NULL checks (PR 206)
- Remove unused
wc_RsaPSS_VerifyInlineJNI wrapper that skipped padding check (PR 206) - Reduce
WC_RNGstruct allocations inWolfCryptCipherandWolfCryptDhParameterGenerator(PR 208) - Expand FIPS-compliant SecureRandom sanitization in
WolfCryptKeyGenerator(PR 209) - Zero intermediate output buffers before free across JNI wrappers (PR 210)
- Fix DH key export return value reset in success paths (PR 210)
- Free internal AES struct in GMAC after use (PR 210)
Example Changes:
- Add
CertPathBuilderandCertPathValidatorexample (PR 190) - Update Android example project CMakeLists.txt file exclusion list (PR 198, 206)
- Add JKS to BKS KeyStore conversion script for Android testing (PR 209)
- Migrate Android example project from
jcenter()tomavenCentral()and AndroidX (PR 209) - Add Gradle wrapper
distributionSha256Sumto Android example project (PR 210)
Testing Changes:
- Add Java 24 and 25 tests to GitHub Actions workflows (PR 193)
- Add GitHub Actions workflow for Linux 32-bit testing with Java 17 (PR 194)
- Add GitHub Actions workflow for UBSan undefined behavior testing (PR 195)
- Add
ant spotbugstarget and GitHub Actions SpotBugs static analysis workflow (PR 204) - Add GitHub Actions workflow for Android FIPS Ready testing (PR 209)
- Add GitHub Actions workflow for Java 9+ module (JPMS) testing (PR 196)
- Fix threaded MessageDigest tests hanging on FIPS error (PR 207)
- Improve JUnit test reliability for FIPS mode and CI environments (PR 209)
- Pin Bouncy Castle dependency version with SHA-256 hash verification (PR 209)
- Update Apache Ant CI dependency to 1.10.16 (PR 209)
Misc Changes:
- Add Java 9+ module support (JPMS) for
jlinkcompatibility (PR 196) - Fix Javadoc warnings about default constructors in
WolfCryptUtilandAsn(PR 201) - Fix code issues and warnings found by SpotBugs static analysis (PR 204)
- Update copyright dates to 2026 (PR 185)
The wolfCrypt JNI/JCE Manual is available at: https://www.wolfssl.com/documentation/manuals/wolfcryptjni/. For build instructions and more details, please check the manual.
Release 1.9.0 of wolfCrypt JNI and JCE has bug fixes and new features including:
New JCE Functionality:
- Add KeyGenerator implementation (AES, HmacSHA1, HmacSHA256, HmacSHA384, HmacSHA512) (PR 98)
- Add SHA-224 support to MessageDigest, Mac, Signature, KeyGenerator (PR 104)
- Add SHA-3 support to MessageDigest, Mac, Signature (PR 103)
- Add utility method to convert JKS/PKCS12 KeyStore to WKS type (PR 108)
- Add more AES mode support to Cipher class (PR 129, 163, 173):
- AES/CCM/NoPadding
- AES/CTR/NoPadding
- AES/ECB/NoPadding
- AES/ECB/PKCS5Padding
- AES/OFB/NoPadding
- AES/CTS/NoPadding
- Add AESCMAC (AES-CMAC), AESGMAC (AES-GMAC) to Mac class (PR 129)
- Add RSA-PSS support to Signature class (PR 131):
- RSASSA-PSS
- SHA224withRSA/PSS
- SHA256withRSA/PSS
- SHA384withRSA/PSS
- SHA512withRSA/PSS
- Add
Cipher.engineGetParameters()support (PR 140) - Add Cipher generic
AEStype support (PR 142) - Add AES and GCM support to AlgorithmParameters class (PR 144)
- Add HmacSHA3 support to KeyGenerator class (PR 150):
- HmacSHA3-224
- HmacSHA3-256
- HmacSHA3-384
- HmacSHA3-512
- Add
toString()to WolfCryptRandom, used when printing SecureRandom object (PR 154) - Add additional ECC algorithm OIDs to Signature and KeyPairGenerator classes (PR 158)
- Add EC KeyFactory support (PR 159)
- Add P1363 ECDSA signature formats to Signature class (PR 160)
- Add DH support to AlgorithmParameter, AlgorithmParameterGenerator, and KeyFactory classes (PR 161)
- Add AES and 3DES support to SecretKeyFactory and SecretKey classes (PR 164)
- Add additional AES and Hmac algorithm aliases to Cipher and Mac classes (PR 166)
- Add Java ServiceLoader support for wolfJCE provider for Java Module System (JPMS) compatibility (PR 167)
- Add RSA KeyFactory support (PR 169)
- Add MessageDigest OID alias values for SHA-224/256/384/512 (PR 170)
- Add PSS parameter encoding support in WolfCryptPSSParameters class (PR 175)
- Add
engineProbe()implementation to WolfSSLKeyStore (PR 178) - Add optional KEK caching to WolfSSLKeyStore for performance (PR 176)
- Add RSASSA-PSS key support to WolfSSLKeyStore (PR 180)
JNI and JCE Changes:
- Fix
Cipher.getOutputSize()for AES/GCM/NoPadding in DECRYPT mode (PR 107) - Dynamically get algorithm and key ASN enum values from wolfSSL (PR 111)
- Dynamically get hash OID sums from wolfSSL (PR 124)
- Fix max secret size in DH agreement (PR 123)
- Fix potential JNI-level ECC issues (PR 117)
- Fix build issues with older wolfSSL and FIPS build variants (PR 133)
- Fix AES-CTR IV consistency across state resets (PR 136)
- Fix for using buffered data in
Cipher.engineGetOutputSize()(PR 138) - Throw
AEADBadTagExceptionon AES-GCM decrypt failure (PR 139) - Fix
Cipher.engineInit()with null parameters (PR 141) - Throw correct
InvalidAlgorithmParameterExceptionfromCipher.init()on unsupported mode (PR 143) - Fix for PKCS#7 pad/unpad operations in Cipher (PR 146)
- Fix expected output size for Cipher decrypt related to pad size (PR 147)
- Fix AES-GCM Cipher edge case to allow for null input or output arrays (PR 145)
- Improve Cipher input validation, output buffer sizing, update behavior (PR 148)
- Fix MessageDigest parameter validation (PR 149)
- Fix
ArrayIndexOutOfBoundsExceptionin Cipher AES-GCM/CCM with zero-length plaintext (PR 151) - Throw exception if RSA
PrivateKeydoes not include CRT parameters (PR 153) - Throw
IllegalArgumentExceptionfromWolfCryptRandom.engineGenerateSeed()on bad input values (PR 152) - Set default key and parameter sizes in
KeyPairGeneratorif not explicitly set (PR 155) - Fix ECC
KeyPairGeneratorbits to bytes conversion (PR 157) - Check RSA key size used against min allowed in KeyPairGenerator (PR 162)
- Fix SecretKey decryption to use stored PBKDF2 iteration count in WKS (PR 168)
- Remove synchronization on some WolfSSLKeyStore methods (PR 165)
- Validate EC key sizes in
KeyPairGenerator.initialize()(PR 174) - Improvements to PKIXCertPathValidator with OCSP revocation checking, disabled algorithm validation, and more (PR 177, 178)
Debugging Changes:
- Switch to use Java logging (
java.util.logging) framework for debug logs (PR 110) - Refresh debug flags when WolfCryptProvider is loaded (PR 135)
- Switch debug log timestamp to use Java
Instant.ofEpochMilli(), remove dependency onjava.sql.Timestamp(PR 137)
Example Changes:
- Add RSA key generation to wolfJCE benchmark app (PR 95)
- Add ECC and ECDH to wolfJCE benchmark app (PR 99, 116)
- Add HMAC benchmark to wolfJCE benchmark app (PR 100)
- Add DH benchmarks to wolfJCE benchmark app (PR 102)
- Add PBKDF2 benchmark to wolfJCE benchmark app (PR 105)
- Add MessageDigest benchmark to wolfJCE benchmark app (PR 106)
- Add Signature benchmark to wolfJCE benchmark app (PR 109)
- Add SHA-3 ciphers to HMAC benchmark in wolfJCE benchmark app (PR 113)
- Add KeyGenerator benchmark to wolfJCE benchmark app (PR 115)
- Add SecureRandom benchmark to wolfJCE benchmark app (PR 120)
- Add KeyStore benchmark example app for WKS/JKS/PKCS12 (PR 118)
- Add individual algorithm category options to wolfJCE benchmark app (PR 121)
Testing Changes:
- Add GitHub Actions PRB test for AddressSanitizer (
-fsanitize=address) builds (PR 119) - Add GitHub Actions PRB tests for coding style (line length, comment style) (PR 126, 127)
- Add GitHub Actions PRB test for Clang scan-build static analysis (PR 128)
- Add GitHub Actions PRB test for Visual Studio builds on Windows (PR 130)
- Add GitHub Actions PRB test to build against last 5 stable wolfSSL releases (PR 181)
- Add GitHub Actions PRB test to run unit tests on Android emulator (PR 183)
- Output time taken in ms per JUnit test when ant test is run (PR 171)
- JUnit test performance improvements (PR 172)
Misc Changes:
- Clean up IDE warnings in Cursor and VSCode (PR 101)
- Add
CLAUDE.mdfor consumption by Claude Code (PR 122)
The wolfCrypt JNI/JCE Manual is available at: https://www.wolfssl.com/documentation/manuals/wolfcryptjni/. For build instructions and more details, please check the manual.
Release 1.8.0 of wolfCrypt JNI and JCE has bug fixes and new features including:
New JCE Functionality:
- Add Java security property support for mapping JKS/PKCS12 to WKS type (PR 83)
JNI and JCE Changes:
- Run FIPS CASTs once up front to prevent threaded app errors (PR 84, 91)
Example Changes:
- Define
WOLFSSL_CUSTOM_CONFIGin Android Studio project builds (PR 85) - Add basic JCE cryptography benchmark app (PR 88, 89, 93, 94)
Testing Changes:
- Add GitHub Action testing Maven (pom.xml) build on macOS and Linux (PR 82)
The wolfCrypt JNI/JCE Manual is available at: https://www.wolfssl.com/documentation/manuals/wolfcryptjni/. For build instructions and more details, please check the manual.
Release 1.7.0 of wolfCrypt JNI and JCE has bug fixes and new features including:
New JCE Functionality:
- New WolfSSLKeyStore (WKS) KeyStore implementation for FIPS 140-2/3 compliance (PR 67)
JNI and JCE Changes:
- Remove call to BigInteger.longValueExact(), not available on some Java versions (PR 76)
- Detect
RSA_MIN_SIZEin tests, addRsa.RSA_MIN_SIZEhelper (PR 77) - Fix pointer use in native
X509CheckPrivateKey()(PR 80)
Example Changes:
- Set keytool path correctly in
system-cacerts-to-wks.sh(PR 78) - Add example Android Studio project (IDE/Android) (PR 79)
Testing Changes:
- Run Facebook Infer on pull requests with GitHub Actions (PR 74)
- Add Android Gradle build with GitHub Actions to run on all pull requests (PR 79)
The wolfCrypt JNI/JCE Manual is available at: https://www.wolfssl.com/documentation/manuals/wolfcryptjni/. For build instructions and more details, please check the manual.
Release 1.6.0 of wolfCrypt JNI and JCE has bug fixes and new features including:
New JCE Functionality:
- Add RSA support to
KeyPairGeneratorclass (PR 49) - Add
AES/CBC/PKCS5Paddingsupport toCipherclass (PR 51) - Add
RSAsupport toCipherclass (PR 51) - Add
PKIXimplementation ofCertPathValidatorclass (PR 60, 66) - Add
SHA1alias forMessageDigestSHA-1for interop compatibility (PR 61) - Add
AES/GCM/NoPaddingsupport toCipherclass (PR 62) - Add
SecretKeyFactoryimplementation supportingPBKDF2(PR 70) - Add
DEFAULTsupport toSecureRandomclass (PR 72)
New JNI Wrapped APIs and Functionality:
- Add
AES-GCMsupport tocom.wolfssl.wolfcrypt.AesGcmclass (PR 62)
JNI and JCE Changes:
- Add synchronization to
com.wolfssl.wolfcrypt.Rngclass (PR 44) - Correct preprocessor guards for 3DES with wolfCrypt FIPS (PR 47)
- Correct order of operations in
wc_CreatePKCS8Key()JNI wrapper API (PR 50) - Add synchronization around native structure pointer use (PR 53)
- Remove inclusion of CyaSSL header includes, switch to wolfSSL (PR 56)
- Call
PRIVATE_KEY_LOCK/UNLOCK()for wolfCrypt FIPS 140-3 compatibility (PR 57) - Improve native HMAC feature detection (PR 58)
- Prepend zero byte to DH shared secret if less than prime length (PR 69)
- Add synchronization to protected methods in
WolfCryptSignature(PR 68) - Add synchronization to public methods of
WolfCryptKeyPairGenerator(PR 73) - Only allocate one
Rngobject perWolfCryptSignature, not per sign operation (PR 73) - Reduce extra
WolfCryptRngobject creation inSignatureandKeyPairGenerator(PR 73)
New Platform Support:
- Add Windows support with Visual Studio, see IDE/WIN/README.md (PR 46)
Build System Changes:
- Support custom wolfSSL library prefix and name in
makefile.linux(PR 45) - Standardize JNI library name on OSX to .dylib (PR 54)
- Update Maven build support (PR 55)
Example Changes:
- Print provider of
SecureRandomfromProviderTest.java(PR 43) - Add Windows batch script to run
ProviderTestexample (PR 52)
Testing Changes:
- Add extended threading test for
WolfCryptRandomclass (PR 44) - Add Facebook Infer test script, make fixes (PR 48, 63)
- Add GitHub Actions tests for Oracle/Zulu/Coretto/Temurin/Microsoft JDKs on Linux and OS X (PR 65)
Documentation Changes:
- Remove build instructions from
README.mdfor FIPS historical cert #2425 (PR 56) - Fix Javadoc warnings for Java 21 and 22 (PR 71)
The wolfCrypt JNI/JCE Manual is available at: https://www.wolfssl.com/documentation/manuals/wolfcryptjni/. For build instructions and more details, please check the manual.
Release 1.5.0 of wolfCrypt JNI has bug fixes and new features including:
- Add build compatibility for Java 7 (PR 38)
- Add support for "SHA" algorithm string in wolfJCE (PR 39)
- Add rpm package support (PR 40)
- Add wolfJCE MessageDigest.clone() support (PR 41)
- Improve error checking of native Md5 API calls (PR 41)
- Add unit tests for com.wolfssl.wolfcrypt.Md5 (PR 41)
Release 1.4.0 of wolfCrypt JNI has bug fixes and new features including:
- Add example directory with one simple ProviderTest example (PR 32)
- Fix double free of ChaCha pointer (PR 34)
- Add test cases for ChaCha.java (PR 34)
- Skip WolfCryptMacTest for HMAC-MD5 when using wolfCrypt FIPS 140-3 (PR 35)
- Use new hash struct names (wc_Md5/wc_Sha/etc) in native code (PR 35)
- Fix potential build error with non-ASCII apostrophes in Fips.java (PR 36)
Release 1.3.0 of wolfCrypt JNI has bug fixes and new features including:
- Run FIPS tests on
ant testwhen linked against a wolfCrypt FIPS library (PR 24) - Wrap native AesGcmSetExtIV_fips() API (PR 24)
- Fix releaseByteArray() usage in Fips.RsaSSL_Sign() (PR 24)
- Fix AES-GCM FIPS test cases (PR 24)
- Keep existing JAVA_HOME in makefiles if already set (PR 25)
- Add JCE support for MessageDigestSpi.engineGetDigestLength() (PR 27)
- Update junit to 4.13.2 (PR 28)
- Update missing Javadocs, fixes warnings on newer Java versions (PR 29)
Release 1.2.0 of wolfCrypt JNI has bug fixes and new features including:
- Add FIPS 140-3 compatibility when using wolfCrypt FIPS or FIPS Ready
- Increase junit version from 4.12 to 4.13 in pom.xml
- Add local
./libdirectory tojava.library.pathin pom.xml - Fix builds with
WOLFCRYPT_JNI_DEBUG_ONdefined - Fix compatibility with wolfCrypt
NO_OLD_*defines - Fix compatibility with wolfSSL
./configure --enable-alland ECC tests
Release 1.1.0 of wolfCrypt JNI has bug fixes and new features including:
- New JNI-level wrappers for ChaCha, Curve25519, and Ed25519
- Maven pom.xml build file
- Runtime detection of hash type enum values for broader wolfSSL support
- Updated wolfSSL error codes to match native wolfSSL updates
- Native HMAC wrapper fixes for building with wolfCrypt FIPSv2
- Native wrapper to return
HAVE_FIPS_VERSIONvalue to Java - Remove Blake2b from HMAC types, to match native wolfSSL changes
- Better native wolfSSL feature detection
- Increase Junit version to 4.13
- Use nativeheaderdir on supported platforms instead of javah
- Use hamcrest-all-1.3.jar in build.xml
- Add call to
wc_ecc_set_rng()when needed
Release 1.0.0 of wolfCrypt JNI has bug fixes and new features including:
- Bug fixes to JCE classes: Cipher, KeyAgreement (DH), Signature
- JCE debug logging with wolfjce.debug system property
- Additional unit tests for JCE provider
- Conditional ant build for JNI and/or JCE
- New ant targets with choice of debug or release builds
Release 0.3 BETA of wolfCrypt JNI includes:
- Support for ECC and DH key generation
- Bug fixes regarding key import/export
- Better argument sanitization at JNI level
Release 0.2 BETA of wolfCrypt JNI includes:
- Support for Android
- Support for Oracle JDK/JVM
- Support for code signing wolfcrypt-jni.jar file
- Compatibility with non-FIPS wolfSSL and wolfCrypt builds
- Bug fixes regarding releasing native resources
- Test package changed to (com.wolfssl.provider.jce.test)
Release 0.1 BETA of wolfCrypt JNI includes:
- Initial JCE package
- Support for OpenJDK