Files
cell/examples/seif_simple.js
John Alanbrook f4ea552271
Some checks failed
Build and Deploy / build-macos (push) Failing after 5s
Build and Deploy / build-windows (CLANG64) (push) Has been cancelled
Build and Deploy / package-dist (push) Has been cancelled
Build and Deploy / deploy-itch (push) Has been cancelled
Build and Deploy / deploy-gitea (push) Has been cancelled
Build and Deploy / build-linux (push) Has been cancelled
initial try at seif handshake example
2025-05-25 00:07:20 -05:00

118 lines
4.4 KiB
JavaScript

// Simplified Seif Handshake Example
// This demonstrates the core cryptographic operations of the Seif handshake
var crypto = use('crypto');
var json = use('json');
console.log("=== Seif Handshake Demo ===\n");
// Step 1: Generate key pairs for Alice and Bob
console.log("1. Generating key pairs...");
var alice_keys = crypto.keypair();
var bob_keys = crypto.keypair();
console.log("Alice's public key:", alice_keys.public);
console.log("Bob's public key:", bob_keys.public);
// Step 2: Alice initiates handshake
console.log("\n2. Alice initiates handshake...");
// Alice generates a random handshake key
var handshake_key = crypto.keypair().public; // Using public key generation for random 32 bytes
console.log("Handshake key:", handshake_key);
// Alice creates the handshake message
var alice_message = {
seif: 1,
handshake: crypto.encrypt_pk(bob_keys.public, handshake_key),
payload: crypto.encrypt(handshake_key, alice_keys.public)
};
console.log("Alice's message created (encrypted components)");
// Step 3: Bob processes the handshake
console.log("\n3. Bob processes the handshake...");
// Bob decrypts the handshake key
var decrypted_handshake_key_buffer = crypto.decrypt_pk(bob_keys.private, alice_message.handshake);
// Convert buffer to hex string
var handshake_key_bytes = new Uint8Array(decrypted_handshake_key_buffer);
var recovered_handshake_key = '';
for (var i = 0; i < handshake_key_bytes.length; i++) {
var hex = handshake_key_bytes[i].toString(16);
recovered_handshake_key += (hex.length === 1 ? '0' : '') + hex;
}
console.log("Bob recovered handshake key:", recovered_handshake_key);
console.log("Keys match:", recovered_handshake_key === handshake_key);
// Bob decrypts Alice's public key
var alice_public_buffer = crypto.decrypt(recovered_handshake_key, alice_message.payload);
var alice_public_bytes = new Uint8Array(alice_public_buffer);
var recovered_alice_public = '';
for (var i = 0; i < alice_public_bytes.length; i++) {
recovered_alice_public += String.fromCharCode(alice_public_bytes[i]);
}
console.log("Bob recovered Alice's public key:", recovered_alice_public);
console.log("Public keys match:", recovered_alice_public === alice_keys.public);
// Step 4: Bob generates session key and responds
console.log("\n4. Bob generates session key and responds...");
// Generate a random session key
var session_key = crypto.keypair().public;
console.log("Session key:", session_key);
// Bob encrypts the session key with Alice's public key
var bob_response = {
session: crypto.encrypt_pk(alice_keys.public, session_key)
};
// Encrypt the entire response with the handshake key
var encrypted_response = crypto.encrypt(handshake_key, json.encode(bob_response));
console.log("Bob's encrypted response created");
// Step 5: Alice processes Bob's response
console.log("\n5. Alice processes Bob's response...");
// Alice decrypts the response
var decrypted_response_buffer = crypto.decrypt(handshake_key, encrypted_response);
var response_json = '';
var response_bytes = new Uint8Array(decrypted_response_buffer);
for (var i = 0; i < response_bytes.length; i++) {
response_json += String.fromCharCode(response_bytes[i]);
}
var response_data = json.decode(response_json);
// Alice decrypts the session key
var session_key_buffer = crypto.decrypt_pk(alice_keys.private, response_data.session);
var session_key_bytes = new Uint8Array(session_key_buffer);
var recovered_session_key = '';
for (var i = 0; i < session_key_bytes.length; i++) {
var hex = session_key_bytes[i].toString(16);
recovered_session_key += (hex.length === 1 ? '0' : '') + hex;
}
console.log("Alice recovered session key:", recovered_session_key);
console.log("Session keys match:", recovered_session_key === session_key);
// Step 6: Demonstrate secure communication
console.log("\n6. Secure communication established!");
console.log("Both parties now share the session key and can communicate securely.");
// Example encrypted message
var message = "Hello, this is a secret message!";
var encrypted_msg = crypto.encrypt(session_key, message);
console.log("\nAlice encrypts:", message);
var decrypted_msg_buffer = crypto.decrypt(session_key, encrypted_msg);
var decrypted_msg = '';
var msg_bytes = new Uint8Array(decrypted_msg_buffer);
for (var i = 0; i < msg_bytes.length; i++) {
decrypted_msg += String.fromCharCode(msg_bytes[i]);
}
console.log("Bob decrypts:", decrypted_msg);
console.log("\n=== Seif Handshake Complete ===");