Typescript implementation of EIP 2335 for node and browser.
Functional interface
import {
IKeystore,
create,
decrypt,
verifyPassword,
isValidKeystore,
validateKeystore,
} from "@chainsafe/bls-keystore";
// encrypt private key
const password: string | Uint8Array = "SomePassword123";
const privateKey: Uint8Array = ...;
const publicKey: Uint8Array = ...;
const path: string = "m/12381/60/0/0";
// keystore is an `object` that follows the EIP-2335 schema
const keystore: IKeystore = await create(password, privateKey, publicKey, path);
// verify password
await verifyPassword(keystore, password); //true | false
// decrypt
const decryptedPrivateKey: Uint8Array = await decrypt(keystore, password);
// convert to string
JSON.stringify(keystore); //string
// determine if unsanitized data fits the EIP-2335 schema
const data: unknown = ...;
isValidKeystore(data); // true | false
validateKeystore(data); // throws if invalid
Class-based interface
import {
Keystore,
} from "@chainsafe/bls-keystore";
// encrypt private key
const password: string | Uint8Array = "SomePassword123";
const privateKey: Uint8Array = ...;
const publicKey: Uint8Array = ...;
const path: string = "m/12381/60/0/0";
// keystore is a `Keystore` instance that follows the EIP-2335 schema with additional convenience methods
const keystore: Keystore = await Keystore.create(password, privateKey, publicKey, path);
// verify password
await keystore.verifyPassword(password); //true | false
// decrypt
const decryptedPrivateKey: Uint8Array = await keystore.decrypt(password);
// convert to string
keystore.stringify(); //string
// determine if unsanitized data fits the EIP-2335 schema
const data: unknown = ...;
Keystore.fromObject(data); // returns a Keystore or throws if data is invalid
For key derivation checkout @chainsafe/bls-keygen
- get yarn
- yarn install
- yarn test