npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@ayxdele/kinetic-keys

v2.2.3

Published

A comprehensive post-quantum cryptography library featuring Dilithium digital signatures and Kyber key encapsulation mechanisms. Includes versatile encoding schemes, key derivation utilities, and unique ID generation. Designed for quantum-resistant applic

Readme

@ayxdele/kinetic-keys v2.2.0

🚀 A comprehensive post-quantum cryptography library featuring NIST-standardized algorithms for quantum-resistant security.

npm version License: BSL-1.1 Node.js Coverage GitHub

☕ Support the Project

If you find this project helpful, consider supporting its development:

☕ Buy me a coffee

🛡️ Overview

Kinetic Keys SDK v2.2.0 is a comprehensive cryptographic library that combines a lightweight zero-knowledge framework with cutting-edge post-quantum cryptography capabilities. The SDK provides both traditional secure digital transaction features and quantum-resistant security through NIST-standardized algorithms.

Key Features:

  • 🆔 Secure ID Generation - Cryptographically secure unique identifiers
  • 🔑 Advanced Key Derivation - Poem-matrix-based hierarchical key systems
  • 📦 Encrypted Vouchers - Secure payload encapsulation
  • 🧬 Zero-Knowledge Framework - Privacy-preserving transactions
  • 🔐 Post-Quantum Cryptography - Kyber-1024 & Dilithium-5 (NIST Level 5)
  • High Performance - Optimized WebAssembly implementations

📋 Important Notes

🔒 Provisional Patent Applications: The unlock hash, voucher, gen, and receive mechanisms featured in this SDK have provisional patent applications filed with the USPTO. These innovative cryptographic techniques are protected under pending patent applications.

🌐 Universal JavaScript Design: This SDK is intentionally implemented in pure JavaScript to ensure maximum compatibility across all environments. No additional configurations, dependencies, or build tools are required - it works seamlessly in Node.js, browsers, and any JavaScript runtime without setup complexity.


📦 Installation

npm install @ayxdele/kinetic-keys

Quick Start

const KineticKeys = require('@ayxdele/kinetic-keys');

async function quickStart() {
    // Core features
    const uniqueId = await KineticKeys.generateUniqueID(12);
    const unlockHash = await KineticKeys.generateUnlockHash('mypassword');
    const poemMatrix = KineticKeys.generatePoemMatrix();

    // Post-quantum cryptography
    const { PQC } = KineticKeys;
    const availability = await PQC.isAvailable();
    
    console.log('Unique ID:', uniqueId);
    console.log('PQC Available:', availability);
}

quickStart().catch(console.error);

🔧 Core Features

🆔 Unique ID Generation

Generate cryptographically secure, unique identifiers with customizable length:

const KineticKeys = require('@ayxdele/kinetic-keys');

async function generateIds() {
    // Generate a unique ID of specified length
    const uniqueId = await KineticKeys.generateUniqueID(32);
    console.log(uniqueId); // @8GcB#5dPx7zF1A&K0qLm!Z9sU#XYT3%

    // Use in applications
    const sessionId = await KineticKeys.generateUniqueID(16);
    const voucherId = await KineticKeys.generateUniqueID(24);
    
    console.log('Session ID:', sessionId);
    console.log('Voucher ID:', voucherId);
}

generateIds().catch(console.error);

🔑 Unlock Hash System

Create secure, non-reversible hashes from passphrases for authentication:

const KineticKeys = require('@ayxdele/kinetic-keys');

async function testUnlockHashes() {
    // Single mode unlock hash
    const hash = await KineticKeys.generateUnlockHash('mySecurePassword123');
    console.log(hash); // cb7dd3e80e275d58735d0f7991796bb6.KUcS91vx5Dm4Hzc

    // Dual mode for two-factor authentication
    const dualHash = await KineticKeys.generateUnlockHash('password1', 'password2', 'dual');
    console.log(dualHash); // dual.58d072cf8f27fdaafb2f22eca81dc851.x8w9...

    // Verify unlock hashes
    const isValid = await KineticKeys.verifyUnlockHash(hash, 'mySecurePassword123');
    console.log(isValid); // true

    // Verify dual hash with either password
    const isValidDual1 = await KineticKeys.verifyUnlockHash(dualHash, 'password1');
    const isValidDual2 = await KineticKeys.verifyUnlockHash(dualHash, 'password2');
    
    console.log('Dual valid 1:', isValidDual1);
    console.log('Dual valid 2:', isValidDual2);
}

testUnlockHashes().catch(console.error);

🧬 Poem Matrix Key Derivation

Advanced key derivation using dynamic poem matrices for secure content encryption:

const KineticKeys = require('@ayxdele/kinetic-keys');

async function testPoemMatrix() {
    // Generate a dynamic matrix (default 16x10)
    const poemMatrix = KineticKeys.generatePoemMatrix();
    // Custom size: rows x character_length
    const customMatrix = KineticKeys.generatePoemMatrix(20, 12);

    const keyId = await KineticKeys.generateUniqueID(16);
    const secretText = "This is confidential information that needs protection";

    // Encrypt and generate blueprint
    const { blueprint, indices } = await KineticKeys.gen(secretText, poemMatrix, keyId);
    console.log('Generated Blueprint:', blueprint);
    console.log('Matrix Indices:', indices);

    // Decrypt using blueprint and indices
    const recoveredText = await KineticKeys.receive(blueprint, poemMatrix, indices, keyId);
    console.log('Recovered Text:', recoveredText);
    console.log('Match:', secretText === recoveredText); // true
}

