arnaucube
arnaucube/snarkjsPublic Self-hosted repository
snarkjs/src/futils.js
src/futils.jsRaw
 1const bigInt = require("./bigint.js");
 2
 3exports.mulScalar = (F, base, e) =>{
 4    let res = F.zero;
 5    let rem = bigInt(e);
 6    let exp = base;
 7
 8    while (! rem.isZero()) {
 9        if (rem.isOdd()) {
10            res = F.add(res, exp);
11        }
12        exp = F.double(exp);
13        rem = rem.shr(1);
14    }
15
16    return res;
17};
18
19
20exports.exp = (F, base, e) =>{
21    let res = F.one;
22    let rem = bigInt(e);
23    let exp = base;
24
25    while (! rem.isZero()) {
26        if (rem.isOdd()) {
27            res = F.mul(res, exp);
28        }
29        exp = F.square(exp);
30        rem = rem.shr(1);
31    }
32
33    return res;
34};