@vaporyjs/rustbn.js
Version:
Javascript bindings for https://github.com/paritytech/bn (using asm.js)
99 lines (63 loc) • 3.25 kB
Markdown
# SYNOPSIS
[](https://travis-ci.org/vaporyjs/rustbn.js)
[](https://gitter.im/vapory/vaporyjs-lib) or #vaporyjs on freenode
Rust to Javascript compile of 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.
## Installation
`npm install rustbn.js`
## Usage
Require the module:
```
const bn128Module = require('rustbn.js')
```
Curve Addition
```
const ecAddPrecompile = bn128Module.cwrap('ec_add', 'string', ['string'])
var inputHexStr = '...'
let result = ecAddPrecompile(inputHexStr)
```
Curve Multiplication
```
const ecMulPrecompile = bn128Module.cwrap('ec_mul', 'string', ['string'])
var inputHexStr = '...'
let result = ecMulPrecompile(inputHexStr)
```
Curve Pairing
```
const ecPairingPrecompile = bn128Module.cwrap('ec_pairing', 'string', ['string'])
var inputHexStr = '...'
let result = ecPairingPrecompile(inputHexStr)
```
## Developer
### Compilation
Compilation process is based on [this tutorial](http://asquera.de/blog/2017-04-10/the-path-to-rust-on-the-web/) using [Emscripten](http://kripken.github.io/emscripten-site/) to compile the original Rust sources to [asm.js](http://asmjs.org/) ([Wikipedia](https://en.wikipedia.org/wiki/Asm.js)). 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
```
### 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
- Another [compilation tutorial](https://medium.com/@ianjsikes/get-started-with-rust-webassembly-and-webpack-58d28e219635) using ``Webpack``
- [Talk](https://rreverser.com/rust-javascript-interop/) on ``Emscripten`` and ``Rust``
- [Compiling Rust to your Browser](https://www.hellorust.com/emscripten/)
## 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.