Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Patch bip39 to use native crypto lib pbkdf2 #1769

Merged
merged 4 commits into from
Aug 13, 2020
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions patches/bip39+2.6.0.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
diff --git a/node_modules/bip39/index.js b/node_modules/bip39/index.js
index efed68c..e978df8 100644
--- a/node_modules/bip39/index.js
+++ b/node_modules/bip39/index.js
@@ -4,6 +4,8 @@ var _pbkdf2 = require('pbkdf2')
var pbkdf2 = _pbkdf2.pbkdf2Sync
var pbkdf2Async = _pbkdf2.pbkdf2
var randomBytes = require('randombytes')
+import { NativeModules } from 'react-native';
+const Aes = NativeModules.Aes;

// use unorm until String.prototype.normalize gets better browser support
var unorm = require('unorm')
@@ -53,7 +55,12 @@ function mnemonicToSeed (mnemonic, password) {
var mnemonicBuffer = Buffer.from(unorm.nfkd(mnemonic), 'utf8')
var saltBuffer = Buffer.from(salt(unorm.nfkd(password)), 'utf8')

- return pbkdf2(mnemonicBuffer, saltBuffer, 2048, 64, 'sha512')
+ // Bellow is the native equivalent of pbkdf2(mnemonicBuffer, saltBuffer, 2048, 64, 'sha512')
+
+ const seed = Aes.pbkdf2Sync(mnemonicBuffer.toString('utf8'), saltBuffer.toString('utf8'), 2048, 512);
+ const seedBuffer = global.Buffer.from(seed, "hex")
+
+ return seedBuffer
}

function mnemonicToSeedHex (mnemonic, password) {
37 changes: 37 additions & 0 deletions patches/react-native-aes-crypto+1.3.9.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
diff --git a/node_modules/react-native-aes-crypto/android/src/main/java/com/tectiv3/aes/RCTAes.java b/node_modules/react-native-aes-crypto/android/src/main/java/com/tectiv3/aes/RCTAes.java
index 6843507..86ae4c6 100755
--- a/node_modules/react-native-aes-crypto/android/src/main/java/com/tectiv3/aes/RCTAes.java
+++ b/node_modules/react-native-aes-crypto/android/src/main/java/com/tectiv3/aes/RCTAes.java
@@ -81,6 +81,14 @@ public class RCTAes extends ReactContextBaseJavaModule {
} catch (Exception e) {
promise.reject("-1", e.getMessage());
}
+ }
+
+ @ReactMethod(isBlockingSynchronousMethod = true)
+ public String pbkdf2Sync(String pwd, String salt, Integer cost, Integer length)
+ throws NoSuchAlgorithmException, InvalidKeySpecException, UnsupportedEncodingException
+ {
+ String strs = pbkdf2(pwd, salt, cost, length);
+ return strs;
}

@ReactMethod
diff --git a/node_modules/react-native-aes-crypto/ios/RCTAes/RCTAes.m b/node_modules/react-native-aes-crypto/ios/RCTAes/RCTAes.m
index ded93b6..6bc1b0b 100755
--- a/node_modules/react-native-aes-crypto/ios/RCTAes/RCTAes.m
+++ b/node_modules/react-native-aes-crypto/ios/RCTAes/RCTAes.m
@@ -51,6 +51,13 @@ @implementation RCTAes
}
}

+RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(pbkdf2Sync:(NSString *)password salt:(NSString *)salt
+ cost:(NSInteger)cost length:(NSInteger)length){
+
+ return [AesCrypt pbkdf2:password salt:salt cost:cost length:length];
+}
+
+
RCT_EXPORT_METHOD(hmac256:(NSString *)base64 key:(NSString *)key
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject) {