UNPKG

rustbn-wasm

Version:

Javascript bindings for https://github.com/paritytech/bn (using WASM)

73 lines (46 loc) 2.58 kB
# SYNOPSIS Rust to Javascript/Webassembly compilation of [ethereum-bn128.rs](https://github.com/ewasm/ethereum-bn128.rs). Derived largely from [rustbn.js](https://github.com/ethereumjs/rustbn.js) and recompiled used [`wasm-pack`](https://rustwasm.github.io/docs/wasm-pack/introduction.html) Internally it uses the [Parity fork](https://github.com/paritytech/bn) of the [Zcash bn pairing cryptography library](https://github.com/zcash/bn), implementing an efficient bilinear pairing on the Barreto-Naehrig (BN) curve. It implements helpers to support the functionality defined in [EIP-196](https://eips.ethereum.org/EIPS/eip-196) and [EIP-197](https://eips.ethereum.org/EIPS/eip-197). ## Installation Clone this repo and build following the [Compilation] instructions below. ## Usage 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) ``` ## Developer ### Building the module For basic setup: - Install `rust` and `wasm-pack` via the [`wasm-pack` prerequisites](https://rustwasm.github.io/docs/wasm-pack/prerequisites/index.html) - 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 ### Build 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. ## License Licensed under either of * MIT license, ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT) * Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0) at your option. Copyright 2016 [Zcash Electric Coin Company](https://z.cash/). The Zcash Company promises to maintain the "bn" crate on crates.io under this MIT/Apache-2.0 dual license.