|
| 1 | +diff --git a/src/index.js b/src/index.js |
| 2 | +index b83863f4b3d09df1159eb2c05d43e20a05d55767..926895a1f697905d48bf32f32fc538de3ce1b252 100644 |
| 3 | +--- a/src/index.js |
| 4 | ++++ b/src/index.js |
| 5 | +@@ -38,20 +38,68 @@ function salt(password) { |
| 6 | + function mnemonicToSeedSync(mnemonic, password) { |
| 7 | + const mnemonicBuffer = Uint8Array.from(Buffer.from(normalize(mnemonic), 'utf8')); |
| 8 | + const saltBuffer = Uint8Array.from(Buffer.from(salt(normalize(password)), 'utf8')); |
| 9 | +- const res = pbkdf2_1.pbkdf2(sha512_1.sha512, mnemonicBuffer, saltBuffer, { |
| 10 | +- c: 2048, |
| 11 | +- dkLen: 64, |
| 12 | +- }); |
| 13 | +- return Buffer.from(res); |
| 14 | ++ |
| 15 | ++ // Use react-native-quick-crypto's native PBKDF2 |
| 16 | ++ try { |
| 17 | ++ var crypto = require("crypto"); |
| 18 | ++ const res = crypto.pbkdf2Sync( |
| 19 | ++ mnemonicBuffer, |
| 20 | ++ saltBuffer, |
| 21 | ++ 2048, // iterations |
| 22 | ++ 64, // key length |
| 23 | ++ 'sha512' |
| 24 | ++ ); |
| 25 | ++ return Buffer.from(res); |
| 26 | ++ } catch (e) { |
| 27 | ++ console.warn('Native pbkdf2Sync failed, falling back to JS implementation', e); |
| 28 | ++ // Fallback to original implementation |
| 29 | ++ const res = pbkdf2_1.pbkdf2(sha512_1.sha512, mnemonicBuffer, saltBuffer, { |
| 30 | ++ c: 2048, |
| 31 | ++ dkLen: 64, |
| 32 | ++ }); |
| 33 | ++ return Buffer.from(res); |
| 34 | ++ } |
| 35 | + } |
| 36 | + exports.mnemonicToSeedSync = mnemonicToSeedSync; |
| 37 | ++ |
| 38 | + function mnemonicToSeed(mnemonic, password) { |
| 39 | + const mnemonicBuffer = Uint8Array.from(Buffer.from(normalize(mnemonic), 'utf8')); |
| 40 | + const saltBuffer = Uint8Array.from(Buffer.from(salt(normalize(password)), 'utf8')); |
| 41 | +- return pbkdf2_1.pbkdf2Async(sha512_1.sha512, mnemonicBuffer, saltBuffer, { |
| 42 | +- c: 2048, |
| 43 | +- dkLen: 64, |
| 44 | +- }).then((res) => Buffer.from(res)); |
| 45 | ++ |
| 46 | ++ // Use react-native-quick-crypto's native PBKDF2 |
| 47 | ++ try { |
| 48 | ++ var crypto = require("crypto"); |
| 49 | ++ return new Promise((resolve, reject) => { |
| 50 | ++ crypto.pbkdf2( |
| 51 | ++ mnemonicBuffer, |
| 52 | ++ saltBuffer, |
| 53 | ++ 2048, // iterations |
| 54 | ++ 64, // key length |
| 55 | ++ 'sha512', |
| 56 | ++ (err, res) => { |
| 57 | ++ if (err) { |
| 58 | ++ reject(err); |
| 59 | ++ } else { |
| 60 | ++ resolve(Buffer.from(res)); |
| 61 | ++ } |
| 62 | ++ } |
| 63 | ++ ); |
| 64 | ++ }).catch((err) => { |
| 65 | ++ console.warn('Native pbkdf2 failed, falling back to JS implementation', err); |
| 66 | ++ // Fallback to original implementation |
| 67 | ++ return pbkdf2_1.pbkdf2Async(sha512_1.sha512, mnemonicBuffer, saltBuffer, { |
| 68 | ++ c: 2048, |
| 69 | ++ dkLen: 64, |
| 70 | ++ }).then((res) => Buffer.from(res)); |
| 71 | ++ }); |
| 72 | ++ } catch (e) { |
| 73 | ++ console.warn('Native pbkdf2 not available, using JS implementation', e); |
| 74 | ++ // Fallback to original implementation |
| 75 | ++ return pbkdf2_1.pbkdf2Async(sha512_1.sha512, mnemonicBuffer, saltBuffer, { |
| 76 | ++ c: 2048, |
| 77 | ++ dkLen: 64, |
| 78 | ++ }).then((res) => Buffer.from(res)); |
| 79 | ++ } |
| 80 | + } |
| 81 | + exports.mnemonicToSeed = mnemonicToSeed; |
| 82 | + function mnemonicToEntropy(mnemonic, wordlist) { |
0 commit comments