hsynchronous
v1.0.1
Published
Hybrid synchronous encryption protocol using NIST approved post-quantum algorithms.
Downloads
27
Maintainers
Readme
Post-quantum synchronous encryption protocol
Hybrid synchronous encryption protocol using NIST approved post-quantum algorithms.
import { encrypt, decrypt, generateKeys } from "./src";
const key = generateKeys();
const message = "The quick brown fox jumps over the lazy dog";
const encrypted = await encrypt(message, key);
const decrypted = await decrypt(encrypted, key);
console.log(decrypted)
// {
// message: "The quick brown fox jumps over the lazy dog",
// createdAt: 2025-06-30T15:14:33.663Z,
// decryptedAt: 2025-06-30T15:14:33.719Z,
// nonce: "3e4bc82b144728126bb0145d678f7a3153..."
// }
Official Rating: NIST Level 4 (Highest commercial/government grade with post-quantum resistance)
Component | Algorithm/Strength | Security Level | Notes ----------------------------|-------------------------------|---------------------------------------|----------------------------------------------------------------- Key Encapsulation (KEM) | ML-KEM-1024 (Kyber) | NIST Level 3 (PQC Standard) | Post-quantum secure, IND-CCA2 Digital Signature | Falcon-1024 | NIST Level 3 (PQC Standard) | Post-quantum secure, EUF-CMA Symmetric Encryption | AES-256-GCM | 256-bit (NIST-approved) | Quantum-resistant key size, provides confidentiality + integrity Key Derivation | HKDF-SHA256 | 256-bit (NIST SP 800-56C) | Proper key separation with context binding Random Number Generation | crypto.randomBytes() | Cryptographically secure (CSPRNG) | Uses OS entropy source
Resistance Against Attacks
Attack Type | Protection Mechanism | Additional Notes ------------------------|-------------------------------------------------------------------|---------------------------------------- Quantum computing | ML-KEM-1024 (IND-CCA2) + Falcon-1024 (EUF-CMA) | Full PQC resistance MITM attacks | Falcon-1024 signatures + protocol binding | Non-repudiation Key compromise | Ephemeral KEM keys (per message) + HKDF with unique salts | No long-term key reuse Replay attacks | 64-byte random salts + 12-byte IVs (2¹²⁸ uniqueness) | Statistically negligible collision risk CRIME/BREACH | No compression (removed in v2) + encryption before any encoding | Mitigates compression oracles Key derivation attacks | HKDF-SHA256 with protocol-specific info binding | Prevents cross-context reuse Timing attacks | timingSafeEqual + constant-time HMAC (padded inputs) | Resists timing leaks Memory scraping | Explicit secureZero for sensitive buffers | Prevents cold-boot attacks Error oracles | Unified error paths (generic "decryption failed" messages) | Hides cryptographic faults Side-channel leaks | Minimum processing time (MIN_PROCESSING_TIME) | Obscures operation timing Metadata leakage | Fixed block padding (1024-byte chunks) | Hides true message size
Benchmarking
clk: ~2.51 GHz
cpu: 13th Gen Intel(R) Core(TM) i5-13420H
runtime: node 22.13.1 (x64-win32)
benchmark avg (min … max) p75 / p99
------------------------------------------- ---------
GenKeys 47.33 ms/iter 53.51 ms
(35.52 ms … 64.85 ms) 58.01 ms
( 2.71 kb … 20.49 kb) 4.53 kb
Encrypt 13.08 ms/iter 14.28 ms
(9.73 ms … 25.82 ms) 24.94 ms
( 23.41 kb … 39.29 kb) 24.86 kb
Decrypt 622.42 µs/iter 878.20 µs
(259.30 µs … 2.62 ms) 1.87 ms
(472.00 b … 493.76 kb) 16.20 kbAPI
await generateKeys(KEM_ALGORITHM*, SIG_ALGORITHM*)
Asynchronously generates a pair of cryptographic keys for Key Encapsulation Mechanism (KEM) and digital signatures using post-quantum algorithms (default: ML-KEM-1024 and Falcon-1024).
param
string[KEM_ALGORITHM='ml-kem-1024'] - KEM algorithm identifier (e.g., 'ml-kem-1024', 'kyber-768').param
string[SIG_ALGORITHM='falcon-1024'] - Digital signature algorithm identifier (e.g., 'falcon-1024', 'dilithium-3').returns
Promise<{ kemKeyPair: CryptoKeyPair; sigKeyPair: CryptoKeyPair }>Object containing KEM and signature key pairs.throws
ErrorIf key generation fails (e.g., unsupported algorithm or cryptographic backend error).
await encrypt(message, keypair, options, nonce)
Encrypts a message using a hybrid post-quantum encryption scheme combining: Key Encapsulation Mechanism (KEM) for key exchange, AES-GCM for symmetric encryption, Digital signatures for authentication
param
stringmessage - Plaintext message to encryptparam
Objectkeypair - Contains KEM and signature key pairs (from generateKeys())param
Object[options] - Encryption options (merged with defaults)param
string[nonce] - Optional nonce for replay protection (auto-generated if omitted)returns
Promise<string>Encrypted payload (hex string with metadata)throws
ErrorIf inputs are invalid or cryptographic operations fail
await decrypt(payload, keypair, options)
Decrypts a payload encrypted by the encrypt function using hybrid post-quantum cryptography.
Performs signature verification, key decapsulation, and AES-GCM decryption.
param
stringpayload - Encrypted payload (hex string with metadata)param
Objectkeypair - Contains KEM and signature key pairs (from generateKeys())param
Object[options] - Decryption options (merged with defaults)returns
Promise<{message: string, createdAt: Date, decryptedAt: Date, nonce: string}>Decrypted data with metadatathrows {Error} If:
- Signature verification fails
- Nonce reuse detected
- Decryption fails (invalid tag, corrupted data, etc.)
await exportKeys(keypair)
Serializes cryptographic key pairs into a secure string format for storage/transmission. Format: "PROTOCOL:VERSION:METADATA_HEX:PAYLOAD_HEX"
param
keypair- Contains KEM and signature key pairs (from generateKeys() or importKeys())returns
stringSerialized keys in protocol-defined formatthrows
ErrorIf key export fails (e.g., invalid key material)
await importKeys(key)
Imports cryptographic keys from a serialized string format, verifying protocol compatibility and algorithm support before reconstructing key pairs.
param
stringkey - Serialized keys in format "PROTOCOL:VERSION:METADATA_HEX:PAYLOAD_HEX"returns
Promise<{kemKeyPair: KeyPair, sigKeyPair: KeyPair}>Reconstructed key pairsthrows
ErrorIf:- Protocol/version mismatch
- Unsupported algorithms detected
- Malformed key data