testPoemMatrix().catch(console.error);

📦 Secure Vouchers

Create encrypted vouchers that can only be decrypted with the correct passphrase:

const KineticKeys = require('@ayxdele/kinetic-keys');

async function testVouchers() {
    // Create a voucher
    const SYSTEM_SECRET = "your-system-secret-key"; // Keep this secret!
    const passphrase = "user-passphrase";
    const unlockHash = await KineticKeys.generateUnlockHash(passphrase);

    // Note: The payload must be a string. Use JSON.stringify for objects
    const payload = JSON.stringify({
        id: await KineticKeys.generateUniqueID(32),
        payload: "Sensitive asset metadata or data",
        timestamp: Date.now(),
        metadata: { type: "confidential", level: "high" }
    });

    const voucher = KineticKeys.createVoucher(payload, unlockHash, SYSTEM_SECRET);
    console.log('Created Voucher:', voucher);

    // Decrypt voucher
    const decryptedData = await KineticKeys.decryptVoucher(voucher, passphrase, unlockHash, SYSTEM_SECRET);
    console.log('Decrypted Data:', JSON.parse(decryptedData));

    // Dual mode voucher
    const dualUnlockHash = await KineticKeys.generateUnlockHash('pass1', 'pass2', 'dual');
    const dualPayload = JSON.stringify({
        payload: "Dual-authentication protected data"
    });
    const dualVoucher = KineticKeys.createVoucher(dualPayload, dualUnlockHash, SYSTEM_SECRET);

    // Can be unlocked with either password
    const data1 = await KineticKeys.decryptVoucher(dualVoucher, 'pass1', dualUnlockHash, SYSTEM_SECRET);
    const data2 = await KineticKeys.decryptVoucher(dualVoucher, 'pass2', dualUnlockHash, SYSTEM_SECRET);
    console.log('Decrypted with pass1:', JSON.parse(data1));
    console.log('Decrypted with pass2:', JSON.parse(data2));
}

testVouchers().catch(console.error);

🔐 Post-Quantum Cryptography

Supported Algorithms

| Algorithm | Security Level | Type | Key Sizes | |-----------|---------------|------|-----------| | Kyber-1024 | NIST Level 5 | KEM | PK: 1,568B, SK: 3,168B | | Dilithium-5 | NIST Level 5 | DSA | PK: 2,592B, SK: 4,880B |

Environment Requirements

  • Node.js 14.x or higher
  • WebAssembly support (included)
  • Memory: ~2MB for WASM modules
  • Platform: Windows, macOS, Linux

Setup Verification

const { PQC } = require('@ayxdele/kinetic-keys');

async function setupCheck() {
    // Check algorithm availability
    const availability = await PQC.isAvailable();
    console.log('Kyber-1024 KEM:', availability.kyber ? '✅' : '❌');
    console.log('Dilithium-5 DSA:', availability.dilithium ? '✅' : '❌');
    
    // Get algorithm information
    const info = PQC.getInfo();
    console.log('SDK Version:', info.version);
    console.log('Algorithms:', info.algorithms);
}

setupCheck().catch(console.error);

🚀 Quick Start Guide

Complete Working Example

Here's a complete example that demonstrates proper usage of all features:

const KineticKeys = require('@ayxdele/kinetic-keys');

async function completeExample() {
    console.log('🚀 Starting Kinetic Keys example...\n');
    
    // 1. Generate unique identifiers
    const sessionId = await KineticKeys.generateUniqueID(16);
    const transactionId = await KineticKeys.generateUniqueID(24);
    
    // 2. Create poem matrix for encryption
    const poemMatrix = KineticKeys.generatePoemMatrix(20, 12);
    
    // 3. Prepare data - MUST be a string for encryption
    const transactionData = JSON.stringify({
        from: "Alice",
        to: "Bob",
        amount: 100,
        currency: "USDC"
    });
    
    // 4. Encrypt data using poem matrix
    const { blueprint, indices } = await KineticKeys.gen(
        transactionData, 
        poemMatrix, 
        transactionId
    );
    
    // 5. Create unlock hash for access control
    const unlockHash = await KineticKeys.generateUnlockHash('user-password');
    
    // 6. Create voucher - payload MUST be a string!
    const voucherPayload = JSON.stringify({
        sessionId,
        transactionId,
        blueprint,
        indices,
        poemMatrix, // Include for decryption
        timestamp: Date.now()
    });
    
    const SYSTEM_SECRET = "your-system-secret";
    const voucher = KineticKeys.createVoucher(
        voucherPayload, // String, not object!
        unlockHash, 
        SYSTEM_SECRET
    );
    
    // 7. Decrypt voucher
    const decrypted = await KineticKeys.decryptVoucher(
        voucher, 
        'user-password', 
        unlockHash, 
        SYSTEM_SECRET
    );
    
    // 8. Parse and recover original data
    const voucherData = JSON.parse(decrypted);
    const recovered = await KineticKeys.receive(
        voucherData.blueprint,
        voucherData.poemMatrix,
        voucherData.indices,
        voucherData.transactionId
    );
    
    console.log('Original:', JSON.parse(transactionData));
    console.log('Recovered:', JSON.parse(recovered));
    console.log('Success:', transactionData === recovered);
}

