summaryrefslogtreecommitdiff
path: root/bip-0039.mediawiki
diff options
context:
space:
mode:
Diffstat (limited to 'bip-0039.mediawiki')
-rw-r--r--bip-0039.mediawiki60
1 files changed, 48 insertions, 12 deletions
diff --git a/bip-0039.mediawiki b/bip-0039.mediawiki
index 84c09a0..1c4845e 100644
--- a/bip-0039.mediawiki
+++ b/bip-0039.mediawiki
@@ -18,7 +18,7 @@
This BIP describes the implementation of a mnemonic code or mnemonic sentence --
a group of easy to remember words -- for the generation of deterministic wallets.
-It consists of two parts: generating the mnemonic, and converting it into a
+It consists of two parts: generating the mnemonic and converting it into a
binary seed. This seed can be later used to generate deterministic wallets using
BIP-0032 or similar methods.
@@ -29,7 +29,7 @@ handling of raw binary or hexadecimal representations of a wallet seed. The
sentence could be written on paper or spoken over the telephone.
This guide is meant to be a way to transport computer-generated randomness with
-a human readable transcription. It's not a way to process user-created
+a human-readable transcription. It's not a way to process user-created
sentences (also known as brainwallets) into a wallet seed.
==Generating the mnemonic==
@@ -39,14 +39,14 @@ security is improved but the sentence length increases. We refer to the
initial entropy length as ENT. The allowed size of ENT is 128-256 bits.
First, an initial entropy of ENT bits is generated. A checksum is generated by
-taking the first <pre>ENT / 32</pre> bits of its SHA256 hash. This checksum is
+taking the first <code>ENT / 32</code> bits of its SHA256 hash. This checksum is
appended to the end of the initial entropy. Next, these concatenated bits
are split into groups of 11 bits, each encoding a number from 0-2047, serving
as an index into a wordlist. Finally, we convert these numbers into words and
use the joined words as a mnemonic sentence.
The following table describes the relation between the initial entropy
-length (ENT), the checksum length (CS) and the length of the generated mnemonic
+length (ENT), the checksum length (CS), and the length of the generated mnemonic
sentence (MS) in words.
<pre>
@@ -67,12 +67,12 @@ MS = (ENT + CS) / 11
An ideal wordlist has the following characteristics:
a) smart selection of words
- - the wordlist is created in such way that it's enough to type the first four
+ - the wordlist is created in such a way that it's enough to type the first four
letters to unambiguously identify the word
b) similar words avoided
- word pairs like "build" and "built", "woman" and "women", or "quick" and "quickly"
- not only make remembering the sentence difficult, but are also more error
+ not only make remembering the sentence difficult but are also more error
prone and more difficult to guess
c) sorted wordlists
@@ -97,7 +97,7 @@ This seed can be later used to generate deterministic wallets using BIP-0032 or
similar methods.
The conversion of the mnemonic sentence to a binary seed is completely independent
-from generating the sentence. This results in rather simple code; there are no
+from generating the sentence. This results in a rather simple code; there are no
constraints on sentence structure and clients are free to implement their own
wordlists or even whole sentence generators, allowing for flexibility in wordlists
for typo detection or other purposes.
@@ -113,7 +113,14 @@ will make the desired wallet available.
==Wordlists==
-* [[bip-0039/bip-0039-wordlists.md|Moved to separate document]]
+Since the vast majority of BIP39 wallets supports only the English wordlist,
+it is '''strongly discouraged''' to use non-English wordlists for generating
+the mnemonic sentences.
+
+If you still feel your application really needs to use a localized wordlist,
+use one of the following instead of inventing your own.
+
+* [[bip-0039/bip-0039-wordlists.md|Wordlists]]
==Test vectors==
@@ -137,8 +144,11 @@ http://github.com/trezor/python-mnemonic
Go:
* https://github.com/tyler-smith/go-bip39
+Python:
+* https://github.com/meherett/python-hdwallet
+
Elixir:
-* https://github.com/izelnakri/mnemonic
+* https://github.com/aerosol/mnemo
Objective-C:
* https://github.com/nybex/NYMnemonic
@@ -146,6 +156,9 @@ Objective-C:
Haskell:
* https://github.com/haskoin/haskoin
+.NET (Standard):
+* https://www.nuget.org/packages/dotnetstandard-bip39/
+
.NET C# (PCL):
* https://github.com/Thashiznets/BIP39.NET
@@ -153,21 +166,44 @@ Haskell:
* https://github.com/NicolasDorier/NBitcoin
JavaScript:
-* https://github.com/bitpay/bitcore-mnemonic
+* https://github.com/bitpay/bitcore/tree/master/packages/bitcore-mnemonic
* https://github.com/bitcoinjs/bip39 (used by [[https://github.com/blockchain/My-Wallet-V3/blob/v3.8.0/src/hd-wallet.js#L121-L146|blockchain.info]])
+* https://github.com/dashhive/DashPhrase.js
+* https://github.com/hujiulong/web-bip39
+
+TypeScript:
+* https://github.com/bitauth/libauth
+
+Java:
+* https://github.com/bitcoinj/bitcoinj/blob/master/core/src/main/java/org/bitcoinj/crypto/MnemonicCode.java
Ruby:
* https://github.com/sreekanthgs/bip_mnemonic
Rust:
-* https://github.com/infincia/bip39-rs
+* https://github.com/maciejhirsz/tiny-bip39/
+* https://github.com/koushiro/bip0039-rs
+
+Smalltalk:
+* https://github.com/eMaringolo/pharo-bip39mnemonic
Swift:
* https://github.com/CikeQiu/CKMnemonic
* https://github.com/yuzushioh/WalletKit
+* https://github.com/pengpengliu/BIP39
+* https://github.com/matter-labs/web3swift/blob/develop/Sources/web3swift/KeystoreManager/BIP39.swift
+* https://github.com/zcash-hackworks/MnemonicSwift
+* https://github.com/ShenghaiWang/BIP39
+* https://github.com/anquii/BIP39
C++:
-* https://github.com/libbitcoin/libbitcoin/blob/master/include/bitcoin/bitcoin/wallet/mnemonic.hpp
+* https://github.com/libbitcoin/libbitcoin-system/blob/master/include/bitcoin/system/wallet/mnemonic.hpp
C (with Python/Java/Javascript bindings):
* https://github.com/ElementsProject/libwally-core
+
+Python:
+* https://github.com/scgbckbone/btc-hd-wallet
+
+Dart:
+* https://github.com/dart-bitcoin/bip39