Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

scrypt-async-modern

Package Overview
Dependencies
Maintainers
1
Versions
13
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

scrypt-async-modern - npm Package Compare versions

Comparing version 3.0.7 to 3.0.8

.idea/codeStyles/codeStyleConfig.xml

588

dist/index.js

@@ -1,7 +0,589 @@

!function(r,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("@babel/runtime-corejs2/core-js/set-immediate"),require("@babel/runtime-corejs2/helpers/toConsumableArray"),require("@babel/runtime-corejs2/core-js/promise")):"function"==typeof define&&define.amd?define(["@babel/runtime-corejs2/core-js/set-immediate","@babel/runtime-corejs2/helpers/toConsumableArray","@babel/runtime-corejs2/core-js/promise"],e):"object"==typeof exports?exports["scrypt-async-modern"]=e(require("@babel/runtime-corejs2/core-js/set-immediate"),require("@babel/runtime-corejs2/helpers/toConsumableArray"),require("@babel/runtime-corejs2/core-js/promise")):r["scrypt-async-modern"]=e(r["@babel/runtime-corejs2/core-js/set-immediate"],r["@babel/runtime-corejs2/helpers/toConsumableArray"],r["@babel/runtime-corejs2/core-js/promise"])}(global,function(r,e,n){return function(r){var e={};function n(t){if(e[t])return e[t].exports;var o=e[t]={i:t,l:!1,exports:{}};return r[t].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=r,n.c=e,n.d=function(r,e,t){n.o(r,e)||Object.defineProperty(r,e,{enumerable:!0,get:t})},n.r=function(r){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(r,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(r,"__esModule",{value:!0})},n.t=function(r,e){if(1&e&&(r=n(r)),8&e)return r;if(4&e&&"object"==typeof r&&r&&r.__esModule)return r;var t=Object.create(null);if(n.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:r}),2&e&&"string"!=typeof r)for(var o in r)n.d(t,o,function(e){return r[e]}.bind(null,o));return t},n.n=function(r){var e=r&&r.__esModule?function(){return r.default}:function(){return r};return n.d(e,"a",e),e},n.o=function(r,e){return Object.prototype.hasOwnProperty.call(r,e)},n.p="",n(n.s=3)}([function(e,n){e.exports=r},function(r,n){r.exports=e},function(r,e){r.exports=n},function(r,e,n){r.exports=n(4)},function(r,e,n){"use strict";n.r(e),n.d(e,"default",function(){return a});var t=n(0),o=n.n(t),i=n(1),u=n.n(i),s=n(2),f=n.n(s);
"use strict";
/*!
* Fast "async" scrypt implementation in modern JavaScript.
* Copyright (c) 2018 Charles Crete | MIT License
* Copyright (c) 2019 Charles Crete | MIT License
* https://github.com/Cretezy/scrypt-async-modern
*/
function a(r,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},t=n.N,o=void 0===t?16384:t,i=n.logN,u=n.r,s=void 0===u?8:u,a=n.p,l=void 0===a?1:a,d=n.dkLen,h=void 0===d?32:d,v=n.interruptStep,b=void 0===v?0:v,m=n.encoding;return new f.a(function(n,t){if(!i&&!o)return t(new Error("scrypt: missing N or logN parameter"));if(i||0===i){if(i<1||i>31)return t(new Error("scrypt: logN must be between 1 and 31"));o=1<<i>>>0}else{if(o<2||o>p)return t(new Error("scrypt: N is out of range"));if(0!=(o&o-1))return t(Error("scrypt: N is not a power of 2"))}return l<1?t(new Error("scrypt: invalid p")):s<1?t(new Error("scrypt: invalid r")):void c({password:r,salt:e,N:o,r:s,p:l,dkLen:h,interruptStep:b,encoding:m},n)})}function c(r,e){var n,t,i,s,f=r.password,a=r.salt,c=r.N,l=r.r,d=r.p,h=r.dkLen,v=r.interruptStep,b=r.encoding;function m(r){var e=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],n=1779033703,t=3144134277,o=1013904242,i=2773480762,u=1359893119,s=2600822924,f=528734635,a=1541459225,c=new Array(64);function p(r){for(var p=0,l=r.length;l>=64;){var d=n,h=t,v=o,b=i,m=u,y=s,g=f,j=a,w=void 0,A=void 0,x=void 0,N=void 0,E=void 0;for(A=0;A<16;A++)x=p+4*A,c[A]=(255&r[x])<<24|(255&r[x+1])<<16|(255&r[x+2])<<8|255&r[x+3];for(A=16;A<64;A++)N=((w=c[A-2])>>>17|w<<15)^(w>>>19|w<<13)^w>>>10,E=((w=c[A-15])>>>7|w<<25)^(w>>>18|w<<14)^w>>>3,c[A]=(N+c[A-7]|0)+(E+c[A-16]|0)|0;for(A=0;A<64;A++)N=(((m>>>6|m<<26)^(m>>>11|m<<21)^(m>>>25|m<<7))+(m&y^~m&g)|0)+(j+(e[A]+c[A]|0)|0)|0,E=((d>>>2|d<<30)^(d>>>13|d<<19)^(d>>>22|d<<10))+(d&h^d&v^h&v)|0,j=g,g=y,y=m,m=b+N|0,b=v,v=h,h=d,d=N+E|0;n=n+d|0,t=t+h|0,o=o+v|0,i=i+b|0,u=u+m|0,s=s+y|0,f=f+g|0,a=a+j|0,p+=64,l-=64}}p(r);var l,d=r.length%64,h=r.length/536870912|0,v=r.length<<3,b=d<56?56:120,m=r.slice(r.length-d,r.length);for(m.push(128),l=d+1;l<b;l++)m.push(0);return m.push(h>>>24&255),m.push(h>>>16&255),m.push(h>>>8&255),m.push(h>>>0&255),m.push(v>>>24&255),m.push(v>>>16&255),m.push(v>>>8&255),m.push(v>>>0&255),p(m),[n>>>24&255,n>>>16&255,n>>>8&255,n>>>0&255,t>>>24&255,t>>>16&255,t>>>8&255,t>>>0&255,o>>>24&255,o>>>16&255,o>>>8&255,o>>>0&255,i>>>24&255,i>>>16&255,i>>>8&255,i>>>0&255,u>>>24&255,u>>>16&255,u>>>8&255,u>>>0&255,s>>>24&255,s>>>16&255,s>>>8&255,s>>>0&255,f>>>24&255,f>>>16&255,f>>>8&255,f>>>0&255,a>>>24&255,a>>>16&255,a>>>8&255,a>>>0&255]}function y(r,e,n){r.length>64&&(r=m(r.push?r:u()(r)));var t,o=64+e.length+4,i=new Array(o),s=new Array(64),f=[];for(t=0;t<64;t++)i[t]=54;for(t=0;t<r.length;t++)i[t]^=r[t];for(t=0;t<e.length;t++)i[64+t]=e[t];for(t=o-4;t<o;t++)i[t]=0;for(t=0;t<64;t++)s[t]=92;for(t=0;t<r.length;t++)s[t]^=r[t];function a(){for(var r=o-1;r>=o-4;r--){if(i[r]++,i[r]<=255)return;i[r]=0}}for(;n>=32;)a(),f=f.concat(m(s.concat(m(i)))),n-=32;return n>0&&(a(),f=f.concat(m(s.concat(m(i))).slice(0,n))),f}function g(r,e,n,t){var o,i,u=r[0]^e[n++],s=r[1]^e[n++],f=r[2]^e[n++],a=r[3]^e[n++],c=r[4]^e[n++],p=r[5]^e[n++],l=r[6]^e[n++],d=r[7]^e[n++],h=r[8]^e[n++],v=r[9]^e[n++],b=r[10]^e[n++],m=r[11]^e[n++],y=r[12]^e[n++],g=r[13]^e[n++],j=r[14]^e[n++],w=r[15]^e[n++],A=u,x=s,N=f,E=a,S=c,O=p,q=l,C=d,P=h,_=v,I=b,M=m,k=y,L=g,T=j,U=w;for(i=0;i<8;i+=2)A^=(o=(k^=(o=(P^=(o=(S^=(o=A+k)<<7|o>>>25)+A)<<9|o>>>23)+S)<<13|o>>>19)+P)<<18|o>>>14,O^=(o=(x^=(o=(L^=(o=(_^=(o=O+x)<<7|o>>>25)+O)<<9|o>>>23)+_)<<13|o>>>19)+L)<<18|o>>>14,I^=(o=(q^=(o=(N^=(o=(T^=(o=I+q)<<7|o>>>25)+I)<<9|o>>>23)+T)<<13|o>>>19)+N)<<18|o>>>14,U^=(o=(M^=(o=(C^=(o=(E^=(o=U+M)<<7|o>>>25)+U)<<9|o>>>23)+E)<<13|o>>>19)+C)<<18|o>>>14,A^=(o=(E^=(o=(N^=(o=(x^=(o=A+E)<<7|o>>>25)+A)<<9|o>>>23)+x)<<13|o>>>19)+N)<<18|o>>>14,O^=(o=(S^=(o=(C^=(o=(q^=(o=O+S)<<7|o>>>25)+O)<<9|o>>>23)+q)<<13|o>>>19)+C)<<18|o>>>14,I^=(o=(_^=(o=(P^=(o=(M^=(o=I+_)<<7|o>>>25)+I)<<9|o>>>23)+M)<<13|o>>>19)+P)<<18|o>>>14,U^=(o=(T^=(o=(L^=(o=(k^=(o=U+T)<<7|o>>>25)+U)<<9|o>>>23)+k)<<13|o>>>19)+L)<<18|o>>>14;e[t++]=r[0]=A+u|0,e[t++]=r[1]=x+s|0,e[t++]=r[2]=N+f|0,e[t++]=r[3]=E+a|0,e[t++]=r[4]=S+c|0,e[t++]=r[5]=O+p|0,e[t++]=r[6]=q+l|0,e[t++]=r[7]=C+d|0,e[t++]=r[8]=P+h|0,e[t++]=r[9]=_+v|0,e[t++]=r[10]=I+b|0,e[t++]=r[11]=M+m|0,e[t++]=r[12]=k+y|0,e[t++]=r[13]=L+g|0,e[t++]=r[14]=T+j|0,e[t++]=r[15]=U+w|0}function j(r,e,n,t,o){for(;o--;)r[e++]=n[t++]}function w(r,e,n,t,o){for(;o--;)r[e++]^=n[t++]}function A(r,e,n,t,o){j(r,0,e,n+16*(2*o-1),16);for(var i=0;i<2*o;i+=2)g(r,e,n+16*i,t+8*i),g(r,e,n+16*i+16,t+8*i+16*o)}function x(r,e,n){return r[e+16*(2*n-1)]}function N(r){for(var e=[],n=0;n<r.length;n++){var t=r.charCodeAt(n);if(t<128)e.push(t);else if(t<2048)e.push(192|t>>6),e.push(128|63&t);else if(t<55296)e.push(224|t>>12),e.push(128|t>>6&63),e.push(128|63&t);else{if(n>=r.length-1)throw new Error("invalid string");n++,t=(1023&t)<<10,t|=1023&r.charCodeAt(n),t+=65536,e.push(240|t>>18),e.push(128|t>>12&63),e.push(128|t>>6&63),e.push(128|63&t)}}return e}if(l*d>=1<<30||l>p/128/d||l>p/256||c>p/128/l)return reject(new Error("scrypt: parameters are too large"));"string"==typeof f&&(f=N(f)),"string"==typeof a&&(a=N(a)),"undefined"!=typeof Int32Array?(n=new Int32Array(64*l),t=new Int32Array(32*c*l),s=new Int32Array(16)):(n=[],t=[],s=new Array(16)),i=y(f,a,128*d*l);var E=0,S=32*l;function O(r){for(var e=0;e<32*l;e++){var t=r+4*e;n[E+e]=(255&i[t+3])<<24|(255&i[t+2])<<16|(255&i[t+1])<<8|(255&i[t+0])<<0}}function q(r,e){for(var o=r;o<e;o+=2)j(t,o*(32*l),n,E,32*l),A(s,n,E,S,l),j(t,(o+1)*(32*l),n,S,32*l),A(s,n,S,E,l)}function C(r,e){for(var o=r;o<e;o+=2){var i=x(n,E,l)&c-1;w(n,E,t,i*(32*l),32*l),A(s,n,E,S,l),i=x(n,S,l)&c-1,w(n,S,t,i*(32*l),32*l),A(s,n,S,E,l)}}function P(r){for(var e=0;e<32*l;e++){var t=n[E+e];i[r+4*e+0]=t>>>0&255,i[r+4*e+1]=t>>>8&255,i[r+4*e+2]=t>>>16&255,i[r+4*e+3]=t>>>24&255}}var _=void 0!==o.a?o.a:setTimeout;function I(r,e,n,t,o){!function i(){_(function(){t(r,r+n<e?r+n:e),(r+=n)<e?i():o()})}()}function M(r){var e=y(f,i,h);return"base64"===r?function(r){for(var e,n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""),t=r.length,o=[],i=0;i<t;)e=((i<t?r[i++]:0)<<16)+((i<t?r[i++]:0)<<8)+(i<t?r[i++]:0),o.push(n[e>>>18&63]),o.push(n[e>>>12&63]),o.push(n[e>>>6&63]),o.push(n[e>>>0&63]);return t%3>0&&(o[o.length-1]="=",t%3==1&&(o[o.length-2]="=")),o.join("")}(e):"hex"===r?function(r){for(var e="0123456789abcdef".split(""),n=r.length,t=[],o=0;o<n;o++)t.push(e[r[o]>>>4&15]),t.push(e[r[o]>>>0&15]);return t.join("")}(e):"binary"===r?new Uint8Array(e):e}v<=0?function(){for(var r=0;r<d;r++)O(128*r*l),q(0,c),C(0,c),P(128*r*l);e(M(b))}():function r(n){O(128*n*l),I(0,c,2*v,q,function(){I(0,c,2*v,C,function(){P(128*n*l),n+1<d?_(function(){r(n+1)}):e(M(b))})})}(0)}var p=-1>>>0}])});
var __spreadArrays = (this && this.__spreadArrays) || function () {
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
for (var r = Array(s), k = 0, i = 0; i < il; i++)
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
r[k] = a[j];
return r;
};
Object.defineProperty(exports, "__esModule", { value: true });
/**
* scrypt(password, salt, options): Promise
*
* where
*
* password and salt are strings or arrays of bytes (Array of Uint8Array)
* options is
*
* {
* N: // CPU/memory cost parameter, must be power of two,
* // default = 16384
* // (alternatively, you can specify logN)
* r: // block size, default = 8
* p: // parallelization parameter, default = 1
* dkLen: // length of derived key, default = 32
* encoding: // optional encoding:
* "base64" - standard Base64 encoding
* "hex" — hex encoding,
* "binary" — Uint8Array,
* undefined/null - Array of bytes (default)
* interruptStep: // optional, steps to split calculations, default = 0
* }
*
* Derives a key from password and salt and fulfills Promise
* with derived key as the only argument.
*
* Calculations are interrupted with setImmediate (or zero setTimeout) at the
* given interruptSteps to avoid freezing the browser. If it's undefined or zero,
* the callback is called immediately after the calculation, avoiding setImmediate.
*
*/
function scrypt(password, salt, _a) {
var _b = _a === void 0 ? {} : _a, _c = _b.N, N = _c === void 0 ? 16384 : _c, logN = _b.logN, _d = _b.r, r = _d === void 0 ? 8 : _d, _e = _b.p, p = _e === void 0 ? 1 : _e, _f = _b.dkLen, dkLen = _f === void 0 ? 32 : _f, _g = _b.interruptStep, interruptStep = _g === void 0 ? 0 : _g, encoding = _b.encoding;
return new Promise(function (resolve, reject) {
if (!logN && !N) {
return reject(new Error("scrypt: missing N or logN parameter"));
}
if (logN || logN === 0) {
if (logN < 1 || logN > 31) {
return reject(new Error("scrypt: logN must be between 1 and 31"));
}
N = (1 << logN) >>> 0;
}
else {
if (N < 2 || N > MAX_UINT) {
return reject(new Error("scrypt: N is out of range"));
}
else if ((N & (N - 1)) !== 0) {
return reject(Error("scrypt: N is not a power of 2"));
}
}
if (p < 1) {
return reject(new Error("scrypt: invalid p"));
}
if (r < 1) {
return reject(new Error("scrypt: invalid r"));
}
run({ password: password, salt: salt, N: N, r: r, p: p, dkLen: dkLen, interruptStep: interruptStep, encoding: encoding }, resolve);
});
}
exports.default = scrypt;
// Internal scrypt function
function run(_a, callback) {
var password = _a.password, salt = _a.salt, N = _a.N, r = _a.r, p = _a.p, dkLen = _a.dkLen, interruptStep = _a.interruptStep, encoding = _a.encoding;
function SHA256(m) {
var K = [
0x428a2f98,
0x71374491,
0xb5c0fbcf,
0xe9b5dba5,
0x3956c25b,
0x59f111f1,
0x923f82a4,
0xab1c5ed5,
0xd807aa98,
0x12835b01,
0x243185be,
0x550c7dc3,
0x72be5d74,
0x80deb1fe,
0x9bdc06a7,
0xc19bf174,
0xe49b69c1,
0xefbe4786,
0x0fc19dc6,
0x240ca1cc,
0x2de92c6f,
0x4a7484aa,
0x5cb0a9dc,
0x76f988da,
0x983e5152,
0xa831c66d,
0xb00327c8,
0xbf597fc7,
0xc6e00bf3,
0xd5a79147,
0x06ca6351,
0x14292967,
0x27b70a85,
0x2e1b2138,
0x4d2c6dfc,
0x53380d13,
0x650a7354,
0x766a0abb,
0x81c2c92e,
0x92722c85,
0xa2bfe8a1,
0xa81a664b,
0xc24b8b70,
0xc76c51a3,
0xd192e819,
0xd6990624,
0xf40e3585,
0x106aa070,
0x19a4c116,
0x1e376c08,
0x2748774c,
0x34b0bcb5,
0x391c0cb3,
0x4ed8aa4a,
0x5b9cca4f,
0x682e6ff3,
0x748f82ee,
0x78a5636f,
0x84c87814,
0x8cc70208,
0x90befffa,
0xa4506ceb,
0xbef9a3f7,
0xc67178f2
];
var h0 = 0x6a09e667, h1 = 0xbb67ae85, h2 = 0x3c6ef372, h3 = 0xa54ff53a, h4 = 0x510e527f, h5 = 0x9b05688c, h6 = 0x1f83d9ab, h7 = 0x5be0cd19, w = new Array(64);
function blocks(p) {
var off = 0, len = p.length;
while (len >= 64) {
var a = h0, b = h1, c = h2, d = h3, e = h4, f = h5, g = h6, h = h7, u = void 0, i_1 = void 0, j = void 0, t1 = void 0, t2 = void 0;
for (i_1 = 0; i_1 < 16; i_1++) {
j = off + i_1 * 4;
w[i_1] =
((p[j] & 0xff) << 24) |
((p[j + 1] & 0xff) << 16) |
((p[j + 2] & 0xff) << 8) |
(p[j + 3] & 0xff);
}
for (i_1 = 16; i_1 < 64; i_1++) {
u = w[i_1 - 2];
t1 =
((u >>> 17) | (u << (32 - 17))) ^
((u >>> 19) | (u << (32 - 19))) ^
(u >>> 10);
u = w[i_1 - 15];
t2 =
((u >>> 7) | (u << (32 - 7))) ^
((u >>> 18) | (u << (32 - 18))) ^
(u >>> 3);
w[i_1] = (((t1 + w[i_1 - 7]) | 0) + ((t2 + w[i_1 - 16]) | 0)) | 0;
}
for (i_1 = 0; i_1 < 64; i_1++) {
t1 =
((((((e >>> 6) | (e << (32 - 6))) ^
((e >>> 11) | (e << (32 - 11))) ^
((e >>> 25) | (e << (32 - 25)))) +
((e & f) ^ (~e & g))) |
0) +
((h + ((K[i_1] + w[i_1]) | 0)) | 0)) |
0;
t2 =
((((a >>> 2) | (a << (32 - 2))) ^
((a >>> 13) | (a << (32 - 13))) ^
((a >>> 22) | (a << (32 - 22)))) +
((a & b) ^ (a & c) ^ (b & c))) |
0;
h = g;
g = f;
f = e;
e = (d + t1) | 0;
d = c;
c = b;
b = a;
a = (t1 + t2) | 0;
}
h0 = (h0 + a) | 0;
h1 = (h1 + b) | 0;
h2 = (h2 + c) | 0;
h3 = (h3 + d) | 0;
h4 = (h4 + e) | 0;
h5 = (h5 + f) | 0;
h6 = (h6 + g) | 0;
h7 = (h7 + h) | 0;
off += 64;
len -= 64;
}
}
blocks(m);
var i, bytesLeft = m.length % 64, bitLenHi = (m.length / 0x20000000) | 0, bitLenLo = m.length << 3, numZeros = bytesLeft < 56 ? 56 : 120, p = m.slice(m.length - bytesLeft, m.length);
p.push(0x80);
for (i = bytesLeft + 1; i < numZeros; i++)
p.push(0);
p.push((bitLenHi >>> 24) & 0xff);
p.push((bitLenHi >>> 16) & 0xff);
p.push((bitLenHi >>> 8) & 0xff);
p.push((bitLenHi >>> 0) & 0xff);
p.push((bitLenLo >>> 24) & 0xff);
p.push((bitLenLo >>> 16) & 0xff);
p.push((bitLenLo >>> 8) & 0xff);
p.push((bitLenLo >>> 0) & 0xff);
blocks(p);
return [
(h0 >>> 24) & 0xff,
(h0 >>> 16) & 0xff,
(h0 >>> 8) & 0xff,
(h0 >>> 0) & 0xff,
(h1 >>> 24) & 0xff,
(h1 >>> 16) & 0xff,
(h1 >>> 8) & 0xff,
(h1 >>> 0) & 0xff,
(h2 >>> 24) & 0xff,
(h2 >>> 16) & 0xff,
(h2 >>> 8) & 0xff,
(h2 >>> 0) & 0xff,
(h3 >>> 24) & 0xff,
(h3 >>> 16) & 0xff,
(h3 >>> 8) & 0xff,
(h3 >>> 0) & 0xff,
(h4 >>> 24) & 0xff,
(h4 >>> 16) & 0xff,
(h4 >>> 8) & 0xff,
(h4 >>> 0) & 0xff,
(h5 >>> 24) & 0xff,
(h5 >>> 16) & 0xff,
(h5 >>> 8) & 0xff,
(h5 >>> 0) & 0xff,
(h6 >>> 24) & 0xff,
(h6 >>> 16) & 0xff,
(h6 >>> 8) & 0xff,
(h6 >>> 0) & 0xff,
(h7 >>> 24) & 0xff,
(h7 >>> 16) & 0xff,
(h7 >>> 8) & 0xff,
(h7 >>> 0) & 0xff
];
}
function PBKDF2_HMAC_SHA256_OneIter(password, salt, dkLen) {
// compress password if it's longer than hash block length
if (password.length > 64) {
// coerces the structure into an array type if it lacks support for the .push operation
password = SHA256(password.push ? password : __spreadArrays(password));
}
var i, innerLen = 64 + salt.length + 4, inner = new Array(innerLen), outerKey = new Array(64), dk = [];
// inner = (password ^ ipad) || salt || counter
for (i = 0; i < 64; i++)
inner[i] = 0x36;
for (i = 0; i < password.length; i++)
inner[i] ^= password[i];
for (i = 0; i < salt.length; i++)
inner[64 + i] = salt[i];
for (i = innerLen - 4; i < innerLen; i++)
inner[i] = 0;
// outerKey = password ^ opad
for (i = 0; i < 64; i++)
outerKey[i] = 0x5c;
for (i = 0; i < password.length; i++)
outerKey[i] ^= password[i];
// increments counter inside inner
function incrementCounter() {
for (var i_2 = innerLen - 1; i_2 >= innerLen - 4; i_2--) {
inner[i_2]++;
if (inner[i_2] <= 0xff)
return;
inner[i_2] = 0;
}
}
// output blocks = SHA256(outerKey || SHA256(inner)) ...
while (dkLen >= 32) {
incrementCounter();
dk = dk.concat(SHA256(outerKey.concat(SHA256(inner))));
dkLen -= 32;
}
if (dkLen > 0) {
incrementCounter();
dk = dk.concat(SHA256(outerKey.concat(SHA256(inner))).slice(0, dkLen));
}
return dk;
}
function salsaXOR(tmp, B, bin, bout) {
var j0 = tmp[0] ^ B[bin++], j1 = tmp[1] ^ B[bin++], j2 = tmp[2] ^ B[bin++], j3 = tmp[3] ^ B[bin++], j4 = tmp[4] ^ B[bin++], j5 = tmp[5] ^ B[bin++], j6 = tmp[6] ^ B[bin++], j7 = tmp[7] ^ B[bin++], j8 = tmp[8] ^ B[bin++], j9 = tmp[9] ^ B[bin++], j10 = tmp[10] ^ B[bin++], j11 = tmp[11] ^ B[bin++], j12 = tmp[12] ^ B[bin++], j13 = tmp[13] ^ B[bin++], j14 = tmp[14] ^ B[bin++], j15 = tmp[15] ^ B[bin++], u, i;
var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7, x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14, x15 = j15;
for (i = 0; i < 8; i += 2) {
u = x0 + x12;
x4 ^= (u << 7) | (u >>> (32 - 7));
u = x4 + x0;
x8 ^= (u << 9) | (u >>> (32 - 9));
u = x8 + x4;
x12 ^= (u << 13) | (u >>> (32 - 13));
u = x12 + x8;
x0 ^= (u << 18) | (u >>> (32 - 18));
u = x5 + x1;
x9 ^= (u << 7) | (u >>> (32 - 7));
u = x9 + x5;
x13 ^= (u << 9) | (u >>> (32 - 9));
u = x13 + x9;
x1 ^= (u << 13) | (u >>> (32 - 13));
u = x1 + x13;
x5 ^= (u << 18) | (u >>> (32 - 18));
u = x10 + x6;
x14 ^= (u << 7) | (u >>> (32 - 7));
u = x14 + x10;
x2 ^= (u << 9) | (u >>> (32 - 9));
u = x2 + x14;
x6 ^= (u << 13) | (u >>> (32 - 13));
u = x6 + x2;
x10 ^= (u << 18) | (u >>> (32 - 18));
u = x15 + x11;
x3 ^= (u << 7) | (u >>> (32 - 7));
u = x3 + x15;
x7 ^= (u << 9) | (u >>> (32 - 9));
u = x7 + x3;
x11 ^= (u << 13) | (u >>> (32 - 13));
u = x11 + x7;
x15 ^= (u << 18) | (u >>> (32 - 18));
u = x0 + x3;
x1 ^= (u << 7) | (u >>> (32 - 7));
u = x1 + x0;
x2 ^= (u << 9) | (u >>> (32 - 9));
u = x2 + x1;
x3 ^= (u << 13) | (u >>> (32 - 13));
u = x3 + x2;
x0 ^= (u << 18) | (u >>> (32 - 18));
u = x5 + x4;
x6 ^= (u << 7) | (u >>> (32 - 7));
u = x6 + x5;
x7 ^= (u << 9) | (u >>> (32 - 9));
u = x7 + x6;
x4 ^= (u << 13) | (u >>> (32 - 13));
u = x4 + x7;
x5 ^= (u << 18) | (u >>> (32 - 18));
u = x10 + x9;
x11 ^= (u << 7) | (u >>> (32 - 7));
u = x11 + x10;
x8 ^= (u << 9) | (u >>> (32 - 9));
u = x8 + x11;
x9 ^= (u << 13) | (u >>> (32 - 13));
u = x9 + x8;
x10 ^= (u << 18) | (u >>> (32 - 18));
u = x15 + x14;
x12 ^= (u << 7) | (u >>> (32 - 7));
u = x12 + x15;
x13 ^= (u << 9) | (u >>> (32 - 9));
u = x13 + x12;
x14 ^= (u << 13) | (u >>> (32 - 13));
u = x14 + x13;
x15 ^= (u << 18) | (u >>> (32 - 18));
}
B[bout++] = tmp[0] = (x0 + j0) | 0;
B[bout++] = tmp[1] = (x1 + j1) | 0;
B[bout++] = tmp[2] = (x2 + j2) | 0;
B[bout++] = tmp[3] = (x3 + j3) | 0;
B[bout++] = tmp[4] = (x4 + j4) | 0;
B[bout++] = tmp[5] = (x5 + j5) | 0;
B[bout++] = tmp[6] = (x6 + j6) | 0;
B[bout++] = tmp[7] = (x7 + j7) | 0;
B[bout++] = tmp[8] = (x8 + j8) | 0;
B[bout++] = tmp[9] = (x9 + j9) | 0;
B[bout++] = tmp[10] = (x10 + j10) | 0;
B[bout++] = tmp[11] = (x11 + j11) | 0;
B[bout++] = tmp[12] = (x12 + j12) | 0;
B[bout++] = tmp[13] = (x13 + j13) | 0;
B[bout++] = tmp[14] = (x14 + j14) | 0;
B[bout++] = tmp[15] = (x15 + j15) | 0;
}
function blockCopy(dst, di, src, si, len) {
while (len--)
dst[di++] = src[si++];
}
function blockXOR(dst, di, src, si, len) {
while (len--)
dst[di++] ^= src[si++];
}
function blockMix(tmp, B, bin, bout, r) {
blockCopy(tmp, 0, B, bin + (2 * r - 1) * 16, 16);
for (var i = 0; i < 2 * r; i += 2) {
salsaXOR(tmp, B, bin + i * 16, bout + i * 8);
salsaXOR(tmp, B, bin + i * 16 + 16, bout + i * 8 + r * 16);
}
}
function integerify(B, bi, r) {
return B[bi + (2 * r - 1) * 16];
}
function stringToUTF8Bytes(s) {
var arr = [];
for (var i = 0; i < s.length; i++) {
var c = s.charCodeAt(i);
if (c < 0x80) {
arr.push(c);
}
else if (c < 0x800) {
arr.push(0xc0 | (c >> 6));
arr.push(0x80 | (c & 0x3f));
}
else if (c < 0xd800) {
arr.push(0xe0 | (c >> 12));
arr.push(0x80 | ((c >> 6) & 0x3f));
arr.push(0x80 | (c & 0x3f));
}
else {
if (i >= s.length - 1) {
throw new Error("invalid string");
}
i++; // get one more character
c = (c & 0x3ff) << 10;
c |= s.charCodeAt(i) & 0x3ff;
c += 0x10000;
arr.push(0xf0 | (c >> 18));
arr.push(0x80 | ((c >> 12) & 0x3f));
arr.push(0x80 | ((c >> 6) & 0x3f));
arr.push(0x80 | (c & 0x3f));
}
}
return arr;
}
function bytesToHex(p) {
var enc = "0123456789abcdef".split("");
var len = p.length, arr = [];
for (var i = 0; i < len; i++) {
arr.push(enc[(p[i] >>> 4) & 15]);
arr.push(enc[(p[i] >>> 0) & 15]);
}
return arr.join("");
}
function bytesToBase64(p) {
/** @const */
var enc = ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" + "0123456789+/").split("");
var len = p.length, arr = [];
var i = 0, a, b, c, t;
while (i < len) {
a = i < len ? p[i++] : 0;
b = i < len ? p[i++] : 0;
c = i < len ? p[i++] : 0;
t = (a << 16) + (b << 8) + c;
arr.push(enc[(t >>> (3 * 6)) & 63]);
arr.push(enc[(t >>> (2 * 6)) & 63]);
arr.push(enc[(t >>> (1 * 6)) & 63]);
arr.push(enc[(t >>> (0 * 6)) & 63]);
}
if (len % 3 > 0) {
arr[arr.length - 1] = "=";
if (len % 3 === 1)
arr[arr.length - 2] = "=";
}
return arr.join("");
}
var XY, V, B, tmp;
if (r * p >= 1 << 30 ||
r > MAX_UINT / 128 / p ||
r > MAX_UINT / 256 ||
N > MAX_UINT / 128 / r) {
throw new Error("scrypt: parameters are too large");
}
// Decode strings.
if (typeof password === "string")
password = stringToUTF8Bytes(password);
if (typeof salt === "string")
salt = stringToUTF8Bytes(salt);
if (typeof Int32Array !== "undefined") {
//XXX We can use Uint32Array, but Int32Array is faster in Safari.
XY = new Int32Array(64 * r);
V = new Int32Array(32 * N * r);
tmp = new Int32Array(16);
}
else {
XY = [];
V = [];
tmp = new Array(16);
}
B = PBKDF2_HMAC_SHA256_OneIter(password, salt, p * 128 * r);
var xi = 0, yi = 32 * r;
function smixStart(pos) {
for (var i = 0; i < 32 * r; i++) {
var j = pos + i * 4;
XY[xi + i] =
((B[j + 3] & 0xff) << 24) |
((B[j + 2] & 0xff) << 16) |
((B[j + 1] & 0xff) << 8) |
((B[j + 0] & 0xff) << 0);
}
}
function smixStep1(start, end) {
for (var i = start; i < end; i += 2) {
blockCopy(V, i * (32 * r), XY, xi, 32 * r);
blockMix(tmp, XY, xi, yi, r);
blockCopy(V, (i + 1) * (32 * r), XY, yi, 32 * r);
blockMix(tmp, XY, yi, xi, r);
}
}
function smixStep2(start, end) {
for (var i = start; i < end; i += 2) {
var j = integerify(XY, xi, r) & (N - 1);
blockXOR(XY, xi, V, j * (32 * r), 32 * r);
blockMix(tmp, XY, xi, yi, r);
j = integerify(XY, yi, r) & (N - 1);
blockXOR(XY, yi, V, j * (32 * r), 32 * r);
blockMix(tmp, XY, yi, xi, r);
}
}
function smixFinish(pos) {
for (var i = 0; i < 32 * r; i++) {
var j = XY[xi + i];
B[pos + i * 4 + 0] = (j >>> 0) & 0xff;
B[pos + i * 4 + 1] = (j >>> 8) & 0xff;
B[pos + i * 4 + 2] = (j >>> 16) & 0xff;
B[pos + i * 4 + 3] = (j >>> 24) & 0xff;
}
}
var nextTick =
// @ts-ignore
typeof setImmediate !== "undefined" ? setImmediate : setTimeout;
function interruptedFor(start, end, step, fn, donefn) {
(function performStep() {
nextTick(function () {
fn(start, start + step < end ? start + step : end);
start += step;
if (start < end)
performStep();
else
donefn();
});
})();
}
function getResult(enc) {
var result = PBKDF2_HMAC_SHA256_OneIter(password, B, dkLen);
if (enc === "base64")
return bytesToBase64(result);
else if (enc === "hex")
return bytesToHex(result);
else if (enc === "binary")
return new Uint8Array(result);
else
return result;
}
// Blocking variant.
function calculateSync() {
for (var i = 0; i < p; i++) {
smixStart(i * 128 * r);
smixStep1(0, N);
smixStep2(0, N);
smixFinish(i * 128 * r);
}
callback(getResult(encoding));
}
// Async variant.
function calculateAsync(i) {
smixStart(i * 128 * r);
interruptedFor(0, N, interruptStep * 2, smixStep1, function () {
interruptedFor(0, N, interruptStep * 2, smixStep2, function () {
smixFinish(i * 128 * r);
if (i + 1 < p) {
nextTick(function () {
calculateAsync(i + 1);
});
}
else {
callback(getResult(encoding));
}
});
});
}
if (interruptStep <= 0) {
calculateSync();
}
else {
calculateAsync(0);
}
}
var MAX_UINT = -1 >>> 0;
//# sourceMappingURL=index.js.map

