You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
|`--enable-mlkem --enable-dilithium --enable-experimental`| ML-KEM and ML-DSA post-quantum algorithms (wolfSSL post-v5.9.1-stable). The `build-wolfprovider.sh --enable-pqc` flag sets these automatically. |
85
87
86
88
**Optional CPPFLAGS:**
87
89
@@ -151,6 +153,58 @@ This makes replace default mode useful for testing scenarios where you want to e
151
153
152
154
---
153
155
156
+
## Post-Quantum Cryptography (ML-KEM and ML-DSA)
157
+
158
+
wolfProvider supports NIST's post-quantum algorithms via the wolfSSL backend:
ML-DSA uses pure mode with an empty context string (FIPS 204 sec 5.2, Algorithm 22) — interoperable with OpenSSL 3.5+'s native ML-DSA.
166
+
167
+
### Requirements
168
+
169
+
-**wolfSSL**: post-v5.9.1-stable (i.e. v5.9.2-stable or master). Older releases lack the `wc_MlDsaKey_*` and `wc_dilithium_sign_ctx_msg` API surface that wolfProvider's PQC code uses.
170
+
-**OpenSSL**: any 3.x. OpenSSL 3.5+ is required only for cross-provider interop against its native ML-KEM/ML-DSA implementations.
171
+
172
+
### Building with PQC
173
+
174
+
```bash
175
+
./scripts/build-wolfprovider.sh --enable-pqc
176
+
```
177
+
178
+
This adds `--enable-mlkem --enable-dilithium --enable-experimental` to the wolfSSL configure step. wolfProvider auto-detects the resulting `WOLFSSL_HAVE_MLKEM` / `HAVE_DILITHIUM` macros via `include/wolfprovider/settings.h` (gated on `__has_include` of the corresponding wolfSSL headers) and registers the six PQC algorithms.
The OpenSSL CLI can also enumerate available algorithms:
192
+
193
+
```bash
194
+
OPENSSL_CONF=provider.conf openssl list -kem-algorithms -provider libwolfprov
195
+
OPENSSL_CONF=provider.conf openssl list -signature-algorithms -provider libwolfprov
196
+
```
197
+
198
+
### Validation
199
+
200
+
A standalone three-way interop validator (`test/pqc_interop.test`) cross-checks every ML-KEM / ML-DSA combination against:
201
+
- OpenSSL 3.5+'s native default provider
202
+
- wolfSSL's `wc_*` APIs directly (no provider abstraction)
203
+
204
+
This proves wolfProvider's raw-key, ciphertext, and signature bytes are FIPS 203 / 204 standards-compliant. The CI workflow `.github/workflows/wolfssl-versions-pqc.yml` runs this validator on every PR, plus a backward-compatibility build against pre-PQC wolfSSL to verify the no-symbol path still builds cleanly.
0 commit comments