Socket
Socket
Sign inDemoInstall

@scure/bip39

Package Overview
Dependencies
Maintainers
1
Versions
8
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@scure/bip39

Secure, audited & minimal implementation of BIP39 mnemonic phrases


Version published
Maintainers
1
Created

Package description

What is @scure/bip39?

@scure/bip39 is an npm package that provides functionality for generating and working with BIP-39 mnemonic phrases, which are used in the creation of cryptocurrency wallets. It allows for the generation of mnemonic phrases, conversion between mnemonic phrases and seed values, and validation of mnemonic phrases.

What are @scure/bip39's main functionalities?

Generate Mnemonic

This feature allows you to generate a new BIP-39 mnemonic phrase using the English wordlist.

const { generateMnemonic } = require('@scure/bip39');
const { wordlist } = require('@scure/bip39/wordlists/english');
const mnemonic = generateMnemonic(wordlist);
console.log(mnemonic);

Mnemonic to Seed

This feature converts a BIP-39 mnemonic phrase to a seed value, which can be used to derive keys for cryptocurrency wallets.

const { mnemonicToSeedSync } = require('@scure/bip39');
const mnemonic = 'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about';
const seed = mnemonicToSeedSync(mnemonic);
console.log(seed.toString('hex'));

Validate Mnemonic

This feature checks if a given BIP-39 mnemonic phrase is valid according to the specified wordlist.

const { validateMnemonic } = require('@scure/bip39');
const { wordlist } = require('@scure/bip39/wordlists/english');
const mnemonic = 'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about';
const isValid = validateMnemonic(mnemonic, wordlist);
console.log(isValid);

Other packages similar to @scure/bip39

Readme

Source

scure-bip39

Secure, audited & minimal implementation of BIP39 mnemonic phrases.

Compared to popular bip39 package, scure-bip39:

  • Is 491KB all-bundled instead of 1.3MB
  • Uses 2 dependencies instead of 15
  • Wordlists are 157KB instead of 315KB
  • Had an external security audit by Cure53 on Jan 5, 2022

Check out scure-bip32 if you need hierarchical deterministic wallets ("HD Wallets").

This library belongs to scure

scure — secure, independently audited packages for every use case.

Usage

npm install @scure/bip39

Or

yarn add @scure/bip39

import * as bip39 from '@scure/bip39';
import { wordlist } from '@scure/bip39/wordlists/english';

// Generate x random words. Uses Cryptographically-Secure Random Number Generator.
const mn = bip39.generateMnemonic(wordlist);
console.log(mn);

// Reversible: Converts mnemonic string to raw entropy in form of byte array.
const ent = bip39.mnemonicToEntropy(mn, wordlist)

// Reversible: Converts raw entropy in form of byte array to mnemonic string.
bip39.entropyToMnemonic(ent, wordlist);

// Validates mnemonic for being 12-24 words contained in `wordlist`.
bip39.validateMnemonic(mn, wordlist);

// Irreversible: Uses KDF to derive 64 bytes of key data from mnemonic + optional password.
await bip39.mnemonicToSeed(mn, 'password');
bip39.mnemonicToSeedSync(mn, 'password');

This submodule contains the word lists defined by BIP39 for Czech, English, French, Italian, Japanese, Korean, Simplified and Traditional Chinese, and Spanish. These are not imported by default, as that would increase bundle sizes too much. Instead, you should import and use them explicitly.

function generateMnemonic(wordlist: string[], strength?: number): string;
function mnemonicToEntropy(mnemonic: string, wordlist: string[]): Uint8Array;
function entropyToMnemonic(entropy: Uint8Array, wordlist: string[]): string;
function validateMnemonic(mnemonic: string, wordlist: string[]): boolean;
function mnemonicToSeed(mnemonic: string, passphrase?: string): Promise<Uint8Array>;
function mnemonicToSeedSync(mnemonic: string, passphrase?: string): Uint8Array;

All wordlists:

import { wordlist } from '@scure/bip39/wordlists/czech';
import { wordlist } from '@scure/bip39/wordlists/english';
import { wordlist } from '@scure/bip39/wordlists/french';
import { wordlist } from '@scure/bip39/wordlists/italian';
import { wordlist } from '@scure/bip39/wordlists/japanese';
import { wordlist } from '@scure/bip39/wordlists/korean';
import { wordlist } from '@scure/bip39/wordlists/simplified-chinese';
import { wordlist } from '@scure/bip39/wordlists/spanish';
import { wordlist } from '@scure/bip39/wordlists/traditional-chinese';

Security

The library has been audited by Cure53 on Jan 5, 2022. Check out the audit PDF & URL. See changes since audit.

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

License

MIT License

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

Keywords

FAQs

Package last updated on 22 Mar 2023

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc