123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- var path = require("path"),
- fs = require("fs"),
- binding = require("bcrypt"),
- bcrypt = require(path.join(__dirname, '..', 'index.js'))/*,
- isaac = eval(
- fs.readFileSync(path.join(__dirname, "..", "src", "bcrypt", "prng", "accum.js"))+
- fs.readFileSync(path.join(__dirname, "..", "src", "bcrypt", "prng", "isaac.js"))+
- " accum.start();"+
- " isaac"
- )*/;
-
- module.exports = {
- "encodeBase64": function(test) {
- var str = bcrypt.encodeBase64([0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10], 16);
- test.strictEqual(str, "..CA.uOD/eaGAOmJB.yMBu");
- test.done();
- },
- "decodeBase64": function(test) {
- var bytes = bcrypt.decodeBase64("..CA.uOD/eaGAOmJB.yMBv.", 16);
- test.deepEqual(bytes, [0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F]);
- test.done();
- },
-
- "genSaltSync": function(test) {
- var salt = bcrypt.genSaltSync(10);
- test.ok(salt);
- test.ok(typeof salt == 'string');
- test.ok(salt.length > 0);
- test.done();
- },
-
- "genSalt": function(test) {
- bcrypt.genSalt(10, function(err, salt) {
- test.ok(salt);
- test.ok(typeof salt == 'string');
- test.ok(salt.length > 0);
- test.done();
- });
- },
-
- "hashSync": function(test) {
- test.doesNotThrow(function() {
- bcrypt.hashSync("hello", 10);
- });
- test.notEqual(bcrypt.hashSync("hello", 10), bcrypt.hashSync("hello", 10));
- test.done();
- },
-
- "hash": function(test) {
- bcrypt.hash("hello", 10, function(err, hash) {
- test.notOk(err);
- test.ok(hash);
- test.done();
- });
- },
-
- "compareSync": function(test) {
- var salt1 = bcrypt.genSaltSync(),
- hash1 = bcrypt.hashSync("hello", salt1); // $2a$
- var salt2 = bcrypt.genSaltSync().replace(/\$2a\$/, "$2y$"),
- hash2 = bcrypt.hashSync("world", salt2);
- var salt3 = bcrypt.genSaltSync().replace(/\$2a\$/, "$2b$"),
- hash3 = bcrypt.hashSync("hello world", salt3);
- test.strictEqual(hash1.substring(0,4), "$2a$");
- test.ok(bcrypt.compareSync("hello", hash1));
- test.notOk(bcrypt.compareSync("hello", hash2));
- test.notOk(bcrypt.compareSync("hello", hash3));
- test.strictEqual(hash2.substring(0,4), "$2y$");
- test.ok(bcrypt.compareSync("world", hash2));
- test.notOk(bcrypt.compareSync("world", hash1));
- test.notOk(bcrypt.compareSync("world", hash3));
- test.strictEqual(hash3.substring(0,4), "$2b$");
- test.ok(bcrypt.compareSync("hello world", hash3));
- test.notOk(bcrypt.compareSync("hello world", hash1));
- test.notOk(bcrypt.compareSync("hello world", hash2));
- test.done();
- },
-
- "compare": function(test) {
- var salt1 = bcrypt.genSaltSync(),
- hash1 = bcrypt.hashSync("hello", salt1); // $2a$
- var salt2 = bcrypt.genSaltSync();
- salt2 = salt2.substring(0,2)+'y'+salt2.substring(3); // $2y$
- var hash2 = bcrypt.hashSync("world", salt2);
- bcrypt.compare("hello", hash1, function(err, same) {
- test.notOk(err);
- test.ok(same);
- bcrypt.compare("hello", hash2, function(err, same) {
- test.notOk(err);
- test.notOk(same);
- bcrypt.compare("world", hash2, function(err, same) {
- test.notOk(err);
- test.ok(same);
- bcrypt.compare("world", hash1, function(err, same) {
- test.notOk(err);
- test.notOk(same);
- test.done();
- });
- });
- });
- });
- },
-
- "getSalt": function(test) {
- var hash1 = bcrypt.hashSync("hello", bcrypt.genSaltSync());
- var salt = bcrypt.getSalt(hash1);
- var hash2 = bcrypt.hashSync("hello", salt);
- test.equal(hash1, hash2);
- test.done();
- },
-
- "getRounds": function(test) {
- var hash1 = bcrypt.hashSync("hello", bcrypt.genSaltSync());
- test.equal(bcrypt.getRounds(hash1), 10);
- test.done();
- },
-
- "progress": function(test) {
- bcrypt.genSalt(12, function(err, salt) {
- test.ok(!err);
- var progress = [];
- bcrypt.hash("hello world", salt, function(err, hash) {
- test.ok(!err);
- test.ok(typeof hash === 'string');
- test.ok(progress.length >= 2);
- test.strictEqual(progress[0], 0);
- test.strictEqual(progress[progress.length-1], 1);
- test.done();
- }, function(n) {
- progress.push(n);
- });
- });
- },
- "promise": function(test) {
- bcrypt.genSalt(10)
- .then(function(salt) {
- bcrypt.hash("hello", salt)
- .then(function(hash) {
- test.ok(hash);
- bcrypt.compare("hello", hash)
- .then(function(result) {
- test.ok(result);
- bcrypt.genSalt(/* no args */)
- .then(function(salt) {
- test.ok(salt);
- test.done();
- }, function(err) {
- test.fail(err, null, "promise rejected");
- });
- }, function(err) {
- test.fail(err, null, "promise rejected");
- });
- }, function(err) {
- test.fail(err, null, 'promise rejected');
- });
- }, function(err) {
- test.fail(err, null, "promise rejected");
- });
- },
- "compat": {
- "quickbrown": function(test) {
- var pass = fs.readFileSync(path.join(__dirname, "quickbrown.txt"))+"",
- salt = bcrypt.genSaltSync(),
- hash1 = binding.hashSync(pass, salt),
- hash2 = bcrypt.hashSync(pass, salt);
- test.equal(hash1, hash2);
- test.done();
- },
- "roundsOOB": function(test) {
- var salt1 = bcrypt.genSaltSync(0), // $10$ like not set
- salt2 = binding.genSaltSync(0);
- test.strictEqual(salt1.substring(0, 7), "$2a$10$");
- test.strictEqual(salt2.substring(0, 7), "$2a$10$");
- salt1 = bcrypt.genSaltSync(3); // $04$ is lower cap
- salt2 = bcrypt.genSaltSync(3);
- test.strictEqual(salt1.substring(0, 7), "$2a$04$");
- test.strictEqual(salt2.substring(0, 7), "$2a$04$");
- salt1 = bcrypt.genSaltSync(32); // $31$ is upper cap
- salt2 = bcrypt.genSaltSync(32);
- test.strictEqual(salt1.substring(0, 7), "$2a$31$");
- test.strictEqual(salt2.substring(0, 7), "$2a$31$");
- test.done();
- }
- }
- };
|