PostShor

Quantum Readiness Report

tests/fixtures/vulnerable_app
2026-10-14T21:19:31+00:00
13 files scanned
F
Quantum Readiness Score 0/100
QRS v1.0
15critical
18high
5medium
1low
10info
Harvest-now-decrypt-later exposure. Critical findings protect data with key exchange or encryption that a future quantum computer can break. Adversaries can record it today.

Deadlines that apply

NowHarvest-now-decrypt-later: recorded traffic is already exposed
2026EU: national PQC roadmaps due; migrations start
2030NIST: RSA/ECC deprecated · EU: high-risk systems migrated
2035NIST: RSA/ECC disallowed · EU & NSA CNSA 2.0: migration complete

Migration plan

Phase 1: Stop the harvest 16 findingsNow (0–12 months)

Key exchange and encryption recorded today can be decrypted later. This exposure is already happening.

Phase 2: Replace signatures and identities 16 findingsBefore 2030 (NIST deprecation)

Signatures can only be forged after Q-day, but roots, firmware keys and PKI take years to rotate.

Phase 3: Clean up and build agility 7 findingsOngoing

Algorithms that are already broken, plus everything that makes the next migration cheaper.

Findings

SeverityFindingLocationRule
CRITICALTLS group list set without a post-quantum hybrid group
TLS group list set without a post-quantum hybrid group. ECDH is broken by Shor's algorithm on a cryptographically relevant quantum computer. Data protected by this key exchange can be recorded now and decrypted later (harvest-now-decrypt-later). NIST IR 8547 (draft) deprecates it after 2030 and disallows it after 2035.
How to fix
Migrate to ML-KEM-768 (FIPS 203), deployed as the hybrid X25519MLKEM768 during the transition. Prioritise this: the exposure starts the day data is recorded. OpenSSL 3.5+ supports ML-KEM, ML-DSA and SLH-DSA and offers X25519MLKEM768 in TLS by default; liboqs for other algorithms.
c/tls.c:5
SSL_CTX_set1_groups_list(ctx, "X25519:P-256");
C-TLS-GROUPS
CRITICALTLS 1.3 not enabled (post-quantum key exchange requires TLS 1.3)
TLS 1.3 not enabled (post-quantum key exchange requires TLS 1.3). SSL 3.0 / TLS 1.0 / TLS 1.1 is already insecure today, independent of quantum computing.
How to fix
Replace with TLS 1.3 (required for hybrid post-quantum key exchange).
config/nginx.conf:3
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
CFG-TLS-NO13
CRITICALnginx ssl_ecdh_curve excludes post-quantum hybrid groups
nginx ssl_ecdh_curve excludes post-quantum hybrid groups. ECDH is broken by Shor's algorithm on a cryptographically relevant quantum computer. Data protected by this key exchange can be recorded now and decrypted later (harvest-now-decrypt-later). NIST IR 8547 (draft) deprecates it after 2030 and disallows it after 2035.
How to fix
Migrate to ML-KEM-768 (FIPS 203), deployed as the hybrid X25519MLKEM768 during the transition. Prioritise this: the exposure starts the day data is recorded.
config/nginx.conf:4
ssl_ecdh_curve X25519:prime256v1;
CFG-NGINX-CURVES
CRITICALSSH KexAlgorithms set without a post-quantum hybrid
SSH KexAlgorithms set without a post-quantum hybrid. ECDH is broken by Shor's algorithm on a cryptographically relevant quantum computer. Data protected by this key exchange can be recorded now and decrypted later (harvest-now-decrypt-later). NIST IR 8547 (draft) deprecates it after 2030 and disallows it after 2035.
How to fix
Migrate to ML-KEM-768 (FIPS 203), deployed as the hybrid X25519MLKEM768 during the transition. Prioritise this: the exposure starts the day data is recorded.
config/sshd_config:4
KexAlgorithms curve25519-sha256,ecdh-sha2-nistp256
CFG-SSH-KEX
CRITICALRSA encryption (.NET)
RSA is broken by Shor's algorithm on a cryptographically relevant quantum computer. Anything encrypted this way can be recorded now and decrypted later (harvest-now-decrypt-later). NIST IR 8547 (draft) deprecates it after 2030 and disallows it after 2035.
How to fix
Migrate to ML-KEM-768 (FIPS 203), deployed as the hybrid X25519MLKEM768 during the transition for encryption/key transport; ML-DSA-65 (FIPS 204); SLH-DSA (FIPS 205) or LMS/XMSS for long-lived firmware/root keys for signatures. Prioritise this: the exposure starts the day data is recorded. .NET 10 adds MLKem, MLDsa and SlhDsa; Bouncy Castle .NET for earlier runtimes.
cs/Keys.cs:6
var ct = rsa.Encrypt(data, RSAEncryptionPadding.OaepSHA256);
CS-RSA-ENC
CRITICALECDH (.NET)
ECDH is broken by Shor's algorithm on a cryptographically relevant quantum computer. Data protected by this key exchange can be recorded now and decrypted later (harvest-now-decrypt-later). NIST IR 8547 (draft) deprecates it after 2030 and disallows it after 2035.
How to fix
Migrate to ML-KEM-768 (FIPS 203), deployed as the hybrid X25519MLKEM768 during the transition. Prioritise this: the exposure starts the day data is recorded. .NET 10 adds MLKem, MLDsa and SlhDsa; Bouncy Castle .NET for earlier runtimes.
cs/Keys.cs:7
using var ec = ECDiffieHellman.Create();
CS-ECDH
CRITICALRSA encryption
RSA is broken by Shor's algorithm on a cryptographically relevant quantum computer. Anything encrypted this way can be recorded now and decrypted later (harvest-now-decrypt-later). NIST IR 8547 (draft) deprecates it after 2030 and disallows it after 2035.
How to fix
Migrate to ML-KEM-768 (FIPS 203), deployed as the hybrid X25519MLKEM768 during the transition for encryption/key transport; ML-DSA-65 (FIPS 204); SLH-DSA (FIPS 205) or LMS/XMSS for long-lived firmware/root keys for signatures. Prioritise this: the exposure starts the day data is recorded. Go 1.24+ ships crypto/mlkem and enables X25519MLKEM768 in crypto/tls by default.
go/server.go:13
ct, _ := rsa.EncryptOAEP(nil, rand.Reader, &k.PublicKey, []byte("x"), nil)
GO-RSA-ENC
CRITICALTLS CurvePreferences pins classical groups only, disabling Go's default hybrid PQ key exchange
TLS CurvePreferences pins classical groups only, disabling Go's default hybrid PQ key exchange. ECDH is broken by Shor's algorithm on a cryptographically relevant quantum computer. Data protected by this key exchange can be recorded now and decrypted later (harvest-now-decrypt-later). NIST IR 8547 (draft) deprecates it after 2030 and disallows it after 2035.
How to fix
Migrate to ML-KEM-768 (FIPS 203), deployed as the hybrid X25519MLKEM768 during the transition. Prioritise this: the exposure starts the day data is recorded. Go 1.24+ ships crypto/mlkem and enables X25519MLKEM768 in crypto/tls by default.
go/server.go:15
cfg := &tls.Config{CurvePreferences: []tls.CurveID{tls.X25519, tls.CurveP256}}
GO-TLS-CURVES
CRITICALRSA encryption (JCA Cipher)
RSA is broken by Shor's algorithm on a cryptographically relevant quantum computer. Anything encrypted this way can be recorded now and decrypted later (harvest-now-decrypt-later). NIST IR 8547 (draft) deprecates it after 2030 and disallows it after 2035.
How to fix
Migrate to ML-KEM-768 (FIPS 203), deployed as the hybrid X25519MLKEM768 during the transition for encryption/key transport; ML-DSA-65 (FIPS 204); SLH-DSA (FIPS 205) or LMS/XMSS for long-lived firmware/root keys for signatures. Prioritise this: the exposure starts the day data is recorded. Java 24+ provides ML-KEM (JEP 496) and ML-DSA (JEP 497); Bouncy Castle supports them on older JDKs.
java/Crypto.java:7
Cipher rsa = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding");
JVM-RSA-CIPHER
CRITICALECDH key agreement (JCA)
ECDH is broken by Shor's algorithm on a cryptographically relevant quantum computer. Data protected by this key exchange can be recorded now and decrypted later (harvest-now-decrypt-later). NIST IR 8547 (draft) deprecates it after 2030 and disallows it after 2035.
How to fix
Migrate to ML-KEM-768 (FIPS 203), deployed as the hybrid X25519MLKEM768 during the transition. Prioritise this: the exposure starts the day data is recorded. Java 24+ provides ML-KEM (JEP 496) and ML-DSA (JEP 497); Bouncy Castle supports them on older JDKs.
java/Crypto.java:9
KeyAgreement ka = KeyAgreement.getInstance("ECDH");
JVM-ECDH
CRITICALECDH (node:crypto)
ECDH is broken by Shor's algorithm on a cryptographically relevant quantum computer. Data protected by this key exchange can be recorded now and decrypted later (harvest-now-decrypt-later). NIST IR 8547 (draft) deprecates it after 2030 and disallows it after 2035.
How to fix
Migrate to ML-KEM-768 (FIPS 203), deployed as the hybrid X25519MLKEM768 during the transition. Prioritise this: the exposure starts the day data is recorded. JS options: @noble/post-quantum, or Node.js builds linked against OpenSSL 3.5+.
js/auth.ts:4
const ecdh = createECDH("prime256v1");
JS-ECDH
CRITICALRSA encryption (node:crypto)
RSA is broken by Shor's algorithm on a cryptographically relevant quantum computer. Anything encrypted this way can be recorded now and decrypted later (harvest-now-decrypt-later). NIST IR 8547 (draft) deprecates it after 2030 and disallows it after 2035.
How to fix
Migrate to ML-KEM-768 (FIPS 203), deployed as the hybrid X25519MLKEM768 during the transition for encryption/key transport; ML-DSA-65 (FIPS 204); SLH-DSA (FIPS 205) or LMS/XMSS for long-lived firmware/root keys for signatures. Prioritise this: the exposure starts the day data is recorded. JS options: @noble/post-quantum, or Node.js builds linked against OpenSSL 3.5+.
js/auth.ts:5
const sealed = publicEncrypt(publicKey, Buffer.from("secret"));
JS-RSA-ENC
CRITICALECDH key agreement
ECDH is broken by Shor's algorithm on a cryptographically relevant quantum computer. Data protected by this key exchange can be recorded now and decrypted later (harvest-now-decrypt-later). NIST IR 8547 (draft) deprecates it after 2030 and disallows it after 2035.
How to fix
Migrate to ML-KEM-768 (FIPS 203), deployed as the hybrid X25519MLKEM768 during the transition. Prioritise this: the exposure starts the day data is recorded. Python options: liboqs-python (Open Quantum Safe, good for prototyping) or newer pyca/cryptography releases (check release notes for ML-KEM/ML-DSA).
py/crypto_utils.py:9
shared = ec.generate_private_key(ec.SECP256R1()).exchange(ec.ECDH(), peer_public_key)
PY-ECDH
CRITICALRSA-OAEP encryption
RSA is broken by Shor's algorithm on a cryptographically relevant quantum computer. Anything encrypted this way can be recorded now and decrypted later (harvest-now-decrypt-later). NIST IR 8547 (draft) deprecates it after 2030 and disallows it after 2035.
How to fix
Migrate to ML-KEM-768 (FIPS 203), deployed as the hybrid X25519MLKEM768 during the transition for encryption/key transport; ML-DSA-65 (FIPS 204); SLH-DSA (FIPS 205) or LMS/XMSS for long-lived firmware/root keys for signatures. Prioritise this: the exposure starts the day data is recorded. Python options: liboqs-python (Open Quantum Safe, good for prototyping) or newer pyca/cryptography releases (check release notes for ML-KEM/ML-DSA).
py/crypto_utils.py:14
return public_key.encrypt(data, padding.OAEP(mgf=padding.MGF1(hashes.SHA256()), algorithm=hashes.SHA256(), label=None))
PY-RSA-OAEP
CRITICALX25519 key agreement
X25519/X448 key agreement is broken by Shor's algorithm on a cryptographically relevant quantum computer. Data protected by this key exchange can be recorded now and decrypted later (harvest-now-decrypt-later). NIST IR 8547 (draft) deprecates it after 2030 and disallows it after 2035.
How to fix
Migrate to Hybrid X25519MLKEM768 (keeps X25519, adds ML-KEM-768). Prioritise this: the exposure starts the day data is recorded. Rust options: RustCrypto ml-kem / ml-dsa crates; rustls with aws-lc-rs supports X25519MLKEM768.
rust/main.rs:2
use x25519_dalek::{EphemeralSecret, PublicKey};
RS-X25519
HIGHRSA key
RSA is broken by Shor's algorithm on a cryptographically relevant quantum computer. NIST IR 8547 (draft) deprecates it after 2030 and disallows it after 2035.
How to fix
Replace with ML-KEM-768 (FIPS 203), deployed as the hybrid X25519MLKEM768 during the transition for encryption/key transport; ML-DSA-65 (FIPS 204); SLH-DSA (FIPS 205) or LMS/XMSS for long-lived firmware/root keys for signatures. OpenSSL 3.5+ supports ML-KEM, ML-DSA and SLH-DSA and offers X25519MLKEM768 in TLS by default; liboqs for other algorithms.
c/tls.c:7
RSA_generate_key_ex(r, 2048, NULL, NULL);
C-RSA-KEYGEN
HIGHEC key (OpenSSL 3 by-name API)
X25519/X448 key agreement is broken by Shor's algorithm on a cryptographically relevant quantum computer. NIST IR 8547 (draft) deprecates it after 2030 and disallows it after 2035.
How to fix
Replace with Hybrid X25519MLKEM768 (keeps X25519, adds ML-KEM-768). OpenSSL 3.5+ supports ML-KEM, ML-DSA and SLH-DSA and offers X25519MLKEM768 in TLS by default; liboqs for other algorithms.
c/tls.c:8
EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_from_name(NULL, "X25519", NULL);
C-OSSL3-NAMED-EC
HIGHLegacy SSL/TLS protocol version enabled
Legacy SSL/TLS protocol version enabled. SSL 3.0 / TLS 1.0 / TLS 1.1 is already insecure today, independent of quantum computing.
How to fix
Replace with TLS 1.3 (required for hybrid post-quantum key exchange).
config/nginx.conf:3
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
CFG-TLS-LEGACY
HIGHSSH host key uses RSA/ECDSA
RSA is broken by Shor's algorithm on a cryptographically relevant quantum computer. Signatures could be forged after Q-day; long-lived signing keys need to rotate well before then. NIST IR 8547 (draft) deprecates it after 2030 and disallows it after 2035.
How to fix
Replace with ML-KEM-768 (FIPS 203), deployed as the hybrid X25519MLKEM768 during the transition for encryption/key transport; ML-DSA-65 (FIPS 204); SLH-DSA (FIPS 205) or LMS/XMSS for long-lived firmware/root keys for signatures.
config/sshd_config:2
HostKey /etc/ssh/ssh_host_rsa_key
CFG-SSH-RSA-HOSTKEY
HIGHRSA (.NET)
RSA is broken by Shor's algorithm on a cryptographically relevant quantum computer. NIST IR 8547 (draft) deprecates it after 2030 and disallows it after 2035.
How to fix
Replace with ML-KEM-768 (FIPS 203), deployed as the hybrid X25519MLKEM768 during the transition for encryption/key transport; ML-DSA-65 (FIPS 204); SLH-DSA (FIPS 205) or LMS/XMSS for long-lived firmware/root keys for signatures. .NET 10 adds MLKem, MLDsa and SlhDsa; Bouncy Castle .NET for earlier runtimes.
cs/Keys.cs:5
using var rsa = RSA.Create(2048);
CS-RSA
HIGHRSA key generation
RSA is broken by Shor's algorithm on a cryptographically relevant quantum computer. NIST IR 8547 (draft) deprecates it after 2030 and disallows it after 2035.
How to fix
Replace with ML-KEM-768 (FIPS 203), deployed as the hybrid X25519MLKEM768 during the transition for encryption/key transport; ML-DSA-65 (FIPS 204); SLH-DSA (FIPS 205) or LMS/XMSS for long-lived firmware/root keys for signatures. Go 1.24+ ships crypto/mlkem and enables X25519MLKEM768 in crypto/tls by default.
go/server.go:12
k, _ := rsa.GenerateKey(rand.Reader, 2048)
GO-RSA-KEYGEN
HIGHECDSA
ECDSA is broken by Shor's algorithm on a cryptographically relevant quantum computer. Signatures could be forged after Q-day; long-lived signing keys need to rotate well before then. NIST IR 8547 (draft) deprecates it after 2030 and disallows it after 2035.
How to fix
Replace with ML-DSA-65 (FIPS 204); SLH-DSA (FIPS 205) or LMS/XMSS for long-lived firmware/root keys. Go 1.24+ ships crypto/mlkem and enables X25519MLKEM768 in crypto/tls by default.
go/server.go:14
e, _ := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
GO-ECDSA
HIGHTerraform tls_private_key with classical algorithm
RSA is broken by Shor's algorithm on a cryptographically relevant quantum computer. NIST IR 8547 (draft) deprecates it after 2030 and disallows it after 2035.
How to fix
Replace with ML-KEM-768 (FIPS 203), deployed as the hybrid X25519MLKEM768 during the transition for encryption/key transport; ML-DSA-65 (FIPS 204); SLH-DSA (FIPS 205) or LMS/XMSS for long-lived firmware/root keys for signatures.
infra/main.tf:2
algorithm = "RSA"
IAC-TLS-PRIVATE-KEY
HIGHCloud KMS / ACM elliptic-curve key
Elliptic-curve cryptography is broken by Shor's algorithm on a cryptographically relevant quantum computer. NIST IR 8547 (draft) deprecates it after 2030 and disallows it after 2035.
How to fix
Replace with ML-KEM-768 (FIPS 203), deployed as the hybrid X25519MLKEM768 during the transition for key agreement; ML-DSA-65 (FIPS 204); SLH-DSA (FIPS 205) or LMS/XMSS for long-lived firmware/root keys for signatures.
infra/main.tf:7
customer_master_key_spec = "ECC_NIST_P256"
IAC-KMS-ECC
HIGHRSA key pair generation (JCA)
RSA is broken by Shor's algorithm on a cryptographically relevant quantum computer. NIST IR 8547 (draft) deprecates it after 2030 and disallows it after 2035.
How to fix
Replace with ML-KEM-768 (FIPS 203), deployed as the hybrid X25519MLKEM768 during the transition for encryption/key transport; ML-DSA-65 (FIPS 204); SLH-DSA (FIPS 205) or LMS/XMSS for long-lived firmware/root keys for signatures. Java 24+ provides ML-KEM (JEP 496) and ML-DSA (JEP 497); Bouncy Castle supports them on older JDKs.
java/Crypto.java:6
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
JVM-RSA-KEYGEN
HIGHECDSA signature (JCA)
ECDSA is broken by Shor's algorithm on a cryptographically relevant quantum computer. Signatures could be forged after Q-day; long-lived signing keys need to rotate well before then. NIST IR 8547 (draft) deprecates it after 2030 and disallows it after 2035.
How to fix
Replace with ML-DSA-65 (FIPS 204); SLH-DSA (FIPS 205) or LMS/XMSS for long-lived firmware/root keys. Java 24+ provides ML-KEM (JEP 496) and ML-DSA (JEP 497); Bouncy Castle supports them on older JDKs.
java/Crypto.java:8
Signature sig = Signature.getInstance("SHA256withECDSA");
JVM-ECDSA-SIG
HIGHRSA key generation (node:crypto)
RSA is broken by Shor's algorithm on a cryptographically relevant quantum computer. NIST IR 8547 (draft) deprecates it after 2030 and disallows it after 2035.
How to fix
Replace with ML-KEM-768 (FIPS 203), deployed as the hybrid X25519MLKEM768 during the transition for encryption/key transport; ML-DSA-65 (FIPS 204); SLH-DSA (FIPS 205) or LMS/XMSS for long-lived firmware/root keys for signatures. JS options: @noble/post-quantum, or Node.js builds linked against OpenSSL 3.5+.
js/auth.ts:3
const { publicKey } = generateKeyPairSync("rsa", { modulusLength: 2048 });
JS-RSA-KEYGEN
HIGHECDSA (WebCrypto)
ECDSA is broken by Shor's algorithm on a cryptographically relevant quantum computer. Signatures could be forged after Q-day; long-lived signing keys need to rotate well before then. NIST IR 8547 (draft) deprecates it after 2030 and disallows it after 2035.
How to fix
Replace with ML-DSA-65 (FIPS 204); SLH-DSA (FIPS 205) or LMS/XMSS for long-lived firmware/root keys. JS options: @noble/post-quantum, or Node.js builds linked against OpenSSL 3.5+.
js/auth.ts:9
const key = await crypto.subtle.generateKey({ name: "ECDSA", namedCurve: "P-256" }, true, ["sign"]);
JS-WEBCRYPTO-ECDSA
HIGHRSA key generation (pyca/cryptography)
RSA is broken by Shor's algorithm on a cryptographically relevant quantum computer. NIST IR 8547 (draft) deprecates it after 2030 and disallows it after 2035.
How to fix
Replace with ML-KEM-768 (FIPS 203), deployed as the hybrid X25519MLKEM768 during the transition for encryption/key transport; ML-DSA-65 (FIPS 204); SLH-DSA (FIPS 205) or LMS/XMSS for long-lived firmware/root keys for signatures. Python options: liboqs-python (Open Quantum Safe, good for prototyping) or newer pyca/cryptography releases (check release notes for ML-KEM/ML-DSA).
py/crypto_utils.py:8
private_key = rsa.generate_private_key(public_exponent=65537, key_size=2048)
PY-RSA-KEYGEN
HIGHDES / 3DES cipher
DES / 3DES is already insecure today, independent of quantum computing.
How to fix
Replace with AES-256-GCM.
py/crypto_utils.py:19
cipher = DES3.new(key, DES3.MODE_CBC)
PY-DES
HIGHJWT/JOSE RSA signature algorithm
RSA is broken by Shor's algorithm on a cryptographically relevant quantum computer. Signatures could be forged after Q-day; long-lived signing keys need to rotate well before then. NIST IR 8547 (draft) deprecates it after 2030 and disallows it after 2035.
How to fix
Replace with ML-KEM-768 (FIPS 203), deployed as the hybrid X25519MLKEM768 during the transition for encryption/key transport; ML-DSA-65 (FIPS 204); SLH-DSA (FIPS 205) or LMS/XMSS for long-lived firmware/root keys for signatures. Python options: liboqs-python (Open Quantum Safe, good for prototyping) or newer pyca/cryptography releases (check release notes for ML-KEM/ML-DSA).
py/crypto_utils.py:25
JWT_ALG = "RS256"
JOSE-RSA-SIG
HIGHCryptographic dependency: pycrypto
PyCrypto has been unmaintained since 2013 and has known CVEs. Replace it with pycryptodome or pyca/cryptography.
How to fix
PyCrypto has been unmaintained since 2013 and has known CVEs. Replace it with pycryptodome or pyca/cryptography.
requirements.txt:1
pycrypto
DEP-PYPI-PYCRYPTO
HIGHRSA (RustCrypto rsa)
RSA is broken by Shor's algorithm on a cryptographically relevant quantum computer. NIST IR 8547 (draft) deprecates it after 2030 and disallows it after 2035.
How to fix
Replace with ML-KEM-768 (FIPS 203), deployed as the hybrid X25519MLKEM768 during the transition for encryption/key transport; ML-DSA-65 (FIPS 204); SLH-DSA (FIPS 205) or LMS/XMSS for long-lived firmware/root keys for signatures. Rust options: RustCrypto ml-kem / ml-dsa crates; rustls with aws-lc-rs supports X25519MLKEM768.
rust/main.rs:6
let key = RsaPrivateKey::new(&mut rng, 2048).unwrap();
RS-RSA
MEDIUMMD5 (.NET)
MD5 is already insecure today, independent of quantum computing.
How to fix
Replace with SHA-256 or SHA-3 (SHA-384+ for CNSA 2.0).
cs/Keys.cs:8
using var md5 = MD5.Create();
CS-MD5
MEDIUMGo 1.22 predates default post-quantum TLS
Go 1.24 added crypto/mlkem and turned on hybrid X25519MLKEM768 key exchange in crypto/tls by default. Builds targeting older Go versions negotiate classical key exchange only.
How to fix
Raise the go directive to 1.24 or later and build with a current toolchain.
go/go.mod:3
go 1.22
DEP-GO-TOOLCHAIN-PRE-PQ
MEDIUMMD5 hash (JCA)
MD5 is already insecure today, independent of quantum computing.
How to fix
Replace with SHA-256 or SHA-3 (SHA-384+ for CNSA 2.0).
java/Crypto.java:10
MessageDigest md = MessageDigest.getInstance("MD5");
JVM-MD5
MEDIUMSHA-1 hash
SHA-1 is already insecure today, independent of quantum computing.
How to fix
Replace with SHA-256 or SHA-3 (SHA-384+ for CNSA 2.0).
js/auth.ts:6
const etag = createHash("sha1").update("x").digest("hex");
JS-SHA1
MEDIUMMD5 hash
MD5 is already insecure today, independent of quantum computing.
How to fix
Replace with SHA-256 or SHA-3 (SHA-384+ for CNSA 2.0).
py/crypto_utils.py:20
checksum = hashlib.md5(data).hexdigest()
PY-MD5
LOWCryptographic dependency: node-forge
Provides classical public-key crypto (RSA/ECC). Review how it is used and plan the post-quantum path.
How to fix
Track this library's post-quantum roadmap; the source findings show where it is called.
package.json:1
node-forge
DEP-NPM-NODE-FORGE
INFOHybrid post-quantum key exchange
Hybrid PQ key exchange (X25519MLKEM768 etc.) is a post-quantum-safe choice.
How to fix
No action needed. Keep the implementation up to date and FIPS-validated where required.
c/tls.c:12
SSL_CTX_set1_groups_list(ctx, "X25519MLKEM768:X25519");
GEN-HYBRID-KEM
INFOCryptographic dependency: golang.org/x/crypto
Provides classical public-key crypto (RSA/ECC). Review how it is used and plan the post-quantum path.
How to fix
Track this library's post-quantum roadmap; the source findings show where it is called.
go/go.mod:6
golang.org/x/crypto
DEP-GO-GOLANG-ORG-X-CRYPTO
INFOCryptographic dependency: github.com/cloudflare/circl
Cloudflare CIRCL: includes ML-KEM, ML-DSA and hybrids alongside classical algorithms.
How to fix
Track this library's post-quantum roadmap; the source findings show where it is called.
go/go.mod:7
github.com/cloudflare/circl
DEP-GO-GITHUB-COM-CLOUDFLARE-CIRCL
INFOML-KEM / hybrid PQ key exchange
ML-KEM (FIPS 203) is a post-quantum-safe choice.
How to fix
No action needed. Keep the implementation up to date and FIPS-validated where required.
go/server.go:16
good := &tls.Config{CurvePreferences: []tls.CurveID{tls.X25519MLKEM768, tls.X25519}}
GO-MLKEM
INFOHybrid post-quantum key exchange
Hybrid PQ key exchange (X25519MLKEM768 etc.) is a post-quantum-safe choice.
How to fix
No action needed. Keep the implementation up to date and FIPS-validated where required.
go/server.go:16
good := &tls.Config{CurvePreferences: []tls.CurveID{tls.X25519MLKEM768, tls.X25519}}
GEN-HYBRID-KEM
INFOML-KEM reference
ML-KEM (FIPS 203) is a post-quantum-safe choice.
How to fix
No action needed. Keep the implementation up to date and FIPS-validated where required.
java/Crypto.java:11
KeyPairGenerator pq = KeyPairGenerator.getInstance("ML-KEM-768");
GEN-ML-KEM
INFOCryptographic dependency: @noble/post-quantum
Provides post-quantum algorithms.
How to fix
Track this library's post-quantum roadmap; the source findings show where it is called.
package.json:1
@noble/post-quantum
DEP-NPM-NOBLE-POST-QUANTUM
INFOCryptographic dependency: cryptography
Provides classical public-key crypto (RSA/ECC). Review how it is used and plan the post-quantum path.
How to fix
Track this library's post-quantum roadmap; the source findings show where it is called.
requirements.txt:2
cryptography
DEP-PYPI-CRYPTOGRAPHY
INFORust post-quantum crate
Post-quantum algorithm (unspecified) is a post-quantum-safe choice.
How to fix
No action needed. Keep the implementation up to date and FIPS-validated where required.
rust/main.rs:3
use ml_kem::MlKem768;
RS-PQC
INFOML-KEM reference
ML-KEM (FIPS 203) is a post-quantum-safe choice.
How to fix
No action needed. Keep the implementation up to date and FIPS-validated where required.
rust/main.rs:3
use ml_kem::MlKem768;
GEN-ML-KEM

Cryptographic inventory

AlgorithmOccurrencesFiles
RSA1711
ECDH99
ECDSA33
MD533
Post-quantum algorithm (unspecified)33
ML-KEM (FIPS 203)33
SSL 3.0 / TLS 1.0 / TLS 1.121
X25519/X448 key agreement22
Elliptic-curve cryptography22
Hybrid PQ key exchange (X25519MLKEM768 etc.)22
DES / 3DES11
PyCrypto (unmaintained library)11
SHA-111