pq-oid
OID constants and utilities for NIST post-quantum algorithms (ML-KEM, ML-DSA, SLH-DSA).
Zero dependencies. no_std compatible.
Installation
[]
= "1.0"
Usage
use ;
use FromStr;
// Parse from string
let kem: MlKem = "ML-KEM-512".parse.unwrap;
assert_eq!;
assert_eq!;
// OID constants
use oid;
assert_eq!;
assert_eq!;
assert_eq!;
assert_eq!;
assert_eq!;
assert_eq!;
// ... and 12 SLH-DSA variants
// Name/OID conversion
let alg = from_oid.unwrap;
assert_eq!;
// DER encoding for ASN.1
use ;
let bytes = encode_oid.unwrap;
let oid_str = decode_oid.unwrap;
// Pre-computed DER bytes also available
assert_eq!;
// JOSE/COSE mappings (ML-DSA only)
let dsa: MlDsa = "ML-DSA-65".parse.unwrap;
assert_eq!;
assert_eq!;
let recovered = from_jose.unwrap;
let recovered = from_cose.unwrap;
// Algorithm metadata
let info = Kem512.info;
// AlgorithmInfo {
// name: "ML-KEM-512",
// oid: "2.16.840.1.101.3.4.4.1",
// algorithm_type: Kem,
// family: MlKem,
// security_level: Level1,
// public_key_size: 800,
// private_key_size: 1632,
// sizes: Kem { ciphertext_size: 768, shared_secret_size: 32 }
// }
// Unified algorithm type
let alg: Algorithm = Kem512.into;
assert_eq!;
assert_eq!;
// Iteration
assert_eq!;
assert_eq!;
assert_eq!;
Features
| Feature | Default | Description |
|---|---|---|
std |
Yes | Enables std::error::Error impl for Error type |
For no_std environments:
[]
= { = "1.0", = false }
Supported Algorithms
ML-KEM (FIPS 203) — Key Encapsulation
| Algorithm | OID | Public Key | Private Key | Ciphertext |
|---|---|---|---|---|
| ML-KEM-512 | 2.16.840.1.101.3.4.4.1 | 800 | 1632 | 768 |
| ML-KEM-768 | 2.16.840.1.101.3.4.4.2 | 1184 | 2400 | 1088 |
| ML-KEM-1024 | 2.16.840.1.101.3.4.4.3 | 1568 | 3168 | 1568 |
ML-DSA (FIPS 204) — Digital Signatures
| Algorithm | OID | Public Key | Private Key | Signature |
|---|---|---|---|---|
| ML-DSA-44 | 2.16.840.1.101.3.4.3.17 | 1312 | 2560 | 2420 |
| ML-DSA-65 | 2.16.840.1.101.3.4.3.18 | 1952 | 4032 | 3309 |
| ML-DSA-87 | 2.16.840.1.101.3.4.3.19 | 2592 | 4896 | 4627 |
SLH-DSA (FIPS 205) — Stateless Hash-Based Signatures
| Algorithm | OID | Public Key | Private Key | Signature |
|---|---|---|---|---|
| SLH-DSA-SHA2-128s | 2.16.840.1.101.3.4.3.20 | 32 | 64 | 7856 |
| SLH-DSA-SHA2-128f | 2.16.840.1.101.3.4.3.21 | 32 | 64 | 17088 |
| SLH-DSA-SHA2-192s | 2.16.840.1.101.3.4.3.22 | 48 | 96 | 16224 |
| SLH-DSA-SHA2-192f | 2.16.840.1.101.3.4.3.23 | 48 | 96 | 35664 |
| SLH-DSA-SHA2-256s | 2.16.840.1.101.3.4.3.24 | 64 | 128 | 29792 |
| SLH-DSA-SHA2-256f | 2.16.840.1.101.3.4.3.25 | 64 | 128 | 49856 |
| SLH-DSA-SHAKE-128s | 2.16.840.1.101.3.4.3.26 | 32 | 64 | 7856 |
| SLH-DSA-SHAKE-128f | 2.16.840.1.101.3.4.3.27 | 32 | 64 | 17088 |
| SLH-DSA-SHAKE-192s | 2.16.840.1.101.3.4.3.28 | 48 | 96 | 16224 |
| SLH-DSA-SHAKE-192f | 2.16.840.1.101.3.4.3.29 | 48 | 96 | 35664 |
| SLH-DSA-SHAKE-256s | 2.16.840.1.101.3.4.3.30 | 64 | 128 | 29792 |
| SLH-DSA-SHAKE-256f | 2.16.840.1.101.3.4.3.31 | 64 | 128 | 49856 |
Minimum Supported Rust Version
This crate requires Rust 1.78 or later. The MSRV is tested in CI and will only be bumped in minor or major version releases.
Contributing
Contributions are welcome! Please open an issue or submit a pull request on GitHub.
License
MIT