@toruslabs/ffjavascript
Version:
Finite Field Library in Javascript
37 lines (29 loc) • 1.05 kB
JavaScript
import { isZero, bits } from './scalar.js';
/*
Copyright 2018 0kims association.
This file is part of snarkjs.
snarkjs is a free software: you can redistribute it and/or
modify it under the terms of the GNU General Public License as published by the
Free Software Foundation, either version 3 of the License, or (at your option)
any later version.
snarkjs is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
more details.
You should have received a copy of the GNU General Public License along with
snarkjs. If not, see <https://www.gnu.org/licenses/>.
*/
function exp(F, base, e) {
if (isZero(e)) return F.one;
const n = bits(e);
if (n.length == 0) return F.one;
let res = base;
for (let i = n.length - 2; i >= 0; i--) {
res = F.square(res);
if (n[i]) {
res = F.mul(res, base);
}
}
return res;
}
export { exp };