73

package.json
{
"name": "scrypt-async-modern",
"version": "3.0.7",
"description": "Fast \"async\" scrypt implementation in modern JavaScript.",
"main": "dist/index.js",
"scripts": {
"watch": "noderize-scripts watch",
"build": "noderize-scripts build",
"start": "noderize-scripts start",
"format": "noderize-scripts format",
"test": "noderize-scripts test",
"clean": "noderize-scripts clean",
"prepack": "noderize-scripts clean && noderize-scripts build --env production"
},
"devDependencies": {
"@noderize/scripts": "^0.7.5"
},
"repository": {
"type": "git",
"url": "https://github.com/Cretezy/scrypt-async-modern.git"
},
"keywords": [
"crypto",
"cryptography",
"scrypt",
"password"
],
"author": "Charles Crete <charles@cretezy.com>",
"license": "MIT",
"bugs": {
"url": "https://github.com/Cretezy/scrypt-async-modern/issues"
},
"homepage": "https://github.com/Cretezy/scrypt-async-modern",
"prettier": {
"useTabs": true
},
"dependencies": {
"@noderize/runtime": "^0.7.5"
}
"name": "scrypt-async-modern",
"version": "3.0.8",
"description": "Fast \"async\" scrypt implementation in modern JavaScript.",
"keywords": [
"crypto",
"cryptography",
"scrypt",
"password"
],
"homepage": "https://github.com/Cretezy/scrypt-async-modern",
"bugs": {
"url": "https://github.com/Cretezy/scrypt-async-modern/issues"
},
"repository": {
"type": "git",
"url": "https://github.com/Cretezy/scrypt-async-modern.git"
},
"license": "MIT",
"author": "Charles Crete <charles@cretezy.com>",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"scripts": {
"build": "tsc",
"format": "prettier --write src",
"prepack": "rimraf dist && npm run build",
"test": "jest"
},
"devDependencies": {
"@types/jest": "^24.0.25",
"jest": "^24.9.0",
"prettier": "^1.19.1",
"rimraf": "^3.0.0",
"ts-jest": "^24.2.0",
"typescript": "^3.7.4"
}
}

