finitefields
v1.0.4
Published
Galois/Finite field crypto and raw elliptic curves
Maintainers
Readme
finitefields
Polynomials, Galois fields and Elliptic curves - in JS
- by @dr-Jonas-Birch
Installation
npm install finitefieldsExamples
import { ecℤp, p256, type Coordinate, PrimeField, empty, fold } from 'finitefields';
import type { Point } from 'finitefields';
let f:PrimeField;
let c:ecℤp;
let g:Coordinate;
let mt:Coordinate;
let t:Point;
/*
* initialization using Nist curve P256
* also available: birch17()
*/
// generate prime field
f = new PrimeField(p256().θ, p256().bitlen);
// generate curve
c = new ecℤp(f, p256());
// using the curve's standard P point as generator
g = c.p;
// point doubling, t=P+P
mt = c.double(g);
// point addition, t=P+Q
mt = c.add(g, c.q);
// point finding/scalar multiplication, t=5P
mt = c.find(5n, g);
// extract the values
if (empty(mt))
console.log('infinity');
else {
t = fold(mt);
console.log(t);
}
console.log(mt.toString());API
Initialization
p256() / birch17();- Generate a 256bit standard Nist curve 'P256'
- or a (p=17) dr Birch curve 'birch17' (test curve)
let f:PrimeField;
f = new PrimeField(prime:bigint, bitlen:bigint);- Generate a Galois field with a specified prime and bitlen
let c:ecℤp;
c = new ecℤp(field:PrimeField, curve:ECCurve);- Generate a specific Elliptic curve over field
Point arithmetic
let mt:Coordinate;
mt = c.add(point1:Coordinate, point2:Coordinate);- Point addition
mt = c.double(point:Coordinate);- Point doubling
mt = c.find(scalar:bigint, generator:Coordinate);- Point finding (scalar multiplication)
Misc
// generate your own random curve over a prime field
let curve:ECCurve;
curve = mkcurve(field:PrimeField);
// Maybe<a> datatype
let ms:Maybe<string>;
ms = nothing();
ms = just('hello world');
let s:string;
if (!empty(s))
s = fold(ms);
// Polynomials
let pol:Polynomial;
pol = new Polynomial(src:Polysource, order:bigint);
type Polysource =
| bigint
| bigint[]
| Tobject;
// more info about Polynomial methods, check the source code
interface Ipolynomial {
fromarr(src:bigint[]): void;
fromobj(src:Tobject): void;
fromint(src:bigint): void;
verifyorder(order:bigint): boolean;
eval(): bigint;
constructor: Function;
}License
MIT
More info
Contact me [email protected], also check out my popular Youtube channel @dr-Jonas-Birch
