bls-keygen icon indicating copy to clipboard operation
bls-keygen copied to clipboard

Key management for BLS curves written in TypeScript and browser compatible

BLS Keygen

npm (tag) Discord GitHub ES Version Node Version

Utility functions for generating BLS secret keys, built for NodeJs and Browser.

  • Create a master key from BIP-39 mnemonic or entropy.
  • Create a derived child key from BIP-39 mnemonic, entropy, or a master key.
  • Create Eth2 validator keys from a master key.

Implementation follows EIPS: EIP-2334, EIP-2333

For low-level EIP-2333 and EIP-2334 functionality, see @chainsafe/bls-hd-key.

Examples



import {
    generateRandomSecretKey,
    deriveKeyFromMnemonic,
    deriveKeyFromEntropy,
    deriveKeyFromMaster,
    deriveEth2ValidatorKeys,
} from "@chainsafe/bls-keygen";

// random secret key
const secretKey = generateRandomSecretKey();

...

// secret key from mnemonic and optional EIP-2334 path
const masterSecretKey = deriveKeyFromMnemonic(
  "impact exit example acquire drastic cement usage float mesh source private bulb twenty guitar neglect",
);

const childSecretKey = deriveKeyFromMnemonic(
  "impact exit example acquire drastic cement usage float mesh source private bulb twenty guitar neglect",
  "m/12381/3600/0/0"
);

...

// secret key from entropy and optional EIP-2334 path
const masterSecretKey = deriveKeyFromEntropy(entropy);

const childSecretKey = deriveKeyFromEntropy(
  entropy,
  "m/12381/3600/0/0"
);


...

// child secret key from master secret key and EIP-2334 path
const childSecretKey = deriveKeyFromMaster(
  masterSecretKey,
  "m/12381/3600/0/0"
);

...

// create multiple eth2 validator keys from a master secret key
const keys0 = deriveEth2ValidatorKeys(masterSecretKey, 0);
const keys1 = deriveEth2ValidatorKeys(masterSecretKey, 1);

const { signing, withdrawal } = keys0;

Contribution

Requirements:

  • nodejs
  • yarn
    yarn install
    yarn run test

Audit

This repo was audited by Least Authority as part of this security audit, released 2020-03-23. Commit 32b068 verified in the report.

License

Apache-2.0