https://github.com/vaporyjs/rustbn.js
Rust to Javascript compile of the Parity fork of the Zcash bn pairing cryptography library
https://github.com/vaporyjs/rustbn.js
curve experimental rust vaporyjs wasm
Last synced: 4 months ago
JSON representation
Rust to Javascript compile of the Parity fork of the Zcash bn pairing cryptography library
- Host: GitHub
- URL: https://github.com/vaporyjs/rustbn.js
- Owner: vaporyjs
- License: apache-2.0
- Created: 2018-03-04T04:42:38.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2022-11-10T13:59:38.000Z (about 3 years ago)
- Last Synced: 2025-08-16T21:29:46.923Z (4 months ago)
- Topics: curve, experimental, rust, vaporyjs, wasm
- Language: Rust
- Homepage: https://vapory.org
- Size: 865 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE-APACHE
Awesome Lists containing this project
README
# 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.