Typescript wrapper for supranational/blst native bindings, a highly performant BLS12-381 signature library.
OS / Arch | binary name | Node |
---|---|---|
Linux / x64 | linux-x64 | 10, 11, 12, 13, 14, 15, 16, 17, 18 |
Linux / arm64 | linux-arm64 | 10, 11, 12, 13, 14, 15, 16, 18 |
Windows / x64 | win32-x64 | 12, 14, 16, 17 |
OSX / x64 | darwin-x64 | 10, 11, 12, 13, 14, 15, 16, 17, 18 |
OSX / M1 | -* | -* |
* No Github nor docker buildx setup to build this environment in CI. Source may compile locally after installation but it's not guaranteed
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 {SecretKey, verify} from "@chainsafe/blst";
const msg = Buffer.from("sample-msg");
const sk = SecretKey.fromKeygen(Buffer.alloc(32, 1));
const pk = sk.toPublicKey();
const sig = sk.sign(msg);
console.log(verify(msg, pk, sig)); // true
This library exposes two types of classes for public keys and signatures: PublicKey
& AggregatePublicKey
, Signature
& AggregateSignature
PublicKey
: Contains an affine point (x,y). It's the default representation of the point and what you need to serialize to and deserialize from.AggregatePublicKey
: Contains a jacobian point (x,y,z). It's optimal to perform aggregation operations.
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 |
Note that this repo contains a git submodule. Make sure the git submodule blst
is populated before attempting to build locally. After cloning run:
git submodule update --init --recursive
Apache-2.0