ffjavascript

0.3.1 · active · verified Sun Apr 19

ffjavascript is a Finite Field Library implemented in JavaScript, designed for cryptographic applications, particularly those involving zk-SNARKs and other zero-knowledge proof systems. It provides core functionalities for performing arithmetic operations within finite fields, which are fundamental building blocks for many advanced cryptographic primitives. The library is currently at version 0.3.1 and sees an active, though not rapid, release cadence with minor updates and fixes. It is distinguished by its broad environment compatibility, supporting NodeJS, browser environments, Chrome Extensions, and Metamask Snaps (with SES compatibility), making it versatile for both backend and frontend cryptographic computations. Its primary differentiator is its focus on providing the underlying finite field arithmetic necessary for complex cryptographic protocols, often serving as a dependency for higher-level SNARK libraries.

Common errors

Warnings

Install

Imports

Quickstart

This quickstart demonstrates how to initialize the BN128 finite field and perform basic arithmetic operations with field elements like addition, multiplication, subtraction, inverse, and division.

import { buildBn128 } from 'ffjavascript';

async function runFieldOperations() {
  console.log('Initializing BN128 Finite Field...');
  const Fr = await buildBn128();
  console.log('Field initialized successfully.');

  // Create some field elements
  const a = Fr.e(10);
  const b = Fr.e(20);
  const c = Fr.e('1234567890123456789012345678901234567890'); // Larger number as string

  console.log(`a: ${Fr.toString(a)}`);
  console.log(`b: ${Fr.toString(b)}`);
  console.log(`c: ${Fr.toString(c)}`);

  // Perform basic arithmetic operations
  const sum = Fr.add(a, b);
  const product = Fr.mul(a, b);
  const diff = Fr.sub(b, a);
  const inv = Fr.inv(a);
  const div = Fr.div(b, a);

  console.log(`a + b = ${Fr.toString(sum)}`);
  console.log(`a * b = ${Fr.toString(product)}`);
  console.log(`b - a = ${Fr.toString(diff)}`);
  console.log(`1 / a = ${Fr.toString(inv)}`);
  console.log(`b / a = ${Fr.toString(div)}`);

  // Check if elements are equal
  const isEqual = Fr.eq(sum, Fr.e(30));
  console.log(`(a + b) === 30: ${isEqual}`);

  console.log('Demonstration complete.');
}

runFieldOperations().catch(console.error);

view raw JSON →