{"id":"node_modules/scryptsy/lib/utils.js","dependencies":[{"name":"/Users/pa/Js_workspace/eth-merkle-bridge-js/example/package.json","includedInParent":true,"mtime":1573802285913},{"name":"/Users/pa/Js_workspace/eth-merkle-bridge-js/.babelrc","includedInParent":true,"mtime":1571296685108},{"name":"/Users/pa/Js_workspace/eth-merkle-bridge-js/example/node_modules/scryptsy/package.json","includedInParent":true,"mtime":1573797081594},{"name":"crypto","loc":{"line":1,"column":23},"parent":"/Users/pa/Js_workspace/eth-merkle-bridge-js/example/node_modules/scryptsy/lib/utils.js","resolved":"/Users/pa/Js_workspace/eth-merkle-bridge-js/example/node_modules/crypto-browserify/index.js"},{"name":"buffer","parent":"/Users/pa/Js_workspace/eth-merkle-bridge-js/example/node_modules/scryptsy/lib/utils.js","resolved":"/Users/pa/Js_workspace/eth-merkle-bridge-js/example/node_modules/buffer/index.js"}],"generated":{"js":"var Buffer = require(\"buffer\").Buffer;\nconst crypto = require('crypto')\nconst MAX_VALUE = 0x7fffffff\nconst DEFAULT_PROMISE_INTERVAL = 5000\n/* eslint-disable camelcase */\n\nfunction checkAndInit (key, salt, N, r, p, dkLen, progressCallback) {\n  if (N === 0 || (N & (N - 1)) !== 0) throw Error('N must be > 0 and a power of 2')\n\n  if (N > MAX_VALUE / 128 / r) throw Error('Parameter N is too large')\n  if (r > MAX_VALUE / 128 / p) throw Error('Parameter r is too large')\n\n  let XY = Buffer.alloc(256 * r)\n  let V = Buffer.alloc(128 * r * N)\n\n  // pseudo global\n  let B32 = new Int32Array(16) // salsa20_8\n  let x = new Int32Array(16) // salsa20_8\n  let _X = Buffer.alloc(64) // blockmix_salsa8\n\n  // pseudo global\n  let B = crypto.pbkdf2Sync(key, salt, 1, p * 128 * r, 'sha256')\n\n  let tickCallback\n  if (progressCallback) {\n    let totalOps = p * N * 2\n    let currentOp = 0\n\n    tickCallback = function () {\n      ++currentOp\n\n      // send progress notifications once every 1,000 ops\n      if (currentOp % 1000 === 0) {\n        progressCallback({\n          current: currentOp,\n          total: totalOps,\n          percent: (currentOp / totalOps) * 100.0\n        })\n      }\n    }\n  }\n  return {\n    XY,\n    V,\n    B32,\n    x,\n    _X,\n    B,\n    tickCallback\n  }\n}\n\nasync function smix (B, Bi, r, N, V, XY, _X, B32, x, tickCallback, promiseInterval) {\n  promiseInterval = promiseInterval || DEFAULT_PROMISE_INTERVAL\n  let Xi = 0\n  let Yi = 128 * r\n  let i\n\n  B.copy(XY, Xi, Bi, Bi + Yi)\n\n  for (i = 0; i < N; i++) {\n    XY.copy(V, i * Yi, Xi, Xi + Yi)\n    if (i % promiseInterval === 0) {\n      await new Promise(resolve => setImmediate(resolve))\n    }\n    blockmix_salsa8(XY, Xi, Yi, r, _X, B32, x)\n\n    if (tickCallback) tickCallback()\n  }\n\n  for (i = 0; i < N; i++) {\n    let offset = Xi + (2 * r - 1) * 64\n    let j = XY.readUInt32LE(offset) & (N - 1)\n    blockxor(V, j * Yi, XY, Xi, Yi)\n    if (i % promiseInterval === 0) {\n      await new Promise(resolve => setImmediate(resolve))\n    }\n    blockmix_salsa8(XY, Xi, Yi, r, _X, B32, x)\n\n    if (tickCallback) tickCallback()\n  }\n\n  XY.copy(B, Bi, Xi, Xi + Yi)\n}\n\nfunction smixSync (B, Bi, r, N, V, XY, _X, B32, x, tickCallback) {\n  let Xi = 0\n  let Yi = 128 * r\n  let i\n\n  B.copy(XY, Xi, Bi, Bi + Yi)\n\n  for (i = 0; i < N; i++) {\n    XY.copy(V, i * Yi, Xi, Xi + Yi)\n    blockmix_salsa8(XY, Xi, Yi, r, _X, B32, x)\n\n    if (tickCallback) tickCallback()\n  }\n\n  for (i = 0; i < N; i++) {\n    let offset = Xi + (2 * r - 1) * 64\n    let j = XY.readUInt32LE(offset) & (N - 1)\n    blockxor(V, j * Yi, XY, Xi, Yi)\n    blockmix_salsa8(XY, Xi, Yi, r, _X, B32, x)\n\n    if (tickCallback) tickCallback()\n  }\n\n  XY.copy(B, Bi, Xi, Xi + Yi)\n}\n\nfunction blockmix_salsa8 (BY, Bi, Yi, r, _X, B32, x) {\n  let i\n\n  arraycopy(BY, Bi + (2 * r - 1) * 64, _X, 0, 64)\n\n  for (i = 0; i < 2 * r; i++) {\n    blockxor(BY, i * 64, _X, 0, 64)\n    salsa20_8(_X, B32, x)\n    arraycopy(_X, 0, BY, Yi + (i * 64), 64)\n  }\n\n  for (i = 0; i < r; i++) {\n    arraycopy(BY, Yi + (i * 2) * 64, BY, Bi + (i * 64), 64)\n  }\n\n  for (i = 0; i < r; i++) {\n    arraycopy(BY, Yi + (i * 2 + 1) * 64, BY, Bi + (i + r) * 64, 64)\n  }\n}\n\nfunction R (a, b) {\n  return (a << b) | (a >>> (32 - b))\n}\n\nfunction salsa20_8 (B, B32, x) {\n  let i\n\n  for (i = 0; i < 16; i++) {\n    B32[i] = (B[i * 4 + 0] & 0xff) << 0\n    B32[i] |= (B[i * 4 + 1] & 0xff) << 8\n    B32[i] |= (B[i * 4 + 2] & 0xff) << 16\n    B32[i] |= (B[i * 4 + 3] & 0xff) << 24\n    // B32[i] = B.readUInt32LE(i*4)   <--- this is signficantly slower even in Node.js\n  }\n\n  arraycopy(B32, 0, x, 0, 16)\n\n  for (i = 8; i > 0; i -= 2) {\n    x[4] ^= R(x[0] + x[12], 7)\n    x[8] ^= R(x[4] + x[0], 9)\n    x[12] ^= R(x[8] + x[4], 13)\n    x[0] ^= R(x[12] + x[8], 18)\n    x[9] ^= R(x[5] + x[1], 7)\n    x[13] ^= R(x[9] + x[5], 9)\n    x[1] ^= R(x[13] + x[9], 13)\n    x[5] ^= R(x[1] + x[13], 18)\n    x[14] ^= R(x[10] + x[6], 7)\n    x[2] ^= R(x[14] + x[10], 9)\n    x[6] ^= R(x[2] + x[14], 13)\n    x[10] ^= R(x[6] + x[2], 18)\n    x[3] ^= R(x[15] + x[11], 7)\n    x[7] ^= R(x[3] + x[15], 9)\n    x[11] ^= R(x[7] + x[3], 13)\n    x[15] ^= R(x[11] + x[7], 18)\n    x[1] ^= R(x[0] + x[3], 7)\n    x[2] ^= R(x[1] + x[0], 9)\n    x[3] ^= R(x[2] + x[1], 13)\n    x[0] ^= R(x[3] + x[2], 18)\n    x[6] ^= R(x[5] + x[4], 7)\n    x[7] ^= R(x[6] + x[5], 9)\n    x[4] ^= R(x[7] + x[6], 13)\n    x[5] ^= R(x[4] + x[7], 18)\n    x[11] ^= R(x[10] + x[9], 7)\n    x[8] ^= R(x[11] + x[10], 9)\n    x[9] ^= R(x[8] + x[11], 13)\n    x[10] ^= R(x[9] + x[8], 18)\n    x[12] ^= R(x[15] + x[14], 7)\n    x[13] ^= R(x[12] + x[15], 9)\n    x[14] ^= R(x[13] + x[12], 13)\n    x[15] ^= R(x[14] + x[13], 18)\n  }\n\n  for (i = 0; i < 16; ++i) B32[i] = x[i] + B32[i]\n\n  for (i = 0; i < 16; i++) {\n    let bi = i * 4\n    B[bi + 0] = (B32[i] >> 0 & 0xff)\n    B[bi + 1] = (B32[i] >> 8 & 0xff)\n    B[bi + 2] = (B32[i] >> 16 & 0xff)\n    B[bi + 3] = (B32[i] >> 24 & 0xff)\n    // B.writeInt32LE(B32[i], i*4)  //<--- this is signficantly slower even in Node.js\n  }\n}\n\n// naive approach... going back to loop unrolling may yield additional performance\nfunction blockxor (S, Si, D, Di, len) {\n  for (let i = 0; i < len; i++) {\n    D[Di + i] ^= S[Si + i]\n  }\n}\n\nfunction arraycopy (src, srcPos, dest, destPos, length) {\n  if (Buffer.isBuffer(src) && Buffer.isBuffer(dest)) {\n    src.copy(dest, destPos, srcPos, srcPos + length)\n  } else {\n    while (length--) {\n      dest[destPos++] = src[srcPos++]\n    }\n  }\n}\n\nmodule.exports = {\n  checkAndInit,\n  smix,\n  smixSync\n}\n"},"sourceMaps":{"js":{"mappings":[{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":1,"column":0},"generated":{"line":2,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":2,"column":0},"generated":{"line":3,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":3,"column":0},"generated":{"line":4,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":4,"column":0},"generated":{"line":5,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":5,"column":0},"generated":{"line":6,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":6,"column":0},"generated":{"line":7,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":7,"column":0},"generated":{"line":8,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":8,"column":0},"generated":{"line":9,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":9,"column":0},"generated":{"line":10,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":10,"column":0},"generated":{"line":11,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":11,"column":0},"generated":{"line":12,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":12,"column":0},"generated":{"line":13,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":13,"column":0},"generated":{"line":14,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":14,"column":0},"generated":{"line":15,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":15,"column":0},"generated":{"line":16,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":16,"column":0},"generated":{"line":17,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":17,"column":0},"generated":{"line":18,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":18,"column":0},"generated":{"line":19,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":19,"column":0},"generated":{"line":20,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":20,"column":0},"generated":{"line":21,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":21,"column":0},"generated":{"line":22,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":22,"column":0},"generated":{"line":23,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":23,"column":0},"generated":{"line":24,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":24,"column":0},"generated":{"line":25,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":25,"column":0},"generated":{"line":26,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":26,"column":0},"generated":{"line":27,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":27,"column":0},"generated":{"line":28,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":28,"column":0},"generated":{"line":29,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":29,"column":0},"generated":{"line":30,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":30,"column":0},"generated":{"line":31,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":31,"column":0},"generated":{"line":32,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":32,"column":0},"generated":{"line":33,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":33,"column":0},"generated":{"line":34,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":34,"column":0},"generated":{"line":35,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":35,"column":0},"generated":{"line":36,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":36,"column":0},"generated":{"line":37,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":37,"column":0},"generated":{"line":38,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":38,"column":0},"generated":{"line":39,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":39,"column":0},"generated":{"line":40,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":40,"column":0},"generated":{"line":41,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":41,"column":0},"generated":{"line":42,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":42,"column":0},"generated":{"line":43,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":43,"column":0},"generated":{"line":44,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":44,"column":0},"generated":{"line":45,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":45,"column":0},"generated":{"line":46,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":46,"column":0},"generated":{"line":47,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":47,"column":0},"generated":{"line":48,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":48,"column":0},"generated":{"line":49,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":49,"column":0},"generated":{"line":50,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":50,"column":0},"generated":{"line":51,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":51,"column":0},"generated":{"line":52,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":52,"column":0},"generated":{"line":53,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":53,"column":0},"generated":{"line":54,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":54,"column":0},"generated":{"line":55,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":55,"column":0},"generated":{"line":56,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":56,"column":0},"generated":{"line":57,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":57,"column":0},"generated":{"line":58,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":58,"column":0},"generated":{"line":59,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":59,"column":0},"generated":{"line":60,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":60,"column":0},"generated":{"line":61,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":61,"column":0},"generated":{"line":62,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":62,"column":0},"generated":{"line":63,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":63,"column":0},"generated":{"line":64,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":64,"column":0},"generated":{"line":65,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":65,"column":0},"generated":{"line":66,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":66,"column":0},"generated":{"line":67,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":67,"column":0},"generated":{"line":68,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":68,"column":0},"generated":{"line":69,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":69,"column":0},"generated":{"line":70,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":70,"column":0},"generated":{"line":71,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":71,"column":0},"generated":{"line":72,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":72,"column":0},"generated":{"line":73,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":73,"column":0},"generated":{"line":74,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":74,"column":0},"generated":{"line":75,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":75,"column":0},"generated":{"line":76,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":76,"column":0},"generated":{"line":77,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":77,"column":0},"generated":{"line":78,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":78,"column":0},"generated":{"line":79,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":79,"column":0},"generated":{"line":80,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":80,"column":0},"generated":{"line":81,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":81,"column":0},"generated":{"line":82,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":82,"column":0},"generated":{"line":83,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":83,"column":0},"generated":{"line":84,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":84,"column":0},"generated":{"line":85,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":85,"column":0},"generated":{"line":86,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":86,"column":0},"generated":{"line":87,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":87,"column":0},"generated":{"line":88,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":88,"column":0},"generated":{"line":89,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":89,"column":0},"generated":{"line":90,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":90,"column":0},"generated":{"line":91,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":91,"column":0},"generated":{"line":92,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":92,"column":0},"generated":{"line":93,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":93,"column":0},"generated":{"line":94,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":94,"column":0},"generated":{"line":95,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":95,"column":0},"generated":{"line":96,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":96,"column":0},"generated":{"line":97,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":97,"column":0},"generated":{"line":98,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":98,"column":0},"generated":{"line":99,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":99,"column":0},"generated":{"line":100,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":100,"column":0},"generated":{"line":101,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":101,"column":0},"generated":{"line":102,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":102,"column":0},"generated":{"line":103,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":103,"column":0},"generated":{"line":104,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":104,"column":0},"generated":{"line":105,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":105,"column":0},"generated":{"line":106,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":106,"column":0},"generated":{"line":107,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":107,"column":0},"generated":{"line":108,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":108,"column":0},"generated":{"line":109,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":109,"column":0},"generated":{"line":110,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":110,"column":0},"generated":{"line":111,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":111,"column":0},"generated":{"line":112,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":112,"column":0},"generated":{"line":113,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":113,"column":0},"generated":{"line":114,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":114,"column":0},"generated":{"line":115,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":115,"column":0},"generated":{"line":116,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":116,"column":0},"generated":{"line":117,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":117,"column":0},"generated":{"line":118,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":118,"column":0},"generated":{"line":119,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":119,"column":0},"generated":{"line":120,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":120,"column":0},"generated":{"line":121,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":121,"column":0},"generated":{"line":122,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":122,"column":0},"generated":{"line":123,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":123,"column":0},"generated":{"line":124,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":124,"column":0},"generated":{"line":125,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":125,"column":0},"generated":{"line":126,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":126,"column":0},"generated":{"line":127,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":127,"column":0},"generated":{"line":128,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":128,"column":0},"generated":{"line":129,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":129,"column":0},"generated":{"line":130,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":130,"column":0},"generated":{"line":131,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":131,"column":0},"generated":{"line":132,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":132,"column":0},"generated":{"line":133,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":133,"column":0},"generated":{"line":134,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":134,"column":0},"generated":{"line":135,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":135,"column":0},"generated":{"line":136,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":136,"column":0},"generated":{"line":137,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":137,"column":0},"generated":{"line":138,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":138,"column":0},"generated":{"line":139,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":139,"column":0},"generated":{"line":140,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":140,"column":0},"generated":{"line":141,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":141,"column":0},"generated":{"line":142,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":142,"column":0},"generated":{"line":143,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":143,"column":0},"generated":{"line":144,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":144,"column":0},"generated":{"line":145,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":145,"column":0},"generated":{"line":146,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":146,"column":0},"generated":{"line":147,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":147,"column":0},"generated":{"line":148,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":148,"column":0},"generated":{"line":149,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":149,"column":0},"generated":{"line":150,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":150,"column":0},"generated":{"line":151,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":151,"column":0},"generated":{"line":152,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":152,"column":0},"generated":{"line":153,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":153,"column":0},"generated":{"line":154,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":154,"column":0},"generated":{"line":155,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":155,"column":0},"generated":{"line":156,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":156,"column":0},"generated":{"line":157,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":157,"column":0},"generated":{"line":158,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":158,"column":0},"generated":{"line":159,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":159,"column":0},"generated":{"line":160,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":160,"column":0},"generated":{"line":161,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":161,"column":0},"generated":{"line":162,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":162,"column":0},"generated":{"line":163,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":163,"column":0},"generated":{"line":164,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":164,"column":0},"generated":{"line":165,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":165,"column":0},"generated":{"line":166,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":166,"column":0},"generated":{"line":167,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":167,"column":0},"generated":{"line":168,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":168,"column":0},"generated":{"line":169,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":169,"column":0},"generated":{"line":170,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":170,"column":0},"generated":{"line":171,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":171,"column":0},"generated":{"line":172,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":172,"column":0},"generated":{"line":173,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":173,"column":0},"generated":{"line":174,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":174,"column":0},"generated":{"line":175,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":175,"column":0},"generated":{"line":176,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":176,"column":0},"generated":{"line":177,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":177,"column":0},"generated":{"line":178,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":178,"column":0},"generated":{"line":179,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":179,"column":0},"generated":{"line":180,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":180,"column":0},"generated":{"line":181,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":181,"column":0},"generated":{"line":182,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":182,"column":0},"generated":{"line":183,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":183,"column":0},"generated":{"line":184,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":184,"column":0},"generated":{"line":185,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":185,"column":0},"generated":{"line":186,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":186,"column":0},"generated":{"line":187,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":187,"column":0},"generated":{"line":188,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":188,"column":0},"generated":{"line":189,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":189,"column":0},"generated":{"line":190,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":190,"column":0},"generated":{"line":191,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":191,"column":0},"generated":{"line":192,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":192,"column":0},"generated":{"line":193,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":193,"column":0},"generated":{"line":194,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":194,"column":0},"generated":{"line":195,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":195,"column":0},"generated":{"line":196,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":196,"column":0},"generated":{"line":197,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":197,"column":0},"generated":{"line":198,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":198,"column":0},"generated":{"line":199,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":199,"column":0},"generated":{"line":200,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":200,"column":0},"generated":{"line":201,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":201,"column":0},"generated":{"line":202,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":202,"column":0},"generated":{"line":203,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":203,"column":0},"generated":{"line":204,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":204,"column":0},"generated":{"line":205,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":205,"column":0},"generated":{"line":206,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":206,"column":0},"generated":{"line":207,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":207,"column":0},"generated":{"line":208,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":208,"column":0},"generated":{"line":209,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":209,"column":0},"generated":{"line":210,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":210,"column":0},"generated":{"line":211,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":211,"column":0},"generated":{"line":212,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":212,"column":0},"generated":{"line":213,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":213,"column":0},"generated":{"line":214,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":214,"column":0},"generated":{"line":215,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":215,"column":0},"generated":{"line":216,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":216,"column":0},"generated":{"line":217,"column":0}},{"source":"node_modules/scryptsy/lib/utils.js","original":{"line":217,"column":0},"generated":{"line":218,"column":0}}],"sources":{"node_modules/scryptsy/lib/utils.js":"const crypto = require('crypto')\nconst MAX_VALUE = 0x7fffffff\nconst DEFAULT_PROMISE_INTERVAL = 5000\n/* eslint-disable camelcase */\n\nfunction checkAndInit (key, salt, N, r, p, dkLen, progressCallback) {\n  if (N === 0 || (N & (N - 1)) !== 0) throw Error('N must be > 0 and a power of 2')\n\n  if (N > MAX_VALUE / 128 / r) throw Error('Parameter N is too large')\n  if (r > MAX_VALUE / 128 / p) throw Error('Parameter r is too large')\n\n  let XY = Buffer.alloc(256 * r)\n  let V = Buffer.alloc(128 * r * N)\n\n  // pseudo global\n  let B32 = new Int32Array(16) // salsa20_8\n  let x = new Int32Array(16) // salsa20_8\n  let _X = Buffer.alloc(64) // blockmix_salsa8\n\n  // pseudo global\n  let B = crypto.pbkdf2Sync(key, salt, 1, p * 128 * r, 'sha256')\n\n  let tickCallback\n  if (progressCallback) {\n    let totalOps = p * N * 2\n    let currentOp = 0\n\n    tickCallback = function () {\n      ++currentOp\n\n      // send progress notifications once every 1,000 ops\n      if (currentOp % 1000 === 0) {\n        progressCallback({\n          current: currentOp,\n          total: totalOps,\n          percent: (currentOp / totalOps) * 100.0\n        })\n      }\n    }\n  }\n  return {\n    XY,\n    V,\n    B32,\n    x,\n    _X,\n    B,\n    tickCallback\n  }\n}\n\nasync function smix (B, Bi, r, N, V, XY, _X, B32, x, tickCallback, promiseInterval) {\n  promiseInterval = promiseInterval || DEFAULT_PROMISE_INTERVAL\n  let Xi = 0\n  let Yi = 128 * r\n  let i\n\n  B.copy(XY, Xi, Bi, Bi + Yi)\n\n  for (i = 0; i < N; i++) {\n    XY.copy(V, i * Yi, Xi, Xi + Yi)\n    if (i % promiseInterval === 0) {\n      await new Promise(resolve => setImmediate(resolve))\n    }\n    blockmix_salsa8(XY, Xi, Yi, r, _X, B32, x)\n\n    if (tickCallback) tickCallback()\n  }\n\n  for (i = 0; i < N; i++) {\n    let offset = Xi + (2 * r - 1) * 64\n    let j = XY.readUInt32LE(offset) & (N - 1)\n    blockxor(V, j * Yi, XY, Xi, Yi)\n    if (i % promiseInterval === 0) {\n      await new Promise(resolve => setImmediate(resolve))\n    }\n    blockmix_salsa8(XY, Xi, Yi, r, _X, B32, x)\n\n    if (tickCallback) tickCallback()\n  }\n\n  XY.copy(B, Bi, Xi, Xi + Yi)\n}\n\nfunction smixSync (B, Bi, r, N, V, XY, _X, B32, x, tickCallback) {\n  let Xi = 0\n  let Yi = 128 * r\n  let i\n\n  B.copy(XY, Xi, Bi, Bi + Yi)\n\n  for (i = 0; i < N; i++) {\n    XY.copy(V, i * Yi, Xi, Xi + Yi)\n    blockmix_salsa8(XY, Xi, Yi, r, _X, B32, x)\n\n    if (tickCallback) tickCallback()\n  }\n\n  for (i = 0; i < N; i++) {\n    let offset = Xi + (2 * r - 1) * 64\n    let j = XY.readUInt32LE(offset) & (N - 1)\n    blockxor(V, j * Yi, XY, Xi, Yi)\n    blockmix_salsa8(XY, Xi, Yi, r, _X, B32, x)\n\n    if (tickCallback) tickCallback()\n  }\n\n  XY.copy(B, Bi, Xi, Xi + Yi)\n}\n\nfunction blockmix_salsa8 (BY, Bi, Yi, r, _X, B32, x) {\n  let i\n\n  arraycopy(BY, Bi + (2 * r - 1) * 64, _X, 0, 64)\n\n  for (i = 0; i < 2 * r; i++) {\n    blockxor(BY, i * 64, _X, 0, 64)\n    salsa20_8(_X, B32, x)\n    arraycopy(_X, 0, BY, Yi + (i * 64), 64)\n  }\n\n  for (i = 0; i < r; i++) {\n    arraycopy(BY, Yi + (i * 2) * 64, BY, Bi + (i * 64), 64)\n  }\n\n  for (i = 0; i < r; i++) {\n    arraycopy(BY, Yi + (i * 2 + 1) * 64, BY, Bi + (i + r) * 64, 64)\n  }\n}\n\nfunction R (a, b) {\n  return (a << b) | (a >>> (32 - b))\n}\n\nfunction salsa20_8 (B, B32, x) {\n  let i\n\n  for (i = 0; i < 16; i++) {\n    B32[i] = (B[i * 4 + 0] & 0xff) << 0\n    B32[i] |= (B[i * 4 + 1] & 0xff) << 8\n    B32[i] |= (B[i * 4 + 2] & 0xff) << 16\n    B32[i] |= (B[i * 4 + 3] & 0xff) << 24\n    // B32[i] = B.readUInt32LE(i*4)   <--- this is signficantly slower even in Node.js\n  }\n\n  arraycopy(B32, 0, x, 0, 16)\n\n  for (i = 8; i > 0; i -= 2) {\n    x[4] ^= R(x[0] + x[12], 7)\n    x[8] ^= R(x[4] + x[0], 9)\n    x[12] ^= R(x[8] + x[4], 13)\n    x[0] ^= R(x[12] + x[8], 18)\n    x[9] ^= R(x[5] + x[1], 7)\n    x[13] ^= R(x[9] + x[5], 9)\n    x[1] ^= R(x[13] + x[9], 13)\n    x[5] ^= R(x[1] + x[13], 18)\n    x[14] ^= R(x[10] + x[6], 7)\n    x[2] ^= R(x[14] + x[10], 9)\n    x[6] ^= R(x[2] + x[14], 13)\n    x[10] ^= R(x[6] + x[2], 18)\n    x[3] ^= R(x[15] + x[11], 7)\n    x[7] ^= R(x[3] + x[15], 9)\n    x[11] ^= R(x[7] + x[3], 13)\n    x[15] ^= R(x[11] + x[7], 18)\n    x[1] ^= R(x[0] + x[3], 7)\n    x[2] ^= R(x[1] + x[0], 9)\n    x[3] ^= R(x[2] + x[1], 13)\n    x[0] ^= R(x[3] + x[2], 18)\n    x[6] ^= R(x[5] + x[4], 7)\n    x[7] ^= R(x[6] + x[5], 9)\n    x[4] ^= R(x[7] + x[6], 13)\n    x[5] ^= R(x[4] + x[7], 18)\n    x[11] ^= R(x[10] + x[9], 7)\n    x[8] ^= R(x[11] + x[10], 9)\n    x[9] ^= R(x[8] + x[11], 13)\n    x[10] ^= R(x[9] + x[8], 18)\n    x[12] ^= R(x[15] + x[14], 7)\n    x[13] ^= R(x[12] + x[15], 9)\n    x[14] ^= R(x[13] + x[12], 13)\n    x[15] ^= R(x[14] + x[13], 18)\n  }\n\n  for (i = 0; i < 16; ++i) B32[i] = x[i] + B32[i]\n\n  for (i = 0; i < 16; i++) {\n    let bi = i * 4\n    B[bi + 0] = (B32[i] >> 0 & 0xff)\n    B[bi + 1] = (B32[i] >> 8 & 0xff)\n    B[bi + 2] = (B32[i] >> 16 & 0xff)\n    B[bi + 3] = (B32[i] >> 24 & 0xff)\n    // B.writeInt32LE(B32[i], i*4)  //<--- this is signficantly slower even in Node.js\n  }\n}\n\n// naive approach... going back to loop unrolling may yield additional performance\nfunction blockxor (S, Si, D, Di, len) {\n  for (let i = 0; i < len; i++) {\n    D[Di + i] ^= S[Si + i]\n  }\n}\n\nfunction arraycopy (src, srcPos, dest, destPos, length) {\n  if (Buffer.isBuffer(src) && Buffer.isBuffer(dest)) {\n    src.copy(dest, destPos, srcPos, srcPos + length)\n  } else {\n    while (length--) {\n      dest[destPos++] = src[srcPos++]\n    }\n  }\n}\n\nmodule.exports = {\n  checkAndInit,\n  smix,\n  smixSync\n}\n"},"lineCount":218}},"error":null,"hash":"2310c9133a4ca2fd2e21145f5c1647e4","cacheData":{"env":{}}}