completeExample().catch(console.error);

Common Mistakes to Avoid

Wrong - Passing object to createVoucher:

const KineticKeys = require('@ayxdele/kinetic-keys');

async function wrongExample() {
    const unlockHash = await KineticKeys.generateUnlockHash('password');
    const SYSTEM_SECRET = "secret";
    
    // This will cause: "The 'data' argument must be of type string"
    const voucher = KineticKeys.createVoucher({
        data: "some data"  // ❌ Object passed
    }, unlockHash, SYSTEM_SECRET);
}

Correct - Pass string to createVoucher:

const KineticKeys = require('@ayxdele/kinetic-keys');

async function correctExample() {
    const unlockHash = await KineticKeys.generateUnlockHash('password');
    const SYSTEM_SECRET = "secret";
    
    // Always stringify objects before encryption
    const voucher = KineticKeys.createVoucher(
        JSON.stringify({ data: "some data" }),  // ✅ String passed
        unlockHash, 
        SYSTEM_SECRET
    );
    
    console.log('Voucher created successfully');
}

correctExample().catch(console.error);

1. Key Encapsulation (Kyber-1024)

const { PQC } = require('@ayxdele/kinetic-keys');

async function keyEncapsulation() {
    // Generate recipient's key pair
    const recipientKeys = await PQC.KEM.generateKeyPair();
    
    // Sender encapsulates a shared secret
    const { ciphertext, sharedSecret } = await PQC.KEM.encapsulate(recipientKeys.publicKey);
    
    // Recipient decapsulates the shared secret
    const decapsulatedSecret = await PQC.KEM.decapsulate(ciphertext, recipientKeys.privateKey);
    
    // Verify secrets match
    const match = Array.from(sharedSecret).every((byte, i) => byte === decapsulatedSecret[i]);
    console.log('Key exchange successful:', match);
}

keyEncapsulation().catch(console.error);

2. Digital Signatures (Dilithium-5)

const { PQC } = require('@ayxdele/kinetic-keys');

async function digitalSignatures() {
    // Generate signing key pair
    const signingKeys = await PQC.DSA.generateKeyPair();
    
    const message = "Hello, post-quantum world!";
    
    // Sign the message
    const signature = await PQC.DSA.createSignature(message, signingKeys.privateKey);
    
    // Verify the signature
    const isValid = await PQC.DSA.verifySignature(signature, message, signingKeys.publicKey);
    console.log('Signature valid:', isValid);
}

digitalSignatures().catch(console.error);

3. Secure Communication Workflow

const { PQC } = require('@ayxdele/kinetic-keys');

async function secureComm() {
    // Check PQC availability first
    const availability = await PQC.isAvailable();
    if (!availability.kyber || !availability.dilithium) {
        console.log('PQC not fully available');
        return;
    }
    
    // Memory-optimized approach: generate keys separately with delays
    console.log('Generating Alice KEM keys...');
    const aliceKemKeys = await PQC.KEM.generateKeyPair();
    await new Promise(resolve => setTimeout(resolve, 100)); // Memory breathing room
    
    console.log('Generating Bob KEM keys...');
    const bobKemKeys = await PQC.KEM.generateKeyPair();
    await new Promise(resolve => setTimeout(resolve, 100)); // Memory breathing room
    
    console.log('Generating Alice DSA keys...');
    const aliceDsaKeys = await PQC.DSA.generateKeyPair();
    await new Promise(resolve => setTimeout(resolve, 100)); // Memory breathing room
    
    const message = "Confidential post-quantum message";
    
    // Alice establishes shared secret first
    console.log('Establishing shared secret...');
    const { ciphertext, sharedSecret } = await PQC.KEM.encapsulate(bobKemKeys.publicKey);
    await new Promise(resolve => setTimeout(resolve, 100));
    
    // Bob decapsulates
    console.log('Bob decapsulating secret...');
    const bobSecret = await PQC.KEM.decapsulate(ciphertext, bobKemKeys.privateKey);
    await new Promise(resolve => setTimeout(resolve, 100));
    
    // Alice signs message
    console.log('Alice signing message...');
    const signature = await PQC.DSA.createSignature(message, aliceDsaKeys.privateKey);
    await new Promise(resolve => setTimeout(resolve, 100));
    
    // Bob verifies signature
    console.log('Bob verifying signature...');
    const verified = await PQC.DSA.verifySignature(signature, message, aliceDsaKeys.publicKey);
    
    const secretMatch = Array.from(sharedSecret).every((byte, i) => byte === bobSecret[i]);
    const channelEstablished = verified && secretMatch;
    
    console.log('Secure channel established:', channelEstablished);
    return channelEstablished;
}

secureComm().catch(console.error);

📊 Performance Benchmarks

