rustbn.js

0.3.0 • Public • Published

SYNOPSIS

Build Status Gitter or #ethereumjs on freenode

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.

Installation

npm install rustbn.js

Usage

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)

Developer

Compilation

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

Docker

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 (Experimental)

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.

Testing

Unit tests can be found in the tests directory. Run the tests with:

npm run test

Additional Resources

License

Licensed under either of

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.

Package Sidebar

Install

npm i rustbn.js

Weekly Downloads

161,790

Version

0.3.0

License

(MIT OR Apache-2.0)

Unpacked Size

1.28 MB

Total Files

16

Last publish

Collaborators

  • null_radix
  • axic
  • holgerd77
  • jwasinger