Giter Club home page Giter Club logo

js-secp256k1's Introduction

js-secp256k1

CI codecov

Compiled webassembly of bitcoin secp256k1

Install

  • install library
$ npm install js-secp256k1

Build with emscripten

You can build secp256k1 wasm yourself with emscripten. We build two version of secp256k1 - node and web. The only difference is that there is no file system in web version.

$ sh build.sh

After build wasm files, you should build javascript library again.

$ npm run build

Usage

  • Hash message
// for nodejs
const secp256k1Async = require('js-secp256k1/dist/node-bundle')

// for browser
const secp256k1Async = require('js-secp256k1/dist/bundle')

// initialize the library
secp256k1 = await secp256k1Async()

// generate public key from private key
const privKey = Buffer.from([......])
// browser
const privKey = new Uint8Array([......])

let pubkey = secp256k1.privkeyToPubkey(privkey)

// serialize public key
let compressed = true
let cpubkey = secp256k1.serializePubkey(pubkey, compressed)

// sign
// signature {
//   signature: <Buffer/Uint8Array>,
//   recovery: <int>
// }
let sig = secp256k1.sign(msg, privkey)

// verify
let isVerified secp256k1.verify(msg, sig.signature, pubkey)

// recover
let rpubkey = secp256k1.recover(msg, sig.signature, sig.recovery)

Benchmark

Computer: 2.2 GHz 6-Core Intel Core i7

$ node -v
v12.18.1

> [email protected] start /Users/peterlai/Desktop/Projects/js-secp256k1/benchmarks
> node index.js

Secp256k1 WASM (current) x 3,979 ops/sec ±0.22% (94 runs sampled)
Secp256k1 0.2.1 WASM (current) x 3,865 ops/sec ±1.08% (96 runs sampled)
GYP Binding (secp256k1) x 1,156 ops/sec ±1.17% (93 runs sampled)
Pure JS (elliptic) x 1,249 ops/sec ±0.57% (96 runs sampled)
Sign: fastest is Secp256k1 WASM (current)
Secp256k1 WASM (current) x 2,275 ops/sec ±0.55% (98 runs sampled)
Secp256k1 0.2.1 WASM (current) x 1,734 ops/sec ±0.07% (97 runs sampled)
GYP Binding (secp256k1): 
Pure JS (elliptic) x 460 ops/sec ±0.32% (93 runs sampled)
Recover: fastest is Secp256k1 WASM (current)
Secp256k1 WASM (current) x 2,757 ops/sec ±0.08% (96 runs sampled)
GYP Binding (secp256k1): 
Pure JS (elliptic) x 548 ops/sec ±0.34% (95 runs sampled)
Verify: fastest is Secp256k1 WASM (current)

License

MIT

js-secp256k1's People

Contributors

sc0vu avatar dependabot[bot] avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.