mirror of
https://github.com/verdaccio/verdaccio.git
synced 2024-11-13 03:35:52 +01:00
57 lines
1.5 KiB
JavaScript
57 lines
1.5 KiB
JavaScript
|
/** Node.js Crypt(3) Library
|
||
|
|
||
|
Inspired by (and intended to be compatible with) sendanor/crypt3
|
||
|
|
||
|
see https://github.com/sendanor/node-crypt3
|
||
|
|
||
|
The key difference is the removal of the dependency on the unix crypt(3) function
|
||
|
which is not platform independent, and requires compilation. Instead, a pure
|
||
|
javascript version is used.
|
||
|
|
||
|
*/
|
||
|
|
||
|
var crypt = require('unix-crypt-td-js'),
|
||
|
crypto = require('crypto');
|
||
|
|
||
|
function createSalt(type) {
|
||
|
type = type || 'sha512';
|
||
|
|
||
|
switch (type) {
|
||
|
|
||
|
case 'md5':
|
||
|
return '$1$' + crypto.randomBytes(10).toString('base64');
|
||
|
|
||
|
case 'blowfish':
|
||
|
return '$2a$' + crypto.randomBytes(10).toString('base64');
|
||
|
|
||
|
case 'sha256':
|
||
|
return '$5$' + crypto.randomBytes(10).toString('base64');
|
||
|
|
||
|
case 'sha512':
|
||
|
return '$6$' + crypto.randomBytes(10).toString('base64');
|
||
|
|
||
|
default:
|
||
|
throw new TypeError('Unknown salt type at crypt3.createSalt: ' + type);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
function crypt3(key, salt) {
|
||
|
salt = salt || createSalt();
|
||
|
return crypt(key, salt);
|
||
|
}
|
||
|
|
||
|
/** Crypt(3) password and data encryption.
|
||
|
* @param {string} key user's typed password
|
||
|
* @param {string} salt Optional salt, for example SHA-512 use "$6$salt$".
|
||
|
* @returns {string} A generated hash in format $id$salt$encrypted
|
||
|
* @see https://en.wikipedia.org/wiki/Crypt_(C)
|
||
|
*/
|
||
|
module.exports = crypt3;
|
||
|
|
||
|
/** Create salt
|
||
|
* @param {string} type The type of salt: md5, blowfish (only some linux distros), sha256 or sha512. Default is sha512.
|
||
|
* @returns {string} Generated salt string
|
||
|
*/
|
||
|
module.exports.createSalt = createSalt;
|