Rust to Javascript/Webassembly compilation of ethereum-bn128.rs.
Derived largely from rustbn.js and recompiled used wasm-pack
Internally it uses the Parity fork of the Zcash bn pairing cryptography library, implementing an efficient bilinear pairing on the Barreto-Naehrig (BN) curve.
It implements helpers to support the functionality defined in EIP-196 and EIP-197.
Clone this repo and build following the [Compilation] instructions below.
Import the module:
import { initRustBN } from 'rustbn'
const bn128 = await initRustBN()
Curve Addition
let inputHexString = ...
let outputHexString = bn128.ec_add(inputHexString)
Curve Multiplication
let inputHexString = ...
let outputHexString = bn128.ec_mul(inputHexString)
Curve Pairing
let inputHexString = ...
let outputHexString = bn128.ec_pairing(inputHexString)
For basic setup:
- Install
rust
andwasm-pack
via thewasm-pack
prerequisites - Clone this repo
- Install JS dependencies -
npm i
- Run
npm run build:wasm
to compile the Rust code to WASM - Run
npm run wasm2b64
to convert the WASM bytecode to a base64 string consumable by the Typescript wrapper - Run
npm run build
to build the final JS outputs
The build process outputs both CommonJS and ESM builds of the library and specifies entry points based on the main
, module
, and alternatively the exports
fields in package.json
. Both builds start with the wasm build from wasm-bindgen
which is then loaded by a Typescript wrapper of the WASM output. Our Typescript code is slightly different than the original Javascript generated by wasm-bindgen
because the default ESM output would require a bundler.
Licensed under either of
- MIT license, (LICENSE-MIT or http://opensource.org/licenses/MIT)
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
at your option.
Copyright 2016 Zcash Electric Coin Company. The Zcash Company promises to maintain the "bn" crate on crates.io under this MIT/Apache-2.0 dual license.