This README summarizes all the post-quantum and hybrid cryptographic algorithms currently supported by the latest QUBIP's Firefox Nightly version.
Currently, x25519mlkem768 is natively supported in Firefox as
the only PQ/T Hybrid key exchange group in the TLS handshake.
The hybrid key exchange is handled internally by NSS, with its own application-level combiner implementation to delegate the underlying operations (i.e., traditional X25519 and post-quantum ML-KEM-768) to PKCS#11 tokens.
The IANA TLS Supported Groups identifier for this group is
0x11EC (4588),
and upstream Firefox already advertises this codepoint
during TLS handshakes.
In terms of PKCS#11 support,
ML-KEM-768 is defined in upstream Firefox (and NSS) as a
vendor-defined CKM mechanism in the NSS namespace:
CKM_NSS_ML_KEM:0xCE534381CKM_NSS_KEY_PAIR_GEN:0xCE534380CKP_NSS_ML_KEM_768:0xCE534352CKK_NSS_ML_KEM:0xCE534356
| Algorithm | OID | IANA TLS SignatureScheme ID | CKM_* |
CKM_*_KEY_PAIR_GEN |
CKK_* |
CKP_* |
PQ/T Hybrid | Notes |
|---|---|---|---|---|---|---|---|---|
| ML-DSA-44 | 2.16.840.1.101.3.4.3.17 |
0x0904 (2308) |
0xCE534546 |
0xCE534545 |
0xCE534544 |
0x00000001 |
❌ Pure-PQC | CKM_* and CKK_* are NISEC vendor-defined |
| ML-DSA-65 | 2.16.840.1.101.3.4.3.18 |
0x0905 (2309) |
0xCE534546 |
0xCE534545 |
0xCE534544 |
0x00000002 |
❌ Pure-PQC | CKM_* and CKK_* are NISEC vendor-defined |
| ML-DSA-87 | 2.16.840.1.101.3.4.3.19 |
0x0906 (2310) |
0xCE534546 |
0xCE534545 |
0xCE534544 |
0x00000003 |
❌ Pure-PQC | CKM_* and CKK_* are NISEC vendor-defined |
| MLDSA65-Ed25519-SHA512 | 1.3.6.1.5.5.7.6.48 |
0x090B (2315) |
0xCE53454C |
0xCE53454B |
0xCE53454A |
None | ✅ Composite draft-ietf-lamps-pq-composite-sigs@13 |
Composite, draft-13 |
| SLH-DSA-SHAKE-128S | 2.16.840.1.101.3.4.3.26 |
0x0917 (2327) (disabled) |
0xCE534549 |
0xCE534548 |
0xCE534547 |
0x00000002 |
❎ Exempt | CKM_* and CKK_* are NISEC vendor-defined |
| SLH-DSA-SHAKE-128F | 2.16.840.1.101.3.4.3.27 |
0x0918 (2328) (disabled) |
0xCE534549 |
0xCE534548 |
0xCE534547 |
0x00000004 |
❎ Exempt | CKM_* and CKK_* are NISEC vendor-defined |
| SLH-DSA-SHAKE-192S | 2.16.840.1.101.3.4.3.28 |
0x0919 (2329) (disabled) |
0xCE534549 |
0xCE534548 |
0xCE534547 |
0x00000006 |
❎ Exempt | CKM_* and CKK_* are NISEC vendor-defined |
| SLH-DSA-SHAKE-192F | 2.16.840.1.101.3.4.3.29 |
0x091A (2330) (disabled) |
0xCE534549 |
0xCE534548 |
0xCE534547 |
0x00000008 |
❎ Exempt | CKM_* and CKK_* are NISEC vendor-defined |
| SLH-DSA-SHAKE-256S | 2.16.840.1.101.3.4.3.30 |
0x091B (2331) (disabled) |
0xCE534549 |
0xCE534548 |
0xCE534547 |
0x0000000A |
❎ Exempt | CKM_* and CKK_* are NISEC vendor-defined |
| SLH-DSA-SHAKE-256F | 2.16.840.1.101.3.4.3.31 |
0x091C (2332) (disabled) |
0xCE534549 |
0xCE534548 |
0xCE534547 |
0x0000000C |
❎ Exempt | CKM_* and CKK_* are NISEC vendor-defined |
Currently all the PKCS#11 identifiers are vendor-defined in the NISEC namespace constructed as follows:
#define CKM_VENDOR_DEFINED 0X80000000
#define NISEC_VENDOR_NSS 0x4E534543
#define CKM_NISEC (CKM_VENDOR_DEFINED | NISEC_VENDOR_NSS)
#define CKP_NISEC (CKP_VENDOR_DEFINED | NISEC_VENDOR_NSS)
#define CKK_NISEC (CKK_VENDOR_DEFINED | NISEC_VENDOR_NSS)The CKM_* and CKK_* values for each algorithm are calculated by
applying a specific offset to the vendor-defined base.
Currently, CKP_* values comply with the
PKCS#11 v3.2
standard.
For reference, look at
security/nss/lib/util/pkcs11qubip.h.
Currently only pure ML-DSA-{44, 65, 87} and
composite MLDSA65-Ed25519-SHA512
signature schemes are enabled in the TLS
handshake.
SLH-DSA-SHAKE-{128s, 128f, 192s, 192f, 256s, 256f} signature schemes
are supported ONLY in the certificate chain validation component
(mozpkix).
In the TLS component, SLH-DSA is defined as a valid signature scheme but negotiation of its variants as supported TLS sigalgs is INTENTIONALLY omitted.