ecdh.js 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. /**
  2. * Created by bmf on 11/2/13.
  3. *
  4. * Documentation of crypto http://nacl.cr.yp.to/box.html
  5. * @
  6. * @test ../test/test_ecdh.js
  7. */
  8. /* jslint node: true */
  9. 'use strict';
  10. var binding = require('../build/Release/sodium');
  11. var DHKey = require('./keys/dh-key');
  12. module.exports = function ECDH(publicKey, secretKey) {
  13. var self = this;
  14. self.iSecret = undefined;
  15. self.iSessionKey = undefined;
  16. self.iKey = new DHKey(publicKey, secretKey);
  17. self.secret = function () {
  18. if (!self.iSecret) {
  19. self.iSecret = binding.crypto_scalarmult(self.iKey.sk().get(), self
  20. .iKey.pk().get());
  21. }
  22. return self.iSecret;
  23. };
  24. self.reset = function () {
  25. self.iSecret = undefined;
  26. self.iSessionKey = undefined;
  27. };
  28. self.sessionKey = function () {
  29. if (!self.iSecret) {
  30. self.iSecret = binding.crypto_scalarmult(self.iKey.sk().get(), self
  31. .iKey.pk().get());
  32. }
  33. if (!self.iSessionKey) {
  34. self.iSessionKey = binding.crypto_hash_sha256(self.iSecret);
  35. }
  36. return self.iSessionKey;
  37. };
  38. };