2018-08-25 00:16:12 +02:00
|
|
|
const bigInt = require("./bigint.js");
|
2018-08-14 09:06:00 +02:00
|
|
|
|
2018-08-25 00:16:12 +02:00
|
|
|
exports.mulScalar = (F, base, e) =>{
|
2018-08-14 09:06:00 +02:00
|
|
|
let res = F.zero;
|
|
|
|
let rem = bigInt(e);
|
|
|
|
let exp = base;
|
|
|
|
|
|
|
|
while (! rem.isZero()) {
|
|
|
|
if (rem.isOdd()) {
|
|
|
|
res = F.add(res, exp);
|
|
|
|
}
|
|
|
|
exp = F.double(exp);
|
2018-08-25 00:16:12 +02:00
|
|
|
rem = rem.shr(1);
|
2018-08-14 09:06:00 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
return res;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
exports.exp = (F, base, e) =>{
|
|
|
|
let res = F.one;
|
|
|
|
let rem = bigInt(e);
|
|
|
|
let exp = base;
|
|
|
|
|
|
|
|
while (! rem.isZero()) {
|
|
|
|
if (rem.isOdd()) {
|
|
|
|
res = F.mul(res, exp);
|
|
|
|
}
|
|
|
|
exp = F.square(exp);
|
2018-08-25 00:16:12 +02:00
|
|
|
rem = rem.shr(1);
|
2018-08-14 09:06:00 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
return res;
|
|
|
|
};
|