Typescript wrapper for supranational/blst native bindings, a highly performant BLS12-381 signature library.
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