1.5.0 â€Ē Published 1 year ago

@scure/bip32 v1.5.0

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

scure-bip32

Audited & minimal implementation of BIP32 hierarchical deterministic (HD) wallets over secp256k1.

  • 🔒 Audited by an independent security firm
  • ðŸ”ŧ Tree-shakeable: unused code is excluded from your builds
  • ðŸ“Ķ ESM and common.js
  • ➰ Only 3 audited dependencies by the same author: noble-curves, noble-hashes, and scure-base
  • ðŸŠķ 300 lines. 90KB with all dependencies bundled

Check out scure-bip39 if you need mnemonic phrases. See key-producer if you need SLIP-0010/BIP32 ed25519 hdkey implementation.

This library belongs to scure

scure — audited micro-libraries.

Usage

npm install @scure/bip32

This module exports a single class HDKey, which should be used like this:

import { HDKey } from "@scure/bip32";
const hdkey1 = HDKey.fromMasterSeed(seed);
const hdkey2 = HDKey.fromExtendedKey(base58key);
const hdkey3 = HDKey.fromJSON({ xpriv: string });

// props
[hdkey1.depth, hdkey1.index, hdkey1.chainCode];
console.log(hdkey2.privateKey, hdkey2.publicKey);
console.log(hdkey3.derive("m/0/2147483647'/1"));
const sig = hdkey3.sign(hash);
hdkey3.verify(hash, sig);

Note: chainCode property is essentially a private part of a secret "master" key, it should be guarded from unauthorized access.

The full API is:

class HDKey {
  public static HARDENED_OFFSET: number;
  public static fromMasterSeed(seed: Uint8Array, versions: Versions): HDKey;
  public static fromExtendedKey(base58key: string, versions: Versions): HDKey;
  public static fromJSON(json: { xpriv: string }): HDKey;

  readonly versions: Versions;
  readonly depth: number = 0;
  readonly index: number = 0;
  readonly chainCode: Uint8Array | null = null;
  readonly parentFingerprint: number = 0;

  get fingerprint(): number;
  get identifier(): Uint8Array | undefined;
  get pubKeyHash(): Uint8Array | undefined;
  get privateKey(): Uint8Array | null;
  get publicKey(): Uint8Array | null;
  get privateExtendedKey(): string;
  get publicExtendedKey(): string;

  derive(path: string): HDKey;
  deriveChild(index: number): HDKey;
  sign(hash: Uint8Array): Uint8Array;
  verify(hash: Uint8Array, signature: Uint8Array): boolean;
  wipePrivateData(): this;
}

interface Versions {
  private: number;
  public: number;
}

The module implements bip32 standard: check it out for additional documentation.

The implementation is loosely based on cryptocoinjs/hdkey, which has MIT License.

Security

The library has been independently audited:

The library was initially developed for js-ethereum-cryptography. At commit ae00e6d7, it was extracted to a separate package called micro-bip32. After the audit we've decided to use @scure NPM namespace for security.

License

MIT License

Copyright (c) 2022 Patricio Palladino, Paul Miller (paulmillr.com)

@btq-js/keyringcasper-js-sdk-test-h2@infinitebrahmanuniverse/nolb-_scuviem-alphaviem-bundle-testviem-testviem-test-bundleviem-test10viem-test11viem-test12viem-test15viem-test16viem-test18viem-test19viem-test2viem-test20viem-test21viem-test22viem-test23viem-test24viem-test3viem-test4viem-test5viem-test6viem-test7viem-test8viem-test9@everything-registry/sub-chunk-814test-opstack-kit-chainsstacks-vanitysui-wallettest-use-viemtest-viemtest-sui.jsv4-client-test-jsvicev-nostr-toolsviemviem_cmcviem_emc@benfen/bfc.js@rsodre/create-burneriso-filecoinjs-moi-hdnodejmesindorahocjshsuijs@wgb5445/ts-sdk@wgb5445/aptos-labs-ts-sdk@xdefi/chains-bitcoin@twin.org/crypto@thorswap-lib/toolbox-cosmos@thorswap-lib/toolbox-utxo@tevm/viem-effect@vechain/sdk-core@upheavalprotocol/v4-client-js@usedapptesthello/casper-js-sdk@yaring/mcbf@xhbmygod/xrpl@telestai-project/telestai-key@terra-money/nostr-toolsalephium-web3alphabill-sso-login@ziden-dev/accountairtune-nostr-tools-developmentahau-vc-sdkarcpoolaptos-wallet-apiaptos-wallet-api-v2@dzdidi_restored/nostr-tools0xweb@atp-tools/workers@atp-tools/cli1matrix-auth@chris.troutner/nostr-tools@chorus-one/signer-local@0xobelisk/sov-client@b2network/viem@atala/prism-wallet-sdk@hackbg/secretjs-esm@hackbg/4mat@hackbg/formati@gtsc/crypto@clypto/toolbox-ripple@clypto/toolbox-utxo@ai-chen2050/crelay-js-sdk@ai-chen2050/nostr-tools@cmdcode/core-cmd@cmdcode/signer@coinmasters/toolbox-cosmos@coinmasters/toolbox-ripple@coinmasters/toolbox-utxo@coinbase/coinbase-sdk@aladas-org/cryptocalcxrpl-uniapptest@peter-present/accountstrkjstopether21-nosft-core@biteine/stacks-vanity@btq-js/btq-cli
1.5.0

1 year ago

1.4.0

2 years ago

1.3.3

2 years ago

1.3.2

2 years ago

1.3.1

2 years ago

1.2.0

3 years ago

1.3.0

3 years ago

1.1.5

3 years ago

1.1.4

3 years ago

1.1.3

3 years ago

1.1.2

3 years ago

1.1.1

3 years ago

1.1.0

3 years ago

1.0.1

4 years ago

1.0.0

4 years ago

1.0.0-rc1

4 years ago