sodium
Version:
Lib Sodium port for node.js
113 lines (84 loc) • 4.31 kB
JavaScript
/**
* Created by bmf on 10/31/13.
*/
;
var assert = require('assert');
var sodium = require('../build/Release/sodium');
var toBuffer = require('../lib/toBuffer');
describe('PWHash scryptsalsa208sha256', function() {
it('should verify the generated hash with same password', function(done) {
var password = Buffer.from('this is a test password','utf8');
var out = sodium.crypto_pwhash_scryptsalsa208sha256_str(
password,
sodium.crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_INTERACTIVE,
sodium.crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_INTERACTIVE);
assert(sodium.crypto_pwhash_scryptsalsa208sha256_str_verify(out, password));
done();
});
it('should not verify the generated hash with different passwords', function(done) {
var password = Buffer.from('this is a test password','utf8');
var badPassword = Buffer.from('this is a bad password','utf8');
var out = sodium.crypto_pwhash_scryptsalsa208sha256_str(
password,
sodium.crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_INTERACTIVE,
sodium.crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_INTERACTIVE);
assert(sodium.crypto_pwhash_scryptsalsa208sha256_str_verify(out, badPassword)==false);
done();
});
it('should generate pwhash using low level scrypt API', function(done) {
var password = Buffer.from("pleaseletmein",'utf8');
var salt = Buffer.from('SodiumChloride','utf8');
var result = toBuffer("7023bdcb3afd7348461c06cd81fd38ebfda8fbba904f8e3ea9b543f6545da1f2d5432955613f0fcf62d49705242a9af9e61e85dc0d651e40dfcf017b45575887");
var N = 16384;
var r = 8;
var p = 1;
var output = Buffer.allocUnsafe(64);
sodium.crypto_pwhash_scryptsalsa208sha256_ll(password, salt, N, r, p, output);
assert(sodium.compare(result,output)==0);
done();
});
});
describe('PWHash', function() {
it('should verify the generated hash with same password', function(done) {
var password = Buffer.from('this is a test password','utf8');
var out = sodium.crypto_pwhash_str(
password,
sodium.crypto_pwhash_OPSLIMIT_INTERACTIVE,
sodium.crypto_pwhash_MEMLIMIT_INTERACTIVE);
var valid = sodium.crypto_pwhash_str_verify(out, password);
assert(valid);
done();
});
it('should not verify the generated hash with different passwords', function(done) {
var password = Buffer.from('this is a test password','utf8');
var badPassword = Buffer.from('this is a bad password','utf8');
var out = sodium.crypto_pwhash_str(
password,
sodium.crypto_pwhash_OPSLIMIT_INTERACTIVE,
sodium.crypto_pwhash_MEMLIMIT_INTERACTIVE);
assert(sodium.crypto_pwhash_str_verify(out, badPassword)==false);
done();
});
});
describe('PWHash argon2i', function() {
it('should verify the generated hash with same password', function(done) {
var password = Buffer.from('this is a test password','utf8');
var hash = sodium.crypto_pwhash_argon2i_str(
password,
sodium.crypto_pwhash_argon2i_OPSLIMIT_INTERACTIVE,
sodium.crypto_pwhash_argon2i_MEMLIMIT_INTERACTIVE);
var result = sodium.crypto_pwhash_argon2i_str_verify(hash, password);
assert(result);
done();
});
it('should not verify the generated hash with different passwords', function(done) {
var password = Buffer.from('this is a test password','utf8');
var badPassword = Buffer.from('this is a bad password','utf8');
var out = sodium.crypto_pwhash_argon2i_str(
password,
sodium.crypto_pwhash_argon2i_OPSLIMIT_INTERACTIVE,
sodium.crypto_pwhash_argon2i_MEMLIMIT_INTERACTIVE);
assert(sodium.crypto_pwhash_argon2i_str_verify(out, badPassword)==false);
done();
});
});