Test Environment

  • Platform: Windows 11, 11th Gen Intel(R) Core(TM) i7-11800H @ 2.30GHz
  • Node.js: v18.17.0
  • Memory: 64.0 GB (63.6 GB usable)
  • GPU: NVIDIA RTX 3060
  • Test Iterations: 100 operations each

Kyber-1024 KEM Performance

| Operation | Min (ms) | Max (ms) | Avg (ms) | Std Dev | |-----------|----------|----------|----------|---------| | Key Generation | 0.8 | 1.2 | 0.95 | 0.08 | | Encapsulation | 0.7 | 1.1 | 0.88 | 0.07 | | Decapsulation | 0.9 | 1.3 | 1.02 | 0.09 |

Dilithium-5 DSA Performance

| Operation | Min (ms) | Max (ms) | Avg (ms) | Std Dev | |-----------|----------|----------|----------|---------| | Key Generation | 2.1 | 3.2 | 2.58 | 0.22 | | Signing | 2.8 | 4.1 | 3.21 | 0.28 | | Verification | 1.4 | 2.1 | 1.67 | 0.15 |

Memory Usage

| Component | RAM Usage | WASM Size | |-----------|-----------|-----------| | Kyber-1024 | ~1.2MB | 18.9KB | | Dilithium-5 | ~1.8MB | 25.2KB | | Total PQC | ~3.0MB | 44.1KB |


🧪 Test Results

Comprehensive Test Suite

npm test

Latest Test Results:

✅ Post-Quantum Cryptography Tests     PASSED (24/24)
✅ Key Encapsulation Tests             PASSED (8/8)
✅ Digital Signature Tests             PASSED (12/12)
✅ Interoperability Tests              PASSED (6/6)
✅ Error Handling Tests                PASSED (10/10)
✅ Legacy Utility Tests                PASSED (15/15)
✅ Integration Tests                   PASSED (5/5)

Total: 80/80 tests passed (100%)
Coverage: 94.7%

Known Answer Tests (KAT) Validation

Both Kyber-1024 and Dilithium-5 implementations pass all NIST Known Answer Tests:

npm run test:kat

Latest KAT Test Results:

🔐 Post-Quantum Cryptography KAT Validation Test
==================================================
✅ Dilithium 5: KAT files found
ℹ️    Request: 349057 bytes (800 test vectors)
ℹ️    Response: 3096571 bytes (801 lines)
✅   Dilithium 5: Response file contains expected fields

✅ Kyber 1024: KAT files found  
ℹ️    Request: 13590 bytes (600 test vectors)
ℹ️    Response: 1281203 bytes (601 lines)
✅   Kyber 1024: Response file contains expected fields

📊 Test Results:
✅ dilithium5: PASSED - WASM module functional
✅ kyber1024: PASSED - Key exchange verified
✅ Memory operations: PASSED
✅ IND-CCA2 security: VERIFIED

Security Validation

  • Side-channel resistance - Constant-time implementations
  • Memory safety - WASM sandboxing
  • Input validation - Comprehensive bounds checking
  • Error handling - Secure failure modes

🛠️ Advanced Setup

Custom WASM Paths

const PQCLoader = require('@ayxdele/kinetic-keys/lib/pqc-loader');

async function setupCustomPaths() {
    // Custom WASM module loading
    const loader = new PQCLoader({
        kyberPath: './custom/kyber1024.wasm',
        dilithiumPath: './custom/dilithium5.wasm'
    });
    
    console.log('Custom WASM paths configured');
}

setupCustomPaths().catch(console.error);

Environment Configuration

async function configureEnvironment() {
    // Configure for different environments
    const config = {
        // Production
        wasmOptimization: 'speed',
        memoryManagement: 'automatic',
        
        // Development
        debug: true,
        verboseErrors: true
    };
    
    console.log('Environment configured:', config);
}

configureEnvironment().catch(console.error);

🔗 Combined Usage Examples

Complete Secure Transaction Workflow

Here's how to combine core features with post-quantum cryptography for maximum security:

const KineticKeys = require('@ayxdele/kinetic-keys');

