Minimal, unoptimized, and unaudited cryptographic domain library in JavaScript/TypeScript.
npm install @bradthomasbrown/finite-domainfinite-domain package, but this is listed here for completeness.
sh
npm i @bradthomasbrown/finite-domain
`
Usage
`js
import { FiniteField } from "@bradthomasbrown/finite-field";
import { FiniteCurve, FinitePoint } from "@bradthomasbrown/finite-curve";
import { FiniteDomain } from "@bradthomasbrown/finite-domain.js";
let secp256k1:FiniteDomain;
{
const p =
(1n << 256n)
- (1n << 32n)
- 977n;
const F = new FiniteField(p);
const E = new FiniteCurve(F, 0, 7);
const G = new FinitePoint(
0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798n,
0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8n
);
const n = 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141n;
const h = 1;
secp256k1 = new FiniteDomain(E, G, n, h);
}
// this should be the same as the example from finite-curve, but a bit simpler
const P = secp256k1.divide(new FinitePoint(), 2, secp256k1.G);
console.log({ x: P.x, y: P.y });
// x: 86918276961810349294276103416548851884759982251107n
// y: 87194829221142880348582938487511785107150118762739500766654458540580527283772n
// # note the relatively extremely low value of x after halving the generator point,
// # a characteristic of SEC 2 curves (https://bitcoin.stackexchange.com/a/113122)
``