43 lines
1.5 KiB
JavaScript
Executable file
43 lines
1.5 KiB
JavaScript
Executable file
var sodium = require('../lib/sodium');
|
|
var should = require('should');
|
|
|
|
// Generate Alice's and Bob's key pairs
|
|
var bob = new sodium.Key.ECDH();
|
|
var alice = new sodium.Key.ECDH();
|
|
|
|
// Now alice and bob exchange public keys
|
|
// To keep this example simple the network, and public key exchanges are
|
|
// simulated by using the variables alicePublicKey, and bobPublicKey
|
|
alicePublicKey = alice.pk().get();
|
|
bobPublicKey = bob.pk().get();
|
|
|
|
// Once Alice gets Bob's public key she can initialize the
|
|
// Eliptic Curve Diffie-Helman object with her secret key
|
|
// and Bob's public key
|
|
var aliceDH = new sodium.ECDH(bobPublicKey, alice.sk().get());
|
|
|
|
// Alice calculates the Diffie-Helman secret
|
|
var aliceSecret = aliceDH.secret();
|
|
|
|
// Bob uses Alice's public key to initialize the
|
|
// Eliptic Curve Diffie-Helman object with his secret key
|
|
// and Alice's public key
|
|
var bobDH = new sodium.ECDH(alicePublicKey, bob.sk().get());
|
|
|
|
// Bob calculates the Diffie-Helman secret
|
|
var bobSecret = bobDH.secret();
|
|
|
|
// Alice and Bob should now have the same secret and the key exchange
|
|
// is complete
|
|
bobSecret.should.eql(aliceSecret);
|
|
console.log('DH Secrets Match!');
|
|
|
|
// The Diffie-Helman secret should not be used directly as an encryption key
|
|
// You can take the secret and hash it using your "favorite" hash function or
|
|
// you can use ECDG.sessionKey to get a valid session Key
|
|
var bobSessionKey = bobDH.sessionKey();
|
|
var aliceSessionKey = aliceDH.sessionKey();
|
|
|
|
aliceSessionKey.should.eql(bobSessionKey);
|
|
console.log('Sessions Keys Match!');
|