optimize scrypt more.
This commit is contained in:
parent
3a2d800ec1
commit
6d7602ddfa
@ -70,7 +70,7 @@ function scrypt(passwd, salt, N, r, p, len) {
|
|||||||
B = utils.pbkdf2(passwd, salt, 1, p * 128 * r, 'sha256');
|
B = utils.pbkdf2(passwd, salt, 1, p * 128 * r, 'sha256');
|
||||||
|
|
||||||
for (i = 0; i < p; i++)
|
for (i = 0; i < p; i++)
|
||||||
smix(B.slice(i * 128 * r), r, N, V, XY);
|
smix(B, i * 128 * r, r, N, V, XY);
|
||||||
|
|
||||||
return utils.pbkdf2(passwd, B, 1, len, 'sha256');
|
return utils.pbkdf2(passwd, B, 1, len, 'sha256');
|
||||||
}
|
}
|
||||||
@ -139,7 +139,7 @@ function R(a, b) {
|
|||||||
return (a << b) | (a >>> (32 - b));
|
return (a << b) | (a >>> (32 - b));
|
||||||
}
|
}
|
||||||
|
|
||||||
function blockmix_salsa8(B, Y, r) {
|
function blockmix_salsa8(B, Y, Yo, r) {
|
||||||
var X = new Buffer(64);
|
var X = new Buffer(64);
|
||||||
var i;
|
var i;
|
||||||
|
|
||||||
@ -148,40 +148,40 @@ function blockmix_salsa8(B, Y, r) {
|
|||||||
for (i = 0; i < 2 * r; i++) {
|
for (i = 0; i < 2 * r; i++) {
|
||||||
blkxor(X, B, 0, i * 64, 64);
|
blkxor(X, B, 0, i * 64, 64);
|
||||||
salsa20_8(X);
|
salsa20_8(X);
|
||||||
blkcpy(Y, X, i * 64, 0, 64);
|
blkcpy(Y, X, Yo + i * 64, 0, 64);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < r; i++)
|
for (i = 0; i < r; i++)
|
||||||
blkcpy(B, Y, i * 64, (i * 2) * 64, 64);
|
blkcpy(B, Y, i * 64, Yo + (i * 2) * 64, 64);
|
||||||
|
|
||||||
for (i = 0; i < r; i++)
|
for (i = 0; i < r; i++)
|
||||||
blkcpy(B, Y, (i + r) * 64, (i * 2 + 1) * 64, 64);
|
blkcpy(B, Y, (i + r) * 64, Yo + (i * 2 + 1) * 64, 64);
|
||||||
}
|
}
|
||||||
|
|
||||||
function integerify(B, r) {
|
function integerify(B, r) {
|
||||||
return B.readUInt32LE((2 * r - 1) * 64, true);
|
return B.readUInt32LE((2 * r - 1) * 64, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
function smix(B, r, N, V, XY) {
|
function smix(B, Bo, r, N, V, XY) {
|
||||||
var X = XY;
|
var X = XY;
|
||||||
var Y = XY.slice(128 * r);
|
var Y = XY;
|
||||||
var i;
|
var i;
|
||||||
var j;
|
var j;
|
||||||
|
|
||||||
blkcpy(X, B, 0, 0, 128 * r);
|
blkcpy(X, B, 0, Bo, 128 * r);
|
||||||
|
|
||||||
for (i = 0; i < N; i++) {
|
for (i = 0; i < N; i++) {
|
||||||
blkcpy(V, X, i * (128 * r), 0, 128 * r);
|
blkcpy(V, X, i * (128 * r), 0, 128 * r);
|
||||||
blockmix_salsa8(X, Y, r);
|
blockmix_salsa8(X, Y, 128 * r, r);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < N; i++) {
|
for (i = 0; i < N; i++) {
|
||||||
j = integerify(X, r) & (N - 1);
|
j = integerify(X, r) & (N - 1);
|
||||||
blkxor(X, V, 0, j * (128 * r), 128 * r);
|
blkxor(X, V, 0, j * (128 * r), 128 * r);
|
||||||
blockmix_salsa8(X, Y, r);
|
blockmix_salsa8(X, Y, 128 * r, r);
|
||||||
}
|
}
|
||||||
|
|
||||||
blkcpy(B, X, 0, 0, 128 * r);
|
blkcpy(B, X, Bo, 0, 128 * r);
|
||||||
}
|
}
|
||||||
|
|
||||||
function blkcpy(dest, src, s1, s2, len) {
|
function blkcpy(dest, src, s1, s2, len) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user