crypto-keygen-suite
Version:
Key generation utilities for cryptographic operations. YES I RENAMED IT. SIX STATE PROTOCOL!!! See its folder for all <3
80 lines (71 loc) • 3 kB
JavaScript
import yargs from 'yargs/yargs';
import { hideBin } from 'yargs/helpers';
import crypto from 'crypto';
// Simulated Quantum Channel
class B92QKD {
constructor() {
this.basis = ['0', '1']; // Quantum states used in B92
}
generateQuantumBits(message) {
return message.split('').map(char => {
const bit = char.charCodeAt(0) % 2 === 0 ? '0' : '1'; // Convert ASCII character to quantum state
return { bit, quantumState: this.basis[Number(bit)] };
});
}
interceptAndDisturb(bits) {
return bits.map(bitObj => {
const eavesdropperChoice = Math.random() < 0.5 ? bitObj.quantumState : '-'; // Simulated eavesdropping
return { originalState: bitObj.quantumState, intercepted: eavesdropperChoice };
});
}
matchQuantumBits(bits) {
return bits.filter(bitObj => bitObj.intercepted === bitObj.originalState).map(bitObj => bitObj.originalState);
}
}
// CLI Setup
async function main() {
const argv = yargs(hideBin(process.argv))
.option('mode', {
alias: 'm',
type: 'string',
choices: ['generate', 'intercept', 'match'],
describe: 'Generate quantum bits, simulate interception, or match bits for key agreement',
})
.option('message', {
alias: 'msg',
type: 'string',
describe: 'Message to convert into quantum bits',
})
.help()
.argv;
const b92 = new B92QKD();
if (argv.mode === 'generate') {
if (!argv.message) {
console.error("❌ Quantum bit generation requires a message!");
return;
}
const quantumBits = b92.generateQuantumBits(argv.message);
console.log(`⚛️ Generated Quantum Bits: ${JSON.stringify(quantumBits, null, 2)}`);
} else if (argv.mode === 'intercept') {
if (!argv.message) {
console.error("❌ Interception requires quantum bits to test eavesdropping!");
return;
}
const quantumBits = b92.generateQuantumBits(argv.message);
const disturbedBits = b92.interceptAndDisturb(quantumBits);
console.log(`🔍 Interception Simulation: ${JSON.stringify(disturbedBits, null, 2)}`);
} else if (argv.mode === 'match') {
if (!argv.message) {
console.error("❌ Matching requires intercepted quantum bits to filter key agreement!");
return;
}
const quantumBits = b92.generateQuantumBits(argv.message);
const disturbedBits = b92.interceptAndDisturb(quantumBits);
const matchedKey = b92.matchQuantumBits(disturbedBits);
console.log(`🔐 Final Quantum Key Agreement: ${matchedKey.join('')}`);
} else {
console.error("❌ Invalid mode. Use --mode generate | intercept | match");
}
}
console.log("🚀 Debug: Running main function...");
main();