test_crypto_sign.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. /**
  2. * Created by bmf on 10/31/13.
  3. */
  4. "use strict";
  5. var assert = require('assert');
  6. var crypto = require('crypto');
  7. var sodium = require('../build/Release/sodium');
  8. describe('Sign', function() {
  9. it('crypto_sign_keypair should return a pair of keys', function(done) {
  10. var keys = sodium.crypto_sign_keypair();
  11. assert.equal(typeof keys, 'object');
  12. assert.notEqual(typeof keys.publicKey, 'undefined');
  13. assert.notEqual(typeof keys.secretKey, 'undefined');
  14. assert.equal(keys.publicKey.length, sodium.crypto_sign_PUBLICKEYBYTES);
  15. assert.equal(keys.secretKey.length, sodium.crypto_sign_SECRETKEYBYTES);
  16. done();
  17. });
  18. it('a signed message should verify correctly', function(done) {
  19. var keys = sodium.crypto_sign_keypair();
  20. var message = Buffer.from("Libsodium is cool", 'utf8');
  21. var signedMsg = sodium.crypto_sign(message, keys.secretKey);
  22. var message2 = sodium.crypto_sign_open(signedMsg, keys.publicKey);
  23. assert.equal(message2.toString('utf8'), message.toString('utf8'));
  24. done();
  25. });
  26. it('should accept a zero length message', function(done) {
  27. var keys = sodium.crypto_sign_ed25519_keypair();
  28. var signedMsg = sodium.crypto_sign_ed25519_detached(Buffer.allocUnsafe(0), keys.secretKey)
  29. done();
  30. });
  31. it('a detached message signature should verify correctly', function(done) {
  32. var keys = sodium.crypto_sign_keypair();
  33. var message = Buffer.from("Libsodium is cool", 'utf8');
  34. var signature = sodium.crypto_sign_detached(message, keys.secretKey);
  35. var verified = sodium.crypto_sign_verify_detached(signature, message, keys.publicKey);
  36. assert.strictEqual(verified, true);
  37. done();
  38. });
  39. it('a modified detached message signature should not verify correctly', function(done) {
  40. var keys = sodium.crypto_sign_keypair();
  41. var message = Buffer.from("Libsodium is cool", 'utf8');
  42. var signature = sodium.crypto_sign_detached(message, keys.secretKey);
  43. signature.writeFloatLE(Math.random(), 0);
  44. var verified = sodium.crypto_sign_verify_detached(signature, message, keys.publicKey);
  45. assert.strictEqual(verified, false);
  46. done();
  47. });
  48. it('should throw with less than 2 arguments', function(done) {
  49. var keys = sodium.crypto_sign_keypair();
  50. var message = Buffer.from("Libsodium is cool", 'utf8');
  51. assert.throws(function() {
  52. var signedMsg = sodium.crypto_sign(message);
  53. });
  54. done();
  55. });
  56. it('should throw with no params', function(done) {
  57. var keys = sodium.crypto_sign_keypair();
  58. var message = Buffer.from("Libsodium is cool", 'utf8');
  59. assert.throws(function() {
  60. var signedMsg = sodium.crypto_sign();
  61. });
  62. done();
  63. });
  64. it('should throw with a small key', function(done) {
  65. var message = Buffer.from("Libsodium is cool", 'utf8');
  66. assert.throws(function() {
  67. var signedMsg = sodium.crypto_sign(message, Buffer.allocUnsafe(12));
  68. });
  69. done();
  70. });
  71. it('should test bad arg 1', function(done) {
  72. var message = Buffer.from("Libsodium is cool", 'utf8');
  73. var keys = sodium.crypto_sign_keypair();
  74. assert.throws(function() {
  75. var signedMsg = sodium.crypto_sign(1, keys.secretKey);
  76. });
  77. done();
  78. });
  79. it('should test bad arg 2', function(done) {
  80. var message = Buffer.from("Libsodium is cool", 'utf8');
  81. var keys = sodium.crypto_sign_keypair();
  82. assert.throws(function() {
  83. var signedMsg = sodium.crypto_sign(message, 1);
  84. });
  85. done();
  86. });
  87. it('should test bad arg 2', function(done) {
  88. var message = Buffer.from("Libsodium is cool", 'utf8');
  89. var keys = sodium.crypto_sign_keypair();
  90. assert.throws(function() {
  91. var signedMsg = sodium.crypto_sign(message, "123");
  92. });
  93. done();
  94. });
  95. });