sodium
Version:
Lib Sodium port for node.js
113 lines (95 loc) • 4.06 kB
JavaScript
/**
* Created by bmf on 10/31/13.
*/
;
var assert = require('assert');
var crypto = require('crypto');
var sodium = require('../build/Release/sodium');
describe('Sign', function() {
it('crypto_sign_keypair should return a pair of keys', function(done) {
var keys = sodium.crypto_sign_keypair();
assert.equal(typeof keys, 'object');
assert.notEqual(typeof keys.publicKey, 'undefined');
assert.notEqual(typeof keys.secretKey, 'undefined');
assert.equal(keys.publicKey.length, sodium.crypto_sign_PUBLICKEYBYTES);
assert.equal(keys.secretKey.length, sodium.crypto_sign_SECRETKEYBYTES);
done();
});
it('a signed message should verify correctly', function(done) {
var keys = sodium.crypto_sign_keypair();
var message = Buffer.from("Libsodium is cool", 'utf8');
var signedMsg = sodium.crypto_sign(message, keys.secretKey);
var message2 = sodium.crypto_sign_open(signedMsg, keys.publicKey);
assert.equal(message2.toString('utf8'), message.toString('utf8'));
done();
});
it('should accept a zero length message', function(done) {
var keys = sodium.crypto_sign_ed25519_keypair();
var signedMsg = sodium.crypto_sign_ed25519_detached(Buffer.allocUnsafe(0), keys.secretKey)
done();
});
it('a detached message signature should verify correctly', function(done) {
var keys = sodium.crypto_sign_keypair();
var message = Buffer.from("Libsodium is cool", 'utf8');
var signature = sodium.crypto_sign_detached(message, keys.secretKey);
var verified = sodium.crypto_sign_verify_detached(signature, message, keys.publicKey);
assert.strictEqual(verified, true);
done();
});
it('a modified detached message signature should not verify correctly', function(done) {
var keys = sodium.crypto_sign_keypair();
var message = Buffer.from("Libsodium is cool", 'utf8');
var signature = sodium.crypto_sign_detached(message, keys.secretKey);
signature.writeFloatLE(Math.random(), 0);
var verified = sodium.crypto_sign_verify_detached(signature, message, keys.publicKey);
assert.strictEqual(verified, false);
done();
});
it('should throw with less than 2 arguments', function(done) {
var keys = sodium.crypto_sign_keypair();
var message = Buffer.from("Libsodium is cool", 'utf8');
assert.throws(function() {
var signedMsg = sodium.crypto_sign(message);
});
done();
});
it('should throw with no params', function(done) {
var keys = sodium.crypto_sign_keypair();
var message = Buffer.from("Libsodium is cool", 'utf8');
assert.throws(function() {
var signedMsg = sodium.crypto_sign();
});
done();
});
it('should throw with a small key', function(done) {
var message = Buffer.from("Libsodium is cool", 'utf8');
assert.throws(function() {
var signedMsg = sodium.crypto_sign(message, Buffer.allocUnsafe(12));
});
done();
});
it('should test bad arg 1', function(done) {
var message = Buffer.from("Libsodium is cool", 'utf8');
var keys = sodium.crypto_sign_keypair();
assert.throws(function() {
var signedMsg = sodium.crypto_sign(1, keys.secretKey);
});
done();
});
it('should test bad arg 2', function(done) {
var message = Buffer.from("Libsodium is cool", 'utf8');
var keys = sodium.crypto_sign_keypair();
assert.throws(function() {
var signedMsg = sodium.crypto_sign(message, 1);
});
done();
});
it('should test bad arg 2', function(done) {
var message = Buffer.from("Libsodium is cool", 'utf8');
var keys = sodium.crypto_sign_keypair();
assert.throws(function() {
var signedMsg = sodium.crypto_sign(message, "123");
});
done();
});
});