sign-key.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. /**
  2. * Created by bmf on 11/2/13.
  3. */
  4. var util = require('util');
  5. var binding = require('../../build/Release/sodium');
  6. var KeyPair = require('./keypair');
  7. var toBuffer = require('../toBuffer');
  8. var Sign = function SignKey(publicKey, secretKey, encoding) {
  9. var self = this;
  10. KeyPair.call(this);
  11. self.init({
  12. publicKeySize: binding.crypto_sign_PUBLICKEYBYTES,
  13. secretKeySize: binding.crypto_sign_SECRETKEYBYTES,
  14. publicKey: publicKey,
  15. secretKey: secretKey,
  16. encoding: encoding,
  17. type: 'SignKey'
  18. });
  19. self.generate = function() {
  20. var keys = binding.crypto_sign_keypair();
  21. self.secretKey.set(keys.secretKey);
  22. self.publicKey.set(keys.publicKey);
  23. };
  24. if( !publicKey || !secretKey ||
  25. !self.isValid({ 'publicKey': publicKey, 'secretKey': secretKey }) ) {
  26. // Generate the keys
  27. self.generate();
  28. }
  29. };
  30. util.inherits(Sign, KeyPair);
  31. Sign.fromSeed = function(seed, encoding) {
  32. encoding = String(encoding) || 'utf8';
  33. var buf = toBuffer(seed, encoding);
  34. var keys = binding.crypto_sign_seed_keypair(buf);
  35. return new Sign(keys.publicKey, keys.secretKey, undefined);
  36. };
  37. module.exports = Sign;