react / wstein / node_modules / browserify / node_modules / crypto-browserify / node_modules / browserify-sign / node_modules / elliptic / lib / elliptic / utils.js
80575 views'use strict';12var utils = exports;34utils.assert = function assert(val, msg) {5if (!val)6throw new Error(msg || 'Assertion failed');7};89function toArray(msg, enc) {10if (Array.isArray(msg))11return msg.slice();12if (!msg)13return [];14var res = [];15if (typeof msg !== 'string') {16for (var i = 0; i < msg.length; i++)17res[i] = msg[i] | 0;18return res;19}20if (!enc) {21for (var i = 0; i < msg.length; i++) {22var c = msg.charCodeAt(i);23var hi = c >> 8;24var lo = c & 0xff;25if (hi)26res.push(hi, lo);27else28res.push(lo);29}30} else if (enc === 'hex') {31msg = msg.replace(/[^a-z0-9]+/ig, '');32if (msg.length % 2 !== 0)33msg = '0' + msg;34for (var i = 0; i < msg.length; i += 2)35res.push(parseInt(msg[i] + msg[i + 1], 16));36}37return res;38}39utils.toArray = toArray;4041function zero2(word) {42if (word.length === 1)43return '0' + word;44else45return word;46}47utils.zero2 = zero2;4849function toHex(msg) {50var res = '';51for (var i = 0; i < msg.length; i++)52res += zero2(msg[i].toString(16));53return res;54}55utils.toHex = toHex;5657utils.encode = function encode(arr, enc) {58if (enc === 'hex')59return toHex(arr);60else61return arr;62};6364// Represent num in a w-NAF form65function getNAF(num, w) {66var naf = [];67var ws = 1 << (w + 1);68var k = num.clone();69while (k.cmpn(1) >= 0) {70var z;71if (k.isOdd()) {72var mod = k.andln(ws - 1);73if (mod > (ws >> 1) - 1)74z = (ws >> 1) - mod;75else76z = mod;77k.isubn(z);78} else {79z = 0;80}81naf.push(z);8283// Optimization, shift by word if possible84var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;85for (var i = 1; i < shift; i++)86naf.push(0);87k.ishrn(shift);88}8990return naf;91}92utils.getNAF = getNAF;9394// Represent k1, k2 in a Joint Sparse Form95function getJSF(k1, k2) {96var jsf = [97[],98[]99];100101k1 = k1.clone();102k2 = k2.clone();103var d1 = 0;104var d2 = 0;105while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {106107// First phase108var m14 = (k1.andln(3) + d1) & 3;109var m24 = (k2.andln(3) + d2) & 3;110if (m14 === 3)111m14 = -1;112if (m24 === 3)113m24 = -1;114var u1;115if ((m14 & 1) === 0) {116u1 = 0;117} else {118var m8 = (k1.andln(7) + d1) & 7;119if ((m8 === 3 || m8 === 5) && m24 === 2)120u1 = -m14;121else122u1 = m14;123}124jsf[0].push(u1);125126var u2;127if ((m24 & 1) === 0) {128u2 = 0;129} else {130var m8 = (k2.andln(7) + d2) & 7;131if ((m8 === 3 || m8 === 5) && m14 === 2)132u2 = -m24;133else134u2 = m24;135}136jsf[1].push(u2);137138// Second phase139if (2 * d1 === u1 + 1)140d1 = 1 - d1;141if (2 * d2 === u2 + 1)142d2 = 1 - d2;143k1.ishrn(1);144k2.ishrn(1);145}146147return jsf;148}149utils.getJSF = getJSF;150151152