Expand description
§PQC Binary Format v1.0
A standardized binary format specification for post-quantum cryptography encrypted data interchange.
§Overview
This crate provides a universal, self-describing binary format for encrypted data that works across different post-quantum cryptographic algorithms. It solves the “Babel Tower problem” where different PQC implementations cannot interoperate due to incompatible data formats.
§Features
- Algorithm-agnostic: Works with 31+ cryptographic algorithms
- Self-describing metadata: Algorithm parameters, compression settings, and custom fields
- Integrity verification: SHA-256 checksum of entire structure
- Feature flags: Compression, streaming, authentication, experimental features
- Extensible: Custom parameters for algorithm-specific needs
- Cross-platform: Compatible across languages and platforms
§Binary Layout
+-------------------+
| Magic (4 bytes) | "PQC\x01"
+-------------------+
| Version (1 byte) | 0x01
+-------------------+
| Algorithm (2 bytes)| Algorithm identifier
+-------------------+
| Flags (1 byte) | Feature flags
+-------------------+
| Metadata Len (4) | Length of metadata section
+-------------------+
| Data Len (8) | Length of encrypted data
+-------------------+
| Metadata (var) | Algorithm-specific metadata
+-------------------+
| Data (var) | Encrypted payload
+-------------------+
| Checksum (32) | SHA-256 of entire structure
+-------------------+§Quick Example
use pqc_binary_format::{PqcBinaryFormat, Algorithm, PqcMetadata, EncParameters};
use std::collections::HashMap;
// Create metadata with encryption parameters
let metadata = PqcMetadata {
enc_params: EncParameters {
iv: vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
tag: vec![1; 16],
params: HashMap::new(),
},
..Default::default()
};
// Create encrypted data container
let encrypted_data = vec![1, 2, 3, 4, 5];
let format = PqcBinaryFormat::new(Algorithm::Hybrid, metadata, encrypted_data);
// Serialize to bytes
let bytes = format.to_bytes().unwrap();
// Deserialize from bytes (includes checksum verification)
let deserialized = PqcBinaryFormat::from_bytes(&bytes).unwrap();
assert_eq!(format, deserialized);§Supported Algorithms
- Classical: X25519 + Ed25519 + AES-256-GCM
- Hybrid: ML-KEM-1024 + X25519 + ML-DSA-87 + Ed25519
- Post-Quantum: ML-KEM-1024 + ML-DSA-87
- ML-KEM-1024: Pure ML-KEM with AES-256-GCM
- Multi-KEM: Multiple key encapsulation layers
- Quad-Layer: Four independent cryptographic layers
- And 22 more algorithm identifiers…
§Use Cases
- Cross-platform encryption: Encrypt in Rust, decrypt in Python/JavaScript/Go
- Algorithm migration: Seamlessly switch between algorithms
- Long-term archival: Self-describing format ensures future compatibility
- Compliance: Embedded metadata for audit trails
- Research: Standardized format for benchmarking PQC algorithms
Re-exports§
pub use algorithm::Algorithm;pub use error::CryptoError;pub use error::Result;pub use format::FormatFlags;pub use format::PqcBinaryFormat;pub use metadata::CompressionParameters;pub use metadata::EncParameters;pub use metadata::KemParameters;pub use metadata::PqcMetadata;pub use metadata::SigParameters;
Modules§
- algorithm
- Algorithm identifiers for supported post-quantum cryptographic algorithms.
- error
- Error types for PQC Binary Format operations.
- ffi
- C/C++ FFI bindings for PQC Binary Format
- format
- Core binary format implementation with serialization and validation.
- metadata
- Metadata structures for algorithm-specific parameters.
- python
- Python bindings for PQC Binary Format using PyO3
- wasm
- WebAssembly bindings for PQC Binary Format
Constants§
- PQC_
BINARY_ VERSION - Current version of the PQC Binary Format specification
- PQC_
MAGIC - Magic bytes identifying PQC Binary Format v1.0
- VERSION
- Version string for this crate