Skip to content

Implement JDK PQC availability detection (5.1 backport of #6244) - #6347

Open
jnbdz wants to merge 1 commit into
eclipse-vertx:5.1from
SiteNetSoft:backport-6244-jdk-pqc-detection
Open

Implement JDK PQC availability detection (5.1 backport of #6244)#6347
jnbdz wants to merge 1 commit into
eclipse-vertx:5.1from
SiteNetSoft:backport-6244-jdk-pqc-detection

Conversation

@jnbdz

@jnbdz jnbdz commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Backport of #6244 to 5.1.

5.1 received the JDK 21 implementation of JdkDependent.isPqcAvailable() with #6337, but JdkSSLEngineOptions.isPqcAvailable() on that branch still returns false unconditionally (// Todo: implement it when JDK add supports), so STRICT and CLIENT_NEGOTIATED refuse to start on the JDK engine even when the JDK supports a PQ-compliant named group. master (#6244) and 4.x (#6245) have the delegation; 5.1 does not.

This is the same two-file change as #6244: JdkSSLEngineOptions.isPqcAvailable() delegates to JdkDependent.isPqcAvailable(), and the base (pre-21) JdkDependent gets the false implementation. The JDK 21 detection and the HybridKeyExchangeTest changes are already on 5.1.

Verified with a Quarkus application using the packaged vertx-core 5.1.8-SNAPSHOT from this branch, on a JDK 25.0.5 EA build where X25519MLKEM768 is a default named group (openssl s_client -tls1_3 -groups ... as the client):

Runtime Policy PQ client Classical-only client
JDK 25.0.5 EA, JVM STRICT Negotiated TLS1.3 group: X25519MLKEM768 rejected (alert 10)
JDK 25.0.5 EA, JVM CLIENT_NEGOTIATED X25519MLKEM768 classical handshake
Mandrel 25.0.5 EA, native image STRICT X25519MLKEM768 rejected
JDK 21, JVM STRICT still fails to start with "neither JDK nor OpenSSL support it", as before

HybridKeyExchangeTest passes on JDK 21 and on the 25.0.5 EA (in-tree it runs against target/classes, where the base JdkDependent applies, so its JDK cases are skipped there; the table above is what exercises the multi-release path).

Backport of eclipse-vertx#6244. The 5.1 branch received the JDK 21 implementation of
JdkDependent.isPqcAvailable() with eclipse-vertx#6337, but JdkSSLEngineOptions
.isPqcAvailable() still returns false unconditionally, so the STRICT and
CLIENT_NEGOTIATED enforcement policies refuse to start on the JDK engine
even when the JDK supports a PQ-compliant named group.

Delegate to JdkDependent as master does, and add the base
implementation for JDKs before 21.
@vietj

vietj commented Sep 5, 2026

Copy link
Copy Markdown
Member

@anavarr ping

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants