@beraji/wallet-sdk
Version:
Beraji: Distributed Secret Sharing.
41 lines • 1.99 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.FiniteField = void 0;
const bn_js_1 = __importDefault(require("bn.js"));
const utils_1 = require("@noble/hashes/utils");
class FiniteField {
constructor(red, en) {
this.red = red;
this.en = en;
this.encode = (r) => new bn_js_1.default(r, 16, this.en).toRed(this.r);
this.decode = (r, len = 32) => Uint8Array.from(r.toArray(this.en, len));
this.numberToRedBN = (r) => new bn_js_1.default(r).toRed(this.r);
this.norm = (a) => this.decode(this.encode(a), a.length);
this.rand = () => this.norm((0, utils_1.randomBytes)(32));
this.add = (a, b) => this.decode(this.encode(a).redAdd(this.encode(b)));
this.neg = (a) => this.decode(this.encode(a).redNeg());
this.sub = (a, b) => this.add(a, this.neg(b));
this.mul = (a, b) => this.decode(this.encode(a).redMul(this.encode(b)));
this.inv = (a) => this.decode(this.encode(a).redInvm());
this.div = (a, b) => this.mul(a, this.inv(b));
this.sqr = (a) => this.decode(this.encode(a).redSqr());
this.sqrt = (a) => this.decode(this.encode(a).redSqrt());
this.pow = (a, b) => this.decode(this.encode(a).redPow(new bn_js_1.default(b)));
this.equal = (a, b) => this.encode(a).eq(this.encode(b));
this.r = bn_js_1.default.red(this.red);
}
get ZERO() {
return this.numberToRedBN(0);
}
get ONE() {
return this.numberToRedBN(1);
}
}
exports.FiniteField = FiniteField;
FiniteField.fromString = (red, en) => new FiniteField(new bn_js_1.default(red), en);
FiniteField.fromNumber = (red, en) => new FiniteField(new bn_js_1.default(red), en);
FiniteField.fromBigInt = (red, en) => FiniteField.fromString(red.toString(), en);
//# sourceMappingURL=ff.js.map