Utility functions for managing BLS heirarchical deterministic accounts.
- Create a master private key from entropy
- Create a child private key from a private key and index
- Convert a standard path into an array of indices
- Create a decendent private key from a private key and array of indices
Implementation is following EIPS: EIP-2334, EIP-2333
For a higher-level interface, see @chainsafe/bls-keygen.
import {deriveMasterSK, deriveChildSK, deriveChildSKMultiple, pathToIndices} from "@chainsafe/bls-hd-key";
// Create master private key (according to EIP-2333)
const entropy: Uint8Array = Uint8Array.from(...);
const masterKey: Uint8Array = deriveMasterSK(entropy);
// Create child private key one level deep
const childIndex: number = ...;
const childKey: Uint8Array = deriveChildSK(masterKey, childIndex);
// Convert a "path" into an array of indices (using validation rules of EIP-2334)
cont path = "m/12381/3600/0/0";
const childIndices: number[] = pathToIndices(path);
// Convert a "path" into an array of indices (validating an alternate key type)
const eth1KeyType = 60;
cont path = "m/12381/60/0/0";
const childIndices: number[] = pathToIndices(path, eth1KeyType);
// Create a child private key `childIndices.length` levels deep
const childIndices: number[] = [...];
const childKey = deriveChildSKMultiple(masterKey, childIndices);
// Compose functions to derive a child key from entropy and a path
const entropy: Uint8Array = Uint8Array.from(...);
cont path = "m/12381/3600/0/0";
const childKey = deriveChildSKMultiple(deriveMasterSK(entropy), pathToIndices(path));
Requirements:
- nodejs
- yarn
yarn install
yarn run test
This repo was audited by Least Authority as part of this security audit, released 2020-03-23. Commit 767c998
verified in the report.
Apache-2.0