Build post-quantum TLS readiness inventory
Recipe ID
io.moderne.cryptography.pqc.BuildPqcReadinessInventoryArtifactio.moderne.recipe:rewrite-cryptographyThe single discovery entry point for post-quantum TLS readiness. Answers the three questions that decide whether a connection can negotiate a hybrid ML-KEM key exchange: does the module run on a runtime that offers one (JDK 27, or BouncyCastle 1.81 and later), can it still negotiate TLS 1.3 at all, and does it pin its key-exchange groups to classical curves. Changes nothing; every finding lands in one of four data tables.
Composite recipeProprietary
Usage
This recipe has no required configuration options. You’ll need the Moderne CLI configured before running the command below.
mod run . --recipe io.moderne.cryptography.pqc.BuildPqcReadinessInventoryIf the recipe isn’t available locally, install it with:
mod config recipes jar install io.moderne.recipe:rewrite-cryptography:RELEASEDefinition
This recipe runs the following recipes in order.
- Post-quantum TLS readiness report
io.moderne.cryptography.pqc.PqcReadinessReport - Find TLS protocol configuration
io.moderne.cryptography.pqc.FindTlsProtocolConfiguration - Find TLS protocol configuration in properties and YAML
io.moderne.cryptography.pqc.FindTlsPropertyConfiguration - Find TLS key exchange (named groups) configuration
io.moderne.cryptography.pqc.FindTlsNamedGroupsConfiguration - Find hardcoded SSL/TLS protocol choices
io.moderne.cryptography.FindHardcodedProtocolChoice
Data tables
Structured output this recipe can produce.
- PQC readinessPer-module post-quantum TLS readiness derived from the resolved Maven and Gradle dependency models and the `JavaVersion` markers of the module's Java sources. Modules built by tools OpenRewrite does not parse (Bazel, Ant) and BouncyCastle shaded into fat jars are invisible here, so an absent row is not evidence of health.
io.moderne.cryptography.pqc.table.PqcReadinessTable - Cryptography inventoryEvery cryptographic finding this module detects, joined into one sparse table so that a consumer does not have to match the per-detector tables on source location. A row carries the columns of whichever detectors reported at its location and leaves the others empty; the `Finding type` column names those detectors. The per-detector tables (`Cipher inventory`, `PQC readiness`, `TLS configuration inventory`, `TLS named groups inventory`) are still emitted unchanged, and carry the same findings unjoined.
io.moderne.cryptography.table.CryptographyInventoryTable - TLS configuration inventoryTLS protocol version and cipher suite configuration detected in Java sources and in Spring Boot `.properties`/`.yaml` files, classified by whether TLS 1.3 — and therefore JEP 527 / BouncyCastle 1.81 hybrid key exchange — remains reachable. Non-JSSE TLS stacks (Netty, OkHttp, Tomcat and Jetty server configuration, `-D` flags in build files and launch scripts) are out of scope, so an absent row is not evidence that a module has no legacy TLS floor.
io.moderne.cryptography.pqc.table.TlsConfigurationInventoryTable - TLS named groups inventoryTLS key-exchange group configuration detected in Java sources, configuration files and checked-in JVM-options values, classified by whether an ML-KEM hybrid group is offered. `-D` flags in shell scripts, Dockerfiles and orchestration manifests outside the scanned repository are invisible, so an absent row is not evidence that no group pin exists.
io.moderne.cryptography.pqc.table.TlsNamedGroupsInventoryTable - Taint flowRecords taint flows from sources to sinks with their taint types.
org.openrewrite.analysis.java.taint.table.TaintFlowTable - Source files that had resultsSource files that were modified by the recipe run.
org.openrewrite.table.SourcesFileResults - Source files that had search resultsSearch results that were found during the recipe run.
org.openrewrite.table.SearchResults - Source files that errored on a recipeThe details of all errors produced by a recipe run.
org.openrewrite.table.SourcesFileErrors - Recipe performanceStatistics used in analyzing the performance of recipes.
org.openrewrite.table.RecipeRunStats