@chainsafe/blst
v2.2.0
Published
Typescript wrapper for supranational/blst native bindings, a highly performant BLS12-381 signature library
Downloads
9,455
Readme
blst-ts
Typescript wrapper for supranational/blst native bindings, a highly performant BLS12-381 signature library.
Supported Environments
| OS / Arch | binary name | Node | | ------------- | ----------- | ---------------------------------- | | Linux / x64 | linux-x64 | 16, 18, 20, 21 | | Linux / arm64 | linux-arm64 | 16, 18, 20, 21 | | Windows / x64 | win32-x64 | 16, 18, 20, 21 | | macOS / x64 | darwin-x64 | 16, 18, 20, 21 | | macOS / arm64 | darwin-arm64 | 16, 18, 20, 21 |
Usage
yarn add @chainsafe/blst
This library comes with pre-compiled bindings for most platforms. You can check current support in releases. If your platform is not supported, bindings will be compiled from source as a best effort with node-gyp.
import crypto from "crypto";
import {SecretKey, verify, BLST_CONSTANTS} from "@chainsafe/blst";
const msg = Buffer.from("sample-msg");
const sk = SecretKey.fromKeygen(crypto.randomBytes(BLST_CONSTANTS.SECRET_KEY_LENGTH));
const pk = sk.toPublicKey();
const sig = sk.sign(msg);
console.log(verify(msg, pk, sig)); // true
This library exposes a classes for secret keys, public keys and signatures: SecretKey
, PublicKey
& Signature
The PublicKey
and Signature
contain an affine point (x,y) encoding of P1 in G1 and P2 in G2 respectively.
Spec versioning
This library has a hardcoded configuration compatible with Eth2.0 spec:
| Setting | value |
| -------------- | --------------------------------------------- |
| PK_IN | G1
|
| HASH_OR_ENCODE | true
|
| DST | BLS_SIG_BLS12381G2_XMD:SHA-256_SSWU_RO_POP_
|
| RAND_BITS | 64
|
Contributing
Please check out CONTRIBUTING.md for more info on how to use the repo and for architectural details
Release/Publishing
Release
The release process is automatically triggered when the master branch has the version in package.json updated.
To create a new release:
- Increment the project version in package.json
- A pre-release can be published by ensuring that the project version is appended with non-numeric characters, eg:
-beta
- A pre-release can be published by ensuring that the project version is appended with non-numeric characters, eg:
- run
yarn run version
- merge a commit with these changes
- CI will run and result in a new release being published
License
Apache-2.0