Crate pqc_binary_format

Crate pqc_binary_format 

Source
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