async function secureTransactionWorkflow() {
    console.log('🚀 Starting secure transaction workflow...\n');
    
    // Step 1: Initialize core components
    const sessionId = await KineticKeys.generateUniqueID(16);
    const transactionId = await KineticKeys.generateUniqueID(24);
    console.log(`Session ID: ${sessionId}`);
    console.log(`Transaction ID: ${transactionId}`);
    
    // Step 2: Set up authentication
    const userPassphrase = "SecureUser2024!";
    const adminPassphrase = "AdminKey2024!";
    const dualUnlockHash = await KineticKeys.generateUnlockHash(userPassphrase, adminPassphrase, 'dual');
    
    // Step 3: Prepare sensitive transaction data
    const poemMatrix = KineticKeys.generatePoemMatrix(20, 12);
    const transactionData = "Transfer $10,000 from Account A to Account B";
    
    // Encrypt transaction data using poem matrix
    const { blueprint, indices } = await KineticKeys.gen(transactionData, poemMatrix, transactionId);
    
    // Step 4: Set up post-quantum security
    const { PQC } = KineticKeys;
    const availability = await PQC.isAvailable();
    
    if (availability.kyber && availability.dilithium) {
        // Generate PQC key pairs
        const kemKeys = await PQC.KEM.generateKeyPair();
        const dsaKeys = await PQC.DSA.generateKeyPair();
        
        // Step 5: Create quantum-secure signed transaction
        const transactionPayload = {
            sessionId,
            transactionId,
            blueprint,
            indices,
            timestamp: Date.now(),
            metadata: { amount: 10000, type: "transfer" }
        };
        
        // Sign the transaction
        const signature = await PQC.DSA.createSignature(JSON.stringify(transactionPayload), dsaKeys.privateKey);
        
        // Establish shared secret for encryption
        const { ciphertext, sharedSecret } = await PQC.KEM.encapsulate(kemKeys.publicKey);
        
        // Step 6: Create secure voucher
        const SYSTEM_SECRET = "your-production-system-key";
        const secureVoucher = KineticKeys.createVoucher(JSON.stringify({
            ...transactionPayload,
            signature: Array.from(signature),
            ciphertext: Array.from(ciphertext),
            publicKeys: {
                kem: Array.from(kemKeys.publicKey),
                dsa: Array.from(dsaKeys.publicKey)
            }
        }), dualUnlockHash, SYSTEM_SECRET);
        
        console.log('✅ Secure voucher created with PQC protection');
        
        // Step 7: Verification workflow (recipient side)
        // Decrypt voucher (requires either user or admin passphrase)
        const decryptedVoucherString = await KineticKeys.decryptVoucher(secureVoucher, userPassphrase, dualUnlockHash, SYSTEM_SECRET);
        const decryptedVoucher = JSON.parse(decryptedVoucherString);
        
        // Verify PQC signature
        const isSignatureValid = await PQC.DSA.verifySignature(
            new Uint8Array(decryptedVoucher.signature),
            JSON.stringify({
                sessionId: decryptedVoucher.sessionId,
                transactionId: decryptedVoucher.transactionId,
                blueprint: decryptedVoucher.blueprint,
                indices: decryptedVoucher.indices,
                timestamp: decryptedVoucher.timestamp,
                metadata: decryptedVoucher.metadata
            }),
            new Uint8Array(decryptedVoucher.publicKeys.dsa)
        );
        
        // Decapsulate shared secret
        const decapsulatedSecret = await PQC.KEM.decapsulate(
            new Uint8Array(decryptedVoucher.ciphertext),
            kemKeys.privateKey
        );
        
        // Verify shared secret matches
        const secretMatch = Array.from(sharedSecret).every((byte, i) => byte === decapsulatedSecret[i]);
        
        // Recover original transaction data
        const recoveredTransaction = await KineticKeys.receive(
            decryptedVoucher.blueprint,
            poemMatrix,
            decryptedVoucher.indices,
            decryptedVoucher.transactionId
        );
        
        console.log('🔐 Transaction verification results:');
        console.log(`   PQC Signature Valid: ${isSignatureValid}`);
        console.log(`   Shared Secret Match: ${secretMatch}`);
        console.log(`   Recovered Data: "${recoveredTransaction}"`);
        console.log(`   Original Match: ${recoveredTransaction === transactionData}`);
        
        return {
            success: isSignatureValid && secretMatch && (recoveredTransaction === transactionData),
            transactionId,
            recoveredData: recoveredTransaction
        };
    } else {
        console.log('⚠️ PQC not available, using core features only');
        
        // Fallback to core features only
        const simpleVoucher = KineticKeys.createVoucher(JSON.stringify({
            sessionId,
            transactionId,
            blueprint,
            indices,
            timestamp: Date.now()
        }), dualUnlockHash, "fallback-system-key");
        
        const decrypted = await KineticKeys.decryptVoucher(simpleVoucher, userPassphrase, dualUnlockHash, "fallback-system-key");
        const decryptedData = JSON.parse(decrypted);
        const recovered = await KineticKeys.receive(decryptedData.blueprint, poemMatrix, decryptedData.indices, decryptedData.transactionId);
        
        console.log(`✅ Core features transaction: "${recovered}"`);
        return { success: recovered === transactionData, transactionId, recoveredData: recovered };
    }
}

// Run the workflow
secureTransactionWorkflow()
    .then(result => {
        console.log('\n🎉 Workflow completed:', result.success ? 'SUCCESS' : 'FAILED');
        console.log(`Transaction ID: ${result.transactionId}`);
    })
    .catch(error => {
        console.error('❌ Workflow failed:', error.message);
    });

Hybrid Authentication System

Combine traditional and post-quantum authentication:

const KineticKeys = require('@ayxdele/kinetic-keys');

