ffwasm
Version:
Finite Field Library In Web Assembly
48 lines (38 loc) • 1.52 kB
JavaScript
const bigInt = require("big-integer");
const buildF1m = require("./build_f1m");
const buildUtils = require("./buildwasmff_utils");
const buildAdd = require("./buildwasmff_add");
const buildCmpOps = require("./buildwasmff_cmpops");
const buildMul = require("./buildwasmff_mul");
const buildDiv = require("./buildwasmff_div");
const buildPow = require("./buildwasmff_pow");
const buildBinOps = require("./buildwasmff_binops");
const buildLogicalOps = require("./buildwasmff_logicalops");
const utils = require("./utils");
module.exports = function buildWasmFf(module, prefix, prime, publish) {
const ctx = {};
ctx.module = module;
ctx.prefix = prefix;
ctx.prime = bigInt(prime);
ctx.publish = publish;
ctx.q = bigInt(ctx.prime);
ctx.n64 = Math.floor((ctx.q.minus(1).bitLength() - 1)/64) +1;
ctx.pTmp = module.alloc((ctx.n64 +1)*8);
ctx.pTmp2 = module.alloc((ctx.n64 +1)*8);
ctx.prefixI = prefix + "_int";
ctx.prefixF = prefix + "_F1m";
ctx.pNBits = module.alloc((ctx.n64 +1)*8);
ctx.module.addData(ctx.pNBits, utils.bigInt2BytesLE(ctx.prime.bitLength(), 8));
buildF1m(module, ctx.q, ctx.prefixF, ctx.prefixI);
ctx.pR3 = module.modules[ctx.prefixF].pR3;
ctx.pPrime = module.modules[ctx.prefixF].pq;
ctx.binMask = bigInt.one.shiftLeft( ctx.prime.bitLength().mod(64) ).minus(1);
buildUtils(ctx);
buildAdd(ctx);
buildCmpOps(ctx);
buildMul(ctx);
buildDiv(ctx);
buildPow(ctx);
buildBinOps(ctx);
buildLogicalOps(ctx);
};