Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 26 additions & 1 deletion lib/sync.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,26 @@ var sizes = {
ripemd160: 20
};

var blockSizes = {
__proto__: null,
blake2b512: 128, // Should use the built-in key support instead of HMAC.
blake2s256: 64, // (ie PBKDF2-BLAKE2b vs PBKDF2-HMAC-BLAKE2b)
md5: 64,
ripemd160: 64,
rmd160: 64,
sha1: 64,
sha224: 64,
sha256: 64,
sha384: 128,
sha512: 128,
'sha512-224': 128,
'sha512-256': 128,
'sha3-224': 144,
'sha3-256': 136,
'sha3-384': 104,
'sha3-512': 72
};

var mapping = {
__proto__: null,
'sha-1': 'sha1',
Expand All @@ -24,6 +44,7 @@ var mapping = {
};

var createHmac = require('create-hmac');
var createHash = require('create-hash');
var Buffer = require('safe-buffer').Buffer;

var checkParameters = require('./precondition');
Expand All @@ -38,9 +59,13 @@ function pbkdf2(password, salt, iterations, keylen, digest) {
var lowerDigest = (digest || 'sha1').toLowerCase();
var mappedDigest = mapping[lowerDigest] || lowerDigest;
var size = sizes[mappedDigest];
if (typeof size !== 'number' || !size) {
var blockSize = blockSizes[mappedDigest];
if (typeof size !== 'number' || !size || typeof blockSize !== 'number' || !blockSize) {
throw new TypeError('Digest algorithm not supported: ' + digest);
}
if (password.length > blockSize) {
password = createHash(mappedDigest).update(password).digest();
}

var DK = Buffer.allocUnsafe(keylen);
var block1 = Buffer.allocUnsafe(salt.length + 4);
Expand Down
Loading