PQC Binary Format v1.0
A standardized, self-describing binary format for post-quantum cryptography encrypted data interchange.
๐ The Problem
Post-quantum cryptography (PQC) implementations suffer from the "Babel Tower problem": different implementations cannot interoperate because there is no standardized format for encrypted data. Each library uses its own proprietary format, making cross-platform and cross-language encryption impossible.
๐ก The Solution
PQC Binary Format v1.0 provides a universal, algorithm-agnostic format that:
- โ Works across 28+ cryptographic algorithms
- โ Self-describing metadata enables seamless decryption
- โ Integrity verification with SHA-256 checksums
- โ Cross-platform compatible (Rust, Python, JavaScript, Go, etc.)
- โ Future-proof design allows algorithm migration
- โ Zero dependencies except serde and sha2
๐ Quick Start
Add to your Cargo.toml:
[]
= "1.0"
Basic Usage
use ;
use HashMap;
// Create metadata with encryption parameters
let metadata = PqcMetadata ;
// Create encrypted data container
let encrypted_data = vec!; // Your encrypted bytes
let format = new;
// Serialize to bytes (for transmission or storage)
let bytes = format.to_bytes.unwrap;
// Deserialize from bytes (includes automatic checksum verification)
let recovered = from_bytes.unwrap;
assert_eq!;
println!;
๐ฆ Binary Format Specification
+-------------------+
| Magic (4 bytes) | "PQC\x01" - Format identifier
+-------------------+
| Version (1 byte) | 0x01 - Format version
+-------------------+
| Algorithm (2 bytes)| Algorithm identifier (0x0050 - 0x0506)
+-------------------+
| Flags (1 byte) | Feature flags (compression, streaming, etc.)
+-------------------+
| Metadata Len (4) | Length of metadata section
+-------------------+
| Data Len (8) | Length of encrypted payload
+-------------------+
| Metadata (var) | Algorithm-specific parameters
+-------------------+
| Data (var) | Encrypted data
+-------------------+
| Checksum (32) | SHA-256 integrity checksum
+-------------------+
๐ Supported Algorithms
The format supports 28 cryptographic algorithm identifiers:
Classical Algorithms
- Classical (0x0050): X25519 + Ed25519 + AES-256-GCM
- Password Classical (0x0051): Password-based encryption
Hybrid Algorithms
- Hybrid (0x0100): ML-KEM-1024 + X25519 + ML-DSA-87 + Ed25519
Post-Quantum Algorithms
- Post-Quantum (0x0200): ML-KEM-1024 + ML-DSA-87
- ML-KEM-1024 (0x0202): Pure ML-KEM with AES-256-GCM
- Multi-KEM (0x0203): Dual-layer KEM
- Multi-KEM Triple (0x0204): Triple-layer KEM
- Quad-Layer (0x0205): Four independent layers
- PQ3-Stack (0x0207): Forward secrecy stack
Max Secure Series (0x0300-0x0306)
High-security configurations for enterprise use
FN-DSA Series (0x0400-0x0407)
Falcon-based signature algorithms
Experimental (0x0500-0x0506)
Research and next-generation algorithms
๐ฏ Features
Feature Flags
Control optional behavior with feature flags:
use ;
use HashMap;
let flags = new
.with_compression // Data was compressed before encryption
.with_streaming // Streaming encryption mode
.with_additional_auth; // Additional authentication layer
let metadata = PqcMetadata ;
let format = with_flags;
assert!;
assert!;
Metadata Structure
The format includes rich metadata for decryption:
use ;
use HashMap;
let metadata = PqcMetadata ;
Custom Parameters
Add your own metadata:
use PqcMetadata;
let mut metadata = new;
metadata.add_custom;
// Later...
if let Some = metadata.get_custom
๐ Integrity Verification
Every format includes a SHA-256 checksum calculated over all fields:
use PqcBinaryFormat;
let bytes = format.to_bytes.unwrap;
// Tamper with the data
// let mut corrupted = bytes.clone();
// corrupted[50] ^= 0xFF;
// Deserialization automatically verifies checksum
match from_bytes
๐ Examples
Example 1: Basic Encryption Format
use ;
use HashMap;
Example 2: Cross-Language Interoperability
Rust (Encryption)
let format = new;
let bytes = format.to_bytes.unwrap;
// Send bytes to Python
Python (Decryption)
=
Note: Python bindings coming soon!
Example 3: Algorithm Migration
// Old data encrypted with Classical algorithm
let old_format = from_bytes?;
assert_eq!;
// Re-encrypt with Post-Quantum algorithm
let plaintext = decrypt_with_classical?;
let new_metadata = create_pq_metadata?;
let new_format = new;
// Same format, different algorithm!
๐ Use Cases
1. Cross-Platform Encryption
Encrypt in Rust, decrypt in Python, JavaScript, or Go using the same format.
2. Long-Term Archival
Self-describing format ensures data can be decrypted decades later even as algorithms evolve.
3. Algorithm Agility
Switch between algorithms without changing application code.
4. Compliance & Audit
Embedded metadata provides audit trail for regulatory compliance (GDPR, HIPAA, etc.).
5. Research & Benchmarking
Standardized format enables fair comparison of PQC algorithm performance.
๐งช Testing
# Run tests
# Run tests with output
# Run specific test
๐ Benchmarks
# Run benchmarks
# View benchmark results
Performance characteristics:
- Serialization: ~50 MB/s for typical payloads
- Deserialization: ~45 MB/s (includes checksum verification)
- Overhead: ~100 bytes + metadata size
๐ง Development
Building from Source
Running Examples
๐ค Contributing
We welcome contributions! See CONTRIBUTING.md for guidelines.
Areas for Contribution
- Language Bindings: Python, JavaScript, Go, C/C++
- Documentation: Tutorials, guides, examples
- Testing: Additional test cases, fuzzing
- Performance: Optimization PRs welcome
- Standards: Help draft RFC for IETF submission
๐ License
Licensed under either of:
- MIT License (LICENSE-MIT or http://opensource.org/licenses/MIT)
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
at your option.
๐ Acknowledgments
This format was developed as part of the PQCrypta enterprise post-quantum cryptography platform. Special thanks to:
- NIST Post-Quantum Cryptography Project
- The Rust cryptography community
- Contributors to pqcrypto, ring, and other foundational crates
๐ References
- NIST Post-Quantum Cryptography
- ML-KEM (Kyber) Specification
- ML-DSA (Dilithium) Specification
- PQCrypta Documentation
๐ Related Projects
- pqcrypto - Rust PQC implementations
- Open Quantum Safe - PQC library collection
- CIRCL - Cloudflare's crypto library
๐ฌ Community & Support
- GitHub Issues: Report bugs
- Discussions: Ask questions
- Website: pqcrypta.com
- Documentation: docs.rs/pqc-binary-format
Made with โค๏ธ by the PQCrypta Community
Securing the future, one byte at a time.