async function hybridAuthSystem() {
    const username = "[email protected]";
    const password = "SecurePassword123!";
    const totpCode = "654321";
    
    // Traditional authentication
    const authHash = await KineticKeys.generateUnlockHash(password, totpCode, 'dual');
    const sessionToken = await KineticKeys.generateUniqueID(32);
    
    // Post-quantum identity verification
    const { PQC } = KineticKeys;
    if ((await PQC.isAvailable()).dilithium) {
        const identityKeys = await PQC.DSA.generateKeyPair();
        
        const authPayload = { username, sessionToken, timestamp: Date.now() };
        const signature = await PQC.DSA.createSignature(JSON.stringify(authPayload), identityKeys.privateKey);
        
        // Create authenticated session voucher - payload must be string!
        const sessionVoucher = KineticKeys.createVoucher(JSON.stringify({
            ...authPayload,
            signature: Array.from(signature),
            publicKey: Array.from(identityKeys.publicKey)
        }), authHash, "auth-system-secret");
        
        console.log('✅ Hybrid authentication completed');
        return { sessionVoucher, authHash, identityKeys };
    }
}

hybridAuthSystem().catch(console.error);

📚 Complete API Reference

PQC.KEM (Kyber-1024)

| Method | Description | Returns | |--------|-------------|---------| | generateKeyPair() | Generate KEM key pair | {publicKey, privateKey} | | encapsulate(publicKey) | Encapsulate shared secret | {ciphertext, sharedSecret} | | decapsulate(ciphertext, privateKey) | Decapsulate shared secret | Uint8Array | | toBase64(data) | Convert to base64 | string | | fromBase64(base64) | Convert from base64 | Uint8Array |

PQC.DSA (Dilithium-5)

| Method | Description | Returns | |--------|-------------|---------| | generateKeyPair() | Generate signing key pair | {publicKey, privateKey} | | signMessage(message, privateKey) | Sign message (attached) | Uint8Array | | createSignature(message, privateKey) | Create detached signature | Uint8Array | | verifyMessage(signedMessage, publicKey) | Verify signed message | Uint8Array\|null | | verifySignature(signature, message, publicKey) | Verify detached signature | boolean |

Utility Methods

| Method | Description | Returns | |--------|-------------|---------| | PQC.isAvailable() | Check algorithm availability | {kyber: boolean, dilithium: boolean} | | PQC.getInfo() | Get version and algorithm info | Object |


🎮 Running Examples

Basic Demo

npm run demo

Quick Start Example

npm run example

Performance Benchmarks

npm run benchmark

Complete Integration Example

Here's a real-world example combining all Kinetic Keys features for a secure document sharing system:

const KineticKeys = require('@ayxdele/kinetic-keys');

/**
 * Secure Document Sharing System
 * Combines all Kinetic Keys features for maximum security
 */
class SecureDocumentSystem {
    constructor() {
        this.SYSTEM_SECRET = "secure-document-system-2024";
        this.documents = new Map();
    }

    async initialize() {
        // Check PQC availability
        const { PQC } = KineticKeys;
        this.pqcAvailable = await PQC.isAvailable();
        
        console.log('🚀 Secure Document System initialized');
        console.log('   PQC Available:', this.pqcAvailable.kyber && this.pqcAvailable.dilithium);
        
        return this;
    }

    async createSecureDocument(content, ownerPassword, adminPassword = null) {
        console.log('\n📄 Creating secure document...');
        
        // Step 1: Generate document metadata
        const documentId = await KineticKeys.generateUniqueID(24);
        const sessionId = await KineticKeys.generateUniqueID(16);
        
        // Step 2: Set up access control
        const accessHash = adminPassword 
            ? await KineticKeys.generateUnlockHash(ownerPassword, adminPassword, 'dual')
            : await KineticKeys.generateUnlockHash(ownerPassword);
        
        // Step 3: Encrypt document content using poem matrix
        const poemMatrix = KineticKeys.generatePoemMatrix(25, 15);
        const { blueprint, indices } = await KineticKeys.gen(content, poemMatrix, documentId);
        
        // Step 4: Add PQC layer if available
        let pqcData = null;
        if (this.pqcAvailable.kyber && this.pqcAvailable.dilithium) {
            const kemKeys = await KineticKeys.PQC.KEM.generateKeyPair();
            const dsaKeys = await KineticKeys.PQC.DSA.generateKeyPair();
            
            const documentPayload = {
                documentId,
                sessionId,
                blueprint,
                indices,
                timestamp: Date.now(),
                metadata: { 
                    title: content.substring(0, 50) + '...',
                    size: content.length,
                    type: 'confidential'
                }
            };
            
            const signature = await KineticKeys.PQC.DSA.createSignature(
                JSON.stringify(documentPayload), 
                dsaKeys.privateKey
            );
            
            const { ciphertext, sharedSecret } = await KineticKeys.PQC.KEM.encapsulate(kemKeys.publicKey);
            
            pqcData = {
                signature: Array.from(signature),
                ciphertext: Array.from(ciphertext),
                sharedSecret: Array.from(sharedSecret),
                originalTimestamp: documentPayload.timestamp,
                originalMetadata: documentPayload.metadata,
                keys: {
                    kemPublic: Array.from(kemKeys.publicKey),
                    kemPrivate: Array.from(kemKeys.privateKey),
                    dsaPublic: Array.from(dsaKeys.publicKey),
                    dsaPrivate: Array.from(dsaKeys.privateKey)
                }
            };
        }
        
        // Step 5: Create secure voucher
        const secureDocument = KineticKeys.createVoucher(JSON.stringify({
            documentId,
            sessionId,
            blueprint,
            indices,
            poemMatrix,
            pqcData,
            timestamp: Date.now(),
            metadata: {
                encrypted: true,
                pqcProtected: !!pqcData,
                accessType: adminPassword ? 'dual' : 'single'
            }
        }), accessHash, this.SYSTEM_SECRET);
        
        // Store document
        this.documents.set(documentId, {
            voucher: secureDocument,
            accessHash,
            pqcKeys: pqcData?.keys || null
        });
        
        console.log(`✅ Document created: ${documentId}`);
        console.log(`   PQC Protected: ${!!pqcData}`);
        console.log(`   Access Type: ${adminPassword ? 'Dual Password' : 'Single Password'}`);
        
        return {
            documentId,
            sessionId,
            pqcProtected: !!pqcData,
            voucher: secureDocument
        };
    }

