Skip to content

Commit e833394

Browse files
Merge pull request #311 from cconlon/v1.16release
Prep for 1.16 release
2 parents 8dd48f9 + bac10cc commit e833394

7 files changed

Lines changed: 105 additions & 9 deletions

File tree

ChangeLog.md

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,78 @@
1+
### wolfSSL JNI Release 1.16.0 (12/31/2025)
2+
3+
Release 1.16.0 has bug fixes and new features including:
4+
5+
**JSSE System/Security Property Support:**
6+
* Add `wolfjsse.autoSNI` Security property support to control auto setting SNI (PR 249)
7+
* Add partial support for `jdk.tls.client.SignatureSchemes` and `jdk.tls.server.SignatureSchemes` (PR 299)
8+
9+
**JSSE Changes:**
10+
* Automatically set SNI for HttpsURLConnection connections (PR 249)
11+
* Add support for DTLS 1.3 (`DTLSv1.3`) in `SSLContext` / `SSLEngine` (PR 254)
12+
* Fix SNI storing/restoring at wolfJSSE level on session resumption (PR 255)
13+
* Improve `SSLEngine` send/received performance 20-30% (PR 257)
14+
* Implement SNI matcher logic for server-side `WolfSSLSocket` use (PR 259)
15+
* Cache system and security properties on `WolfSSLEngineHelper` creation vs each handshake (PR 273)
16+
* Reduce synchronization scope in `WolfSSLAuthStore` for lower contention (PR 274)
17+
* Cache KeyStore entries in `X509ExtendedKeyManager` to reduce contention for heavy concurrent use (PR 272)
18+
* Fix potential use-after-free issues with `WolfSSLSocket` (PR 275)
19+
* Fix NullPointerException on double `close()` in `WolfSSLSocket` (PR 277)
20+
* Implement `toString()` inside `WolfSSLPrincipal` (PR 281)
21+
* Fix certificate chain order returned from `WolfSSLX509StoreCtx.getCerts()` to match JSSE expectations (PR 282, 289)
22+
* Protect native sessions from being freed while I/O operations are in progress (PR 278)
23+
* Add support for honoring client cipher suite preference ordering (PR 287)
24+
* Fix potential memory leak in `SSLEngine` during JNI callback cleanup (PR 289)
25+
* Implement `X509Certificate.getExtendedKeyUsage()` in `WolfSSLX509Certificate` (PR 289)
26+
* Fix cert chain validation to handle cross-signed certs and chain paths (PR 292, 294)
27+
* Add Java ServiceLoader support for wolfJSSE provider for Java Module System (JPMS) compatibility (PR 296)
28+
* Implement `X509Certificate` `getSubjectX500Principal()` and `getIssuerX500Principal()` (PR 298)
29+
* Fall back to `java.home` property use when `JAVA_HOME` env var not set (PR 302)
30+
* Add `hashCode()` implementation to `SSLSession` (PR 303)
31+
* Allow `SSLSessionContext` access before `SSLContext` init (PR 304)
32+
* Add Android non-standard `checkServerTrusted()` in `X509TrustManager` (PR 288)
33+
* Fix ALPN to support non-ASCII protocol names (PR 305)
34+
35+
**JNI Changes:**
36+
* Rename wolfCrypt JNI helper classes to avoid namespace conflicts with wolfcrypt-jni (PR 252)
37+
* Wrap Atomic Record VerifyDecrypt callback (PR 252)
38+
* Ensure peer ALPN protocol list is null terminated (PR 258)
39+
* Enhance error handling and return code checks in `WolfSSLSession.read()` (PR 260)
40+
* Improve ByteBuffer handling in `WolfSSLSession.read()` (PR 262)
41+
* Dynamically get algorithm and key ASN NID enum values from wolfSSL (PR 263)
42+
* Add pool of ByteBuffers to `WolfSSLSession`, improves performance and avoids unaligned memory access (PR 268)
43+
* Add `getSessionTicket()` and `setSessionTicket()` to `WolfSSLSession` (PR 270)
44+
* Correct call to `CallObjectMethod()` in `WolfSSLSession` ByteBuffer read (PR 286)
45+
* Wrap `wolfSSL_i2d_SSL_SESSION()` and `wolfSSL_d2i_SSL_SESSION()` allowing for session persistence (PR 290)
46+
* Add DTLS Connection ID (CID) support, wrapping native wolfSSL APIs (PR 297)
47+
48+
**Debugging Changes:**
49+
* Switch to use Java logging (`java.util.logging`) framework for debug logs (PR 261)
50+
* Switch logging callback for wolfSSL debug messages to use stderr (PR 269)
51+
* Switch debug log timestamp to use Java `Instant.ofEpochMilli()`, remove dependency on `java.sql.Timestamp` (PR 301)
52+
53+
**Example Changes:**
54+
* Add DTLS 1.3 example client and server applications (PR 264)
55+
56+
**Testing Changes:**
57+
* Add GitHub Actions PRB test with `ubuntu-24.04-arm` runner for testing `--enable-armasm` builds (PR 267)
58+
* Add GitHub Actions PRB test for AddressSanitizer (`-fsanitize=address`) builds (PR 276)
59+
* Add GitHub Actions PRB tests for coding style (line length, comment style) (PR 285)
60+
* Add GitHub Actions PRB test for Clang scan-build static analysis (PR 285)
61+
* Add GitHub Actions PRB test for Visual Studio builds on Windows (PR 295)
62+
* Add GitHub Actions PRB test to build against last 5 stable wolfSSL releases (PR 306)
63+
* Add GitHub Actions PRB test to run unit tests on Android emulator (PR 307)
64+
* Use local server threads in some `WolfSSLSession` tests to avoid network access (PR 300)
65+
66+
**Misc Changes:**
67+
* Clean up IDE warnings in Cursor and VSCode (PR 266)
68+
* Add `CLAUDE.md` for consumption by Claude Code (PR 265)
69+
* Add `-fPIC` to CFLAGS in `java.sh` for Aarch64 hosts (PR 267)
70+
* Modify `java.sh` to allow passing install directory (`./java.sh <install_dir>`) (PR 285)
71+
72+
The wolfSSL JNI Manual is available at:
73+
https://www.wolfssl.com/documentation/manuals/wolfssljni. For build
74+
instructions and more detailed comments, please check the manual.
75+
176
### wolfSSL JNI Release 1.15.0 (01/24/2025)
277

