123456789101112131415161718192021222324252627282930313233343536373839404142 |
- 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!');
|