crypto: optimize hkdf and pbkdf2.
This commit is contained in:
parent
4e977810ce
commit
28c7ee69e4
@ -312,7 +312,7 @@ crypto.decipher = function decipher(data, key, iv) {
|
|||||||
crypto._pbkdf2 = function pbkdf2(key, salt, iter, len, alg) {
|
crypto._pbkdf2 = function pbkdf2(key, salt, iter, len, alg) {
|
||||||
var size = crypto.hash(alg, new Buffer(0)).length;
|
var size = crypto.hash(alg, new Buffer(0)).length;
|
||||||
var blocks = Math.ceil(len / size);
|
var blocks = Math.ceil(len / size);
|
||||||
var out = new Buffer(blocks * size);
|
var out = new Buffer(len);
|
||||||
var buf = new Buffer(salt.length + 4);
|
var buf = new Buffer(salt.length + 4);
|
||||||
var block = new Buffer(size);
|
var block = new Buffer(size);
|
||||||
var pos = 0;
|
var pos = 0;
|
||||||
@ -333,7 +333,7 @@ crypto._pbkdf2 = function pbkdf2(key, salt, iter, len, alg) {
|
|||||||
pos += size;
|
pos += size;
|
||||||
}
|
}
|
||||||
|
|
||||||
return out.slice(0, len);
|
return out;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -365,7 +365,7 @@ crypto.hkdfExpand = function hkdfExpand(prk, info, len, alg) {
|
|||||||
if (blocks > 255)
|
if (blocks > 255)
|
||||||
throw new Error('Too many blocks.');
|
throw new Error('Too many blocks.');
|
||||||
|
|
||||||
okm = new Buffer(0);
|
okm = new Buffer(len);
|
||||||
|
|
||||||
if (blocks === 0)
|
if (blocks === 0)
|
||||||
return okm;
|
return okm;
|
||||||
@ -376,16 +376,16 @@ crypto.hkdfExpand = function hkdfExpand(prk, info, len, alg) {
|
|||||||
info.copy(buf, size);
|
info.copy(buf, size);
|
||||||
buf[buf.length - 1] = 1;
|
buf[buf.length - 1] = 1;
|
||||||
out = crypto.hmac(alg, buf.slice(size), prk);
|
out = crypto.hmac(alg, buf.slice(size), prk);
|
||||||
okm = out;
|
out.copy(okm, 0);
|
||||||
|
|
||||||
for (i = 1; i < blocks; i++) {
|
for (i = 1; i < blocks; i++) {
|
||||||
out.copy(buf, 0);
|
out.copy(buf, 0);
|
||||||
buf[buf.length - 1]++;
|
buf[buf.length - 1]++;
|
||||||
out = crypto.hmac(alg, buf, prk);
|
out = crypto.hmac(alg, buf, prk);
|
||||||
okm = Buffer.concat([okm, out]);
|
out.copy(okm, i * size);
|
||||||
}
|
}
|
||||||
|
|
||||||
return okm.slice(0, len);
|
return okm;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user