@@ -1,2 +0,2 @@

# scrypt-async-modern [![Build Status](https://travis-ci.org/Cretezy/scrypt-async-modern.svg?branch=master)](https://travis-ci.org/Cretezy/scrypt-async-modern) [![npm version](http://img.shields.io/npm/v/scrypt-async-modern.svg?style=flat)](https://www.npmjs.org/package/scrypt-async-modern)
# scrypt-async-modern [![npm version](http://img.shields.io/npm/v/scrypt-async-modern.svg?style=flat)](https://www.npmjs.org/package/scrypt-async-modern)

@@ -9,3 +9,2 @@ Fast "async" scrypt implementation in modern JavaScript.

## Installation

@@ -35,18 +34,17 @@

### Arguments
* `password`: `string` or `Array` of bytes or `Uint8Array`
* `salt`: `string` or `Array` of bytes or `Uint8Array`
* `options`: object with key derivation options (see below)
- `password`: `string` or `Array` of bytes or `Uint8Array`
- `salt`: `string` or `Array` of bytes or `Uint8Array`
- `options`: object with key derivation options (see below)
#### Options:
* `N`: CPU/memory cost parameter, must be power of two (default = 16384),
alternatively you can specify `logN` where *N = 2^logN*
* `r`: block size parameter (default = 8)
* `p`: parallelization parameter (default = 1)
* `dkLen`: derived key length (default = 32)
* `interruptStep`: (optional) the amount of loop cycles to execute before the next setImmediate/setTimeout (defaults = 0)
* `encoding`: (optional) result encoding `'base64'` or `'hex'` (result will be a `string`), `'binary'` (result will be a `Uint8Array`) or undefined (result will be an `Array` of bytes, default).
- `N`: CPU/memory cost parameter, must be power of two (default = 16384),
alternatively you can specify `logN` where _N = 2^logN_
- `r`: block size parameter (default = 8)
- `p`: parallelization parameter (default = 1)
- `dkLen`: derived key length (default = 32)
- `interruptStep`: (optional) the amount of loop cycles to execute before the next setImmediate/setTimeout (defaults = 0)
- `encoding`: (optional) result encoding `'base64'` or `'hex'` (result will be a `string`), `'binary'` (result will be a `Uint8Array`) or undefined (result will be an `Array` of bytes, default).

@@ -56,8 +54,8 @@ ### Example:

```javascript
const derivedKey = await scrypt('mypassword', 'saltysalt', {
N: 16384,
r: 8,
p: 1,
dkLen: 16,
encoding: 'hex'
const derivedKey = await scrypt("mypassword", "saltysalt", {
N: 16384,
r: 8,
p: 1,
dkLen: 16,
encoding: "hex"
});

@@ -64,0 +62,0 @@

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc