You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

90 lines
2.0 KiB
JavaScript

var Promise, errors, scrypt, scryptHandler;
scrypt = require("scrypt");
errors = require("errors");
Promise = require("bluebird");
scrypt.hash.config.keyEncoding = "utf8";
scrypt.hash.config.outputEncoding = "base64";
scrypt.verify.config.keyEncoding = "utf8";
scrypt.verify.config.hashEncoding = "base64";
errors.create({
name: "ScryptError"
});
errors.create({
name: "ScryptInputError",
parents: errors.ScryptError
});
errors.create({
name: "ScryptPasswordError",
parents: errors.ScryptError
});
errors.create({
name: "ScryptInternalError",
parents: errors.ScryptError
});
scryptHandler = function(resolve, reject) {
return function(err, result) {
var errorObj;
if (err != null) {
errorObj = (function() {
switch (err.scrypt_err_code) {
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 9:
case 10:
case 12:
case 13:
return errors.ScryptInternalError;
case 7:
case 8:
return errors.ScryptInputError;
case 11:
return errors.ScryptPasswordError;
}
})();
return reject(new errorObj(err.scrypt_err_message));
} else {
return resolve(result);
}
};
};
module.exports = {
hash: function(password, options, callback) {
if (options == null) {
options = {};
}
return (new Promise(function(resolve, reject) {
if (options.params == null) {
options.params = scrypt.params(0.1);
}
return scrypt.hash(password, options.params, scryptHandler(resolve, reject));
})).nodeify(callback);
},
verifyHash: function(password, hash, callback) {
return (new Promise(function(resolve, reject) {
return scrypt.verify(hash, password, scryptHandler(resolve, reject));
})).nodeify(callback);
},
ScryptError: errors.ScryptError,
InputError: errors.ScryptInputError,
PasswordError: errors.ScryptPasswordError,
InternalError: errors.ScryptInternalError,
scryptLib: scrypt
};