mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
This reverts commit f09ab8889148c406551dea1643966e3331fde4aa, reversing changes made to effc761e0ee4ea7ffb77f275b5ed650a7098d6f8. This is being temporarily reverted to make it easier to release an urgent fix for v10.15.1.
100 lines
3.3 KiB
Diff
100 lines
3.3 KiB
Diff
diff --git a/node_modules/bip39/index.js b/node_modules/bip39/index.js
|
|
index aa0f29f..bee8008 100644
|
|
--- a/node_modules/bip39/index.js
|
|
+++ b/node_modules/bip39/index.js
|
|
@@ -48,7 +48,9 @@ function salt (password) {
|
|
}
|
|
|
|
function mnemonicToSeed (mnemonic, password) {
|
|
- var mnemonicBuffer = Buffer.from(unorm.nfkd(mnemonic), 'utf8')
|
|
+ var mnemonicBuffer = typeof mnemonic === 'string'
|
|
+ ? Buffer.from(unorm.nfkd(mnemonic), 'utf8')
|
|
+ : mnemonic
|
|
var saltBuffer = Buffer.from(salt(unorm.nfkd(password)), 'utf8')
|
|
|
|
return pbkdf2(mnemonicBuffer, saltBuffer, 2048, 64, 'sha512')
|
|
@@ -61,12 +63,28 @@ function mnemonicToSeedHex (mnemonic, password) {
|
|
function mnemonicToEntropy (mnemonic, wordlist) {
|
|
wordlist = wordlist || DEFAULT_WORDLIST
|
|
|
|
- var words = unorm.nfkd(mnemonic).split(' ')
|
|
+ var mnemonicAsBuffer = typeof mnemonic === 'string'
|
|
+ ? Buffer.from(unorm.nfkd(mnemonic), 'utf8')
|
|
+ : mnemonic
|
|
+
|
|
+ var words = [];
|
|
+ var currentWord = [];
|
|
+ for (const byte of mnemonicAsBuffer.values()) {
|
|
+ // split at space or \u3000 (ideographic space, for Japanese wordlists)
|
|
+ if (byte === 0x20 || byte === 0x3000) {
|
|
+ words.push(Buffer.from(currentWord));
|
|
+ currentWord = [];
|
|
+ } else {
|
|
+ currentWord.push(byte);
|
|
+ }
|
|
+ }
|
|
+ words.push(Buffer.from(currentWord));
|
|
+
|
|
if (words.length % 3 !== 0) throw new Error(INVALID_MNEMONIC)
|
|
|
|
// convert word indices to 11 bit binary strings
|
|
var bits = words.map(function (word) {
|
|
- var index = wordlist.indexOf(word)
|
|
+ var index = wordlist.indexOf(word.toString('utf8'))
|
|
if (index === -1) throw new Error(INVALID_MNEMONIC)
|
|
|
|
return lpad(index.toString(2), '0', 11)
|
|
@@ -104,12 +122,41 @@ function entropyToMnemonic (entropy, wordlist) {
|
|
|
|
var bits = entropyBits + checksumBits
|
|
var chunks = bits.match(/(.{1,11})/g)
|
|
- var words = chunks.map(function (binary) {
|
|
+ var wordsAsBuffers = chunks.map(function (binary) {
|
|
var index = binaryToByte(binary)
|
|
- return wordlist[index]
|
|
+ return Buffer.from(wordlist[index], 'utf8')
|
|
})
|
|
|
|
- return wordlist === JAPANESE_WORDLIST ? words.join('\u3000') : words.join(' ')
|
|
+ var bufferSize = wordsAsBuffers.reduce(function (bufferSize, wordAsBuffer, i) {
|
|
+ var shouldAddSeparator = i < wordsAsBuffers.length - 1
|
|
+ return (
|
|
+ bufferSize +
|
|
+ wordAsBuffer.length +
|
|
+ (shouldAddSeparator ? 1 : 0)
|
|
+ )
|
|
+ }, 0)
|
|
+ var separator = wordlist === JAPANESE_WORDLIST ? '\u3000' : ' '
|
|
+ var result = wordsAsBuffers.reduce(function (result, wordAsBuffer, i) {
|
|
+ var shouldAddSeparator = i < wordsAsBuffers.length - 1
|
|
+ result.workingBuffer.set(wordAsBuffer, result.offset)
|
|
+ if (shouldAddSeparator) {
|
|
+ result.workingBuffer.write(
|
|
+ separator,
|
|
+ result.offset + wordAsBuffer.length,
|
|
+ separator.length,
|
|
+ 'utf8'
|
|
+ )
|
|
+ }
|
|
+ return {
|
|
+ workingBuffer: result.workingBuffer,
|
|
+ offset: (
|
|
+ result.offset +
|
|
+ wordAsBuffer.length +
|
|
+ (shouldAddSeparator ? 1 : 0)
|
|
+ )
|
|
+ }
|
|
+ }, { workingBuffer: Buffer.alloc(bufferSize), offset: 0 })
|
|
+ return result.workingBuffer;
|
|
}
|
|
|
|
function generateMnemonic (strength, rng, wordlist) {
|
|
@@ -124,6 +171,7 @@ function validateMnemonic (mnemonic, wordlist) {
|
|
try {
|
|
mnemonicToEntropy(mnemonic, wordlist)
|
|
} catch (e) {
|
|
+ console.log('could not validate mnemonic', e)
|
|
return false
|
|
}
|
|
|