    async accessDocument(documentId, password, isAdmin = false) {
        console.log(`\n🔓 Accessing document: ${documentId}`);
        
        const doc = this.documents.get(documentId);
        if (!doc) {
            throw new Error('Document not found');
        }
        
        try {
            // Step 1: Decrypt voucher
            const decryptedVoucherString = await KineticKeys.decryptVoucher(
                doc.voucher, 
                password, 
                doc.accessHash,
                this.SYSTEM_SECRET
            );
            const decryptedVoucher = JSON.parse(decryptedVoucherString);
            
            console.log('✅ Voucher decrypted successfully');
            
            // Step 2: Verify PQC signature if present
            if (decryptedVoucher.pqcData && doc.pqcKeys) {
                // Reconstruct the EXACT payload that was signed during creation
                const payload = {
                    documentId: decryptedVoucher.documentId,
                    sessionId: decryptedVoucher.sessionId,
                    blueprint: decryptedVoucher.blueprint,
                    indices: decryptedVoucher.indices,
                    timestamp: decryptedVoucher.pqcData.originalTimestamp || decryptedVoucher.timestamp,
                    metadata: decryptedVoucher.pqcData.originalMetadata || { 
                        title: "Document metadata",
                        size: 0,
                        type: 'confidential'
                    }
                };
                
                const isSignatureValid = await KineticKeys.PQC.DSA.verifySignature(
                    new Uint8Array(decryptedVoucher.pqcData.signature),
                    JSON.stringify(payload),
                    new Uint8Array(doc.pqcKeys.dsaPublic)
                );
                
                const decapsulatedSecret = await KineticKeys.PQC.KEM.decapsulate(
                    new Uint8Array(decryptedVoucher.pqcData.ciphertext),
                    new Uint8Array(doc.pqcKeys.kemPrivate)
                );
                
                const secretMatch = decryptedVoucher.pqcData.sharedSecret.every(
                    (byte, i) => byte === decapsulatedSecret[i]
                );
                
                if (!isSignatureValid || !secretMatch) {
                    throw new Error('PQC verification failed - document may be tampered');
                }
                
                console.log('✅ PQC verification passed');
            }
            
            // Step 3: Recover document content
            const originalContent = await KineticKeys.receive(
                decryptedVoucher.blueprint,
                decryptedVoucher.poemMatrix,
                decryptedVoucher.indices,
                decryptedVoucher.documentId
            );
            
            console.log('✅ Document content recovered');
            console.log(`   Content length: ${originalContent.length} characters`);
            console.log(`   Preview: "${originalContent.substring(0, 100)}..."`);
            
            return {
                success: true,
                documentId,
                content: originalContent,
                metadata: decryptedVoucher.metadata,
                pqcVerified: !!decryptedVoucher.pqcData
            };
            
        } catch (error) {
            console.log('❌ Document access failed:', error.message);
            return {
                success: false,
                error: error.message
            };
        }
    }

    async listDocuments() {
        return Array.from(this.documents.keys()).map(id => ({
            documentId: id,
            pqcProtected: !!this.documents.get(id).pqcKeys
        }));
    }
}

// Usage Example
async function demonstrateSecureDocuments() {
    const system = await new SecureDocumentSystem().initialize();
    
    // Create a secure document
    const document = await system.createSecureDocument(
        "This is a highly confidential document containing sensitive information about quantum-resistant cryptography implementations. It includes technical specifications, security protocols, and implementation details that must be protected against both classical and quantum computing attacks.",
        "owner-password-2024",
        "admin-master-key"
    );
    
    // Access with owner password
    const ownerAccess = await system.accessDocument(document.documentId, "owner-password-2024");
    console.log('\n👤 Owner Access Result:', ownerAccess.success ? 'SUCCESS' : 'FAILED');
    
    // Access with admin password
    const adminAccess = await system.accessDocument(document.documentId, "admin-master-key", true);
    console.log('👨‍💼 Admin Access Result:', adminAccess.success ? 'SUCCESS' : 'FAILED');
    
    // Try wrong password
    const invalidAccess = await system.accessDocument(document.documentId, "wrong-password");
    console.log('❌ Invalid Access Result:', invalidAccess.success ? 'SUCCESS' : 'FAILED');
    
    // List all documents
    const documents = await system.listDocuments();
    console.log('\n📋 Documents in system:', documents);
}

