Rust to Javascript/Webassembly compilation of ethereum-bn128.rs.
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.
npm install rustbn.js
Require the module:
const bn128 = require('rustbn.js')
Curve Addition
let inputHexString = ...
let outputHexString = bn128.add(inputHexString)
Curve Multiplication
let inputHexString = ...
let outputHexString = bn128.mul(inputHexString)
Curve Pairing
let inputHexString = ...
let outputHexString = bn128.pairing(inputHexString)
Compilation process is based on this tutorial using Emscripten to compile the original Rust sources to asm.js (Wikipedia). This might be extended in the future to also include a WASM
compiled version to choose from.
For basic setup follow the "Installing the Tools" section of the tutorial (make sure to use the incoming
branch of emsdk
).
For asm.js
compilation asmjs-unknown-emscripten
target has to be added with rustup
:
rustup target add asmjs-unknown-emscripten
Compilation steps can be found in the makefile
in the main directory and executed simply by
running:
make
This repository also contains a Dockefile
which makes it easier to install
the dependencies and tools described above in a docker container by following
the next instructions.
Build the docker image:
docker build . -t rustbn
Run the container:
docker run -v <path_to_the_rustbn.js_project>:/rustbn.js -it rustbn
Once inside the container the project can be compiled by executing:
make
WASM files can be compiled with make wasm
to the exp
. This is just intended for experimentation
working in browser only (not with Node.js) and not ready for production use!
Start a server with python -m SimpleHTTPServer
and browse to http://localhost:8000/. You might have
to modify the exp/index.html
file to get things to work.
Unit tests can be found in the tests
directory. Run the tests with:
npm run test
- Another compilation tutorial using
Webpack
- Talk on
Emscripten
andRust
- Compiling Rust to your Browser
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.