UNPKG

1.27 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.scryptFromU8a = void 0;
4const util_1 = require("@polkadot/util");
5const bn_js_1 = require("../bn.js");
6const defaults_js_1 = require("./defaults.js");
7function scryptFromU8a(data) {
8 const salt = data.subarray(0, 32);
9 const N = (0, util_1.u8aToBn)(data.subarray(32 + 0, 32 + 4), bn_js_1.BN_LE_OPTS).toNumber();
10 const p = (0, util_1.u8aToBn)(data.subarray(32 + 4, 32 + 8), bn_js_1.BN_LE_OPTS).toNumber();
11 const r = (0, util_1.u8aToBn)(data.subarray(32 + 8, 32 + 12), bn_js_1.BN_LE_OPTS).toNumber();
12 // FIXME At this moment we assume these to be fixed params, this is not a great idea
13 // since we lose flexibility and updates for greater security. However we need some
14 // protection against carefully-crafted params that can eat up CPU since these are user
15 // inputs. So we need to get very clever here, but atm we only allow the defaults
16 // and if no match, bail out
17 if (N !== defaults_js_1.DEFAULT_PARAMS.N || p !== defaults_js_1.DEFAULT_PARAMS.p || r !== defaults_js_1.DEFAULT_PARAMS.r) {
18 throw new Error('Invalid injected scrypt params found');
19 }
20 return { params: { N, p, r }, salt };
21}
22exports.scryptFromU8a = scryptFromU8a;