378
Release 1.15.0 has bug fixes and new features including:

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ an application can include this as a dependency in the application's
224224
<dependency>
225225
<groupId>com.wolfssl</groupId>
226226
<artifactId>wolfssl-jsse</artifactId>
227-
<version>1.15.0-SNAPSHOT</version>
227+
<version>1.16.0-SNAPSHOT</version>
228228
</dependency>
229229
</dependencies>
230230
...

build.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<!-- versioning/manifest properties -->
1515
<property name="implementation.vendor" value="wolfSSL Inc." />
1616
<property name="implementation.title" value="wolfSSL JNI/JSSE" />
17-
<property name="implementation.version" value="1.15" />
17+
<property name="implementation.version" value="1.16" />
1818

1919
<!-- set properties for this build -->
2020
<property name="src.dir" value="src/java/"/>

native/com_wolfssl_WolfSSLSession.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6358,7 +6358,7 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_WolfSSLSession_hasTicket
63586358
(void)jenv;
63596359
(void)jcl;
63606360
(void)sessionPtr;
6361-
return (jint)WolfSSL.SSL_FAILURE;
6361+
return (jint)WOLFSSL_FAILURE;
63626362
#endif
63636363
}
63646364

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<modelVersion>4.0.0</modelVersion>
55
<groupId>com.wolfssl</groupId>
66
<artifactId>wolfssl-jsse</artifactId>
7-
<version>1.15.0-SNAPSHOT</version>
7+
<version>1.16.0-SNAPSHOT</version>
88
<packaging>jar</packaging>
99
<name>wolfssl-jsse</name>
1010
<url>https://www.wolfssl.com</url>

src/java/com/wolfssl/provider/jsse/WolfSSLProvider.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,8 @@ public void errorCallback(int ok, int err, String hash) {
7676
* wolfSSL JSSE Provider class
7777
*/
7878
public WolfSSLProvider() {
79-
super("wolfJSSE", 1.15, "wolfSSL JSSE Provider");
80-
//super("wolfJSSE", "1.15", "wolfSSL JSSE Provider");
79+
super("wolfJSSE", 1.16, "wolfSSL JSSE Provider");
80+
/* super("wolfJSSE", "1.16", "wolfSSL JSSE Provider"); */
8181

8282
/* load native wolfSSLJNI library */
8383
WolfSSL.loadLibrary();

src/test/com/wolfssl/test/WolfSSLTestSuite.java

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,13 @@
2121

2222
package com.wolfssl.test;
2323

24+
import org.junit.BeforeClass;
2425
import org.junit.runner.RunWith;
2526
import org.junit.runners.Suite;
2627

28+
import com.wolfssl.WolfSSL;
29+
import com.wolfssl.WolfSSLException;
30+
2731
@RunWith(Suite.class)
2832
@Suite.SuiteClasses({
2933
WolfSSLTest.class,
@@ -38,8 +42,25 @@
3842

3943

4044
public class WolfSSLTestSuite {
41-
/* this class remains empty,
42-
* only used as a holder for the above
43-
* annotations */
45+
46+
/* Static WolfSSL reference to keep library initialized for the duration
47+
* of the entire test suite. Without this, a WolfSSL object created by
48+
* an individual test class could be garbage collected after that test
49+
* class finishes, triggering wolfSSL_Cleanup() in the finalizer and
50+
* freeing session cache locks (and other items) while subsequent test
51+
* classes are still running. This caused crashes on Windows when the
52+
* garbage collector ran between test classes.
53+
*
54+
* We intentionally do not call cleanup() in @AfterClass because on
55+
* Android all tests run in a single process and multiple test suites
56+
* may be active. Cleanup will happen via the finalizer when the
57+
* process exits. */
58+
private static WolfSSL sslLib = null;
59+
60+
@BeforeClass
61+
public static void initializeLibrary() throws WolfSSLException {
62+
WolfSSL.loadLibrary();
63+
sslLib = new WolfSSL();
64+
}
4465
}
4566

0 commit comments

Comments
 (0)