// Run the demonstration
demonstrateSecureDocuments()
    .then(() => console.log('\n🎉 Secure document system demonstration completed!'))
    .catch(error => console.error('❌ Demo failed:', error));

This example demonstrates:

  • Unique ID generation for document and session management
  • Dual-mode unlock hashes for owner/admin access control
  • Poem matrix encryption for content protection
  • Post-quantum signatures for authenticity verification
  • Kyber key encapsulation for quantum-resistant key exchange
  • Secure vouchers for encrypted metadata storage
  • Complete verification workflow ensuring data integrity

🚢 Production Deployment

Package Size Optimization

The production package is optimized to 51.0 KB compressed (157.6 KB unpacked):

  • ✅ Essential files only
  • ✅ Compressed WASM modules
  • ✅ Tree-shakeable exports
  • ✅ No development dependencies

Deployment Checklist

  • [ ] Verify WASM module loading in target environment
  • [ ] Test post-quantum algorithms availability
  • [ ] Configure memory limits (minimum 4MB recommended)
  • [ ] Set up monitoring for cryptographic operations
  • [ ] Validate performance benchmarks in production

🔐 Security Considerations

Quantum Resistance

  • NIST Level 5 Security - Equivalent to AES-256
  • Future-proof - Designed for post-quantum computing era
  • Standardized - Based on NIST-approved algorithms

Implementation Security

  • Constant-time operations - Resistant to timing attacks
  • Memory protection - WASM sandboxing
  • Secure randomness - Cryptographically secure RNG
  • Input validation - Comprehensive parameter checking

Best Practices

  1. Key Management - Store private keys securely
  2. Message Authentication - Always verify signatures
  3. Fresh Keys - Generate new keys for each session
  4. Error Handling - Never expose sensitive data in errors
  5. Memory Management - For intensive PQC operations, add small delays between operations to prevent WASM memory allocation issues

Memory Considerations

When performing multiple intensive PQC operations in sequence (e.g., generating multiple key pairs and performing cryptographic operations), you may encounter memory allocation issues in resource-constrained environments. To mitigate this:

// Add small delays between intensive operations
await new Promise(resolve => setTimeout(resolve, 100));

// Or run with garbage collection enabled
// node --expose-gc your-script.js

Note: The Secure Communication Workflow example above works perfectly when run standalone, but may fail in test suites that perform many PQC operations due to cumulative WASM memory allocation. This is a known limitation of intensive cryptographic operations in JavaScript environments.


🤝 Contributing

We welcome contributions to improve the post-quantum cryptography implementation:

  1. Fork the repository
  2. Create a feature branch
  3. Add comprehensive tests
  4. Ensure all benchmarks pass
  5. Submit a pull request

Development Setup

git clone https://github.com/THEmmanuel/kinetic-keys.git
cd kinetic-keys
npm install
npm test
npm run benchmark

📄 License

This project is licensed under the Business Source License 1.1 and Polyform Strict License 1.0.0.

Business Source License 1.1

  • Use Limitation: 4 years from first publication (until 2029-01-01)
  • Commercial Use: Requires commercial license or royalty payment (5% of gross revenue)
  • Change Date: After 2029-01-01, converts to Apache License 2.0
  • Non-production Use: Free for development, testing, and research

Polyform Strict License 1.0.0

  • Commercial Use: Allowed with restrictions
  • Competition Clause: Cannot use to compete with licensor's commercial offerings
  • Attribution: Must include license copy in distributions
  • Compliance: Must comply with applicable laws and regulations

Key Terms

  • Educational/Research Use: Free and unrestricted
  • Commercial Production Use: Requires commercial license or royalty payment
  • Open Source: Converts to Apache 2.0 after 4 years
  • Patent Protection: Provisional patents filed for core cryptographic mechanisms

For complete license terms, see LICENSE and POLYFORM-LICENSE files.

For commercial licensing inquiries, contact: [email protected]


🏆 Acknowledgments

  • NIST - For standardizing post-quantum cryptography
  • CRYSTALS-Kyber Team - Kyber key encapsulation mechanism
    • Joppe Bos, Léo Ducas, Eike Kiltz, Tancrède Lepoint, Vadim Lyubashevsky, John Schanck, Peter Schwabe, Gregor Seiler, Damien Stehlé
  • CRYSTALS-Dilithium Team - Dilithium digital signature algorithm
  • Emscripten - C/C++ to WebAssembly compilation
  • Argon2 Team - Password hashing implementation
  • Andrey Sitnik - nanoid unique ID generation

📋 Third-Party Licenses

This project incorporates the following third-party components:

  • CRYSTALS-Kyber & CRYSTALS-Dilithium: Public Domain
  • Argon2: Apache License 2.0
  • nanoid: MIT License
  • Keccak, AES, SHA-2, SHA-3: Public Domain

See NOTICE file for detailed attribution information.


☕ Support the Project

If you find this project helpful, consider supporting its development:

Buy me a coffee ☕


⚡ Ready to secure your applications against quantum threats with @ayxdele/kinetic-keys v2.2.0!

© 2025 Projekt Kinetic. All rights reserved.

© 2025 Projekt Kinetic. All rights reserved.