Skip to content

Commit bb5db88

Browse files
authored
Merge pull request #16 from ghbutton/master
Internal upgrade
2 parents baaec2a + b0cbb42 commit bb5db88

8 files changed

Lines changed: 30 additions & 25 deletions

File tree

README.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -127,21 +127,21 @@ const ivArrayBuffer = await RNSimpleCrypto.utils.randomBytes(16);
127127
console.log("randomBytes iv", ivArrayBuffer);
128128

129129
const cipherTextArrayBuffer = await RNSimpleCrypto.AES.encrypt(
130-
msgArrayBuffer,
130+
messageArrayBuffer,
131131
keyArrayBuffer,
132132
ivArrayBuffer
133133
);
134134
console.log("AES encrypt", cipherTextArrayBuffer);
135135

136-
const messageArrayBuffer = await RNSimpleCrypto.AES.decrypt(
136+
const decryptedArrayBuffer = await RNSimpleCrypto.AES.decrypt(
137137
cipherTextArrayBuffer,
138138
keyArrayBuffer,
139139
ivArrayBuffer
140140
);
141-
const message = RNSimpleCrypto.utils.convertArrayBufferToUtf8(
142-
messageArrayBuffer
141+
const decrypted = RNSimpleCrypto.utils.convertArrayBufferToUtf8(
142+
decryptedArrayBuffer
143143
);
144-
console.log("AES decrypt", message);
144+
console.log("AES decrypt", decrypted);
145145

146146
// -- HMAC ------------------------------------------------------------ //
147147

android/src/main/java/org/walletconnect/crypto/RCTAes.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,9 @@ public String getName() {
6161
}
6262

6363
@ReactMethod
64-
public void encrypt(String data, String keyBase64, String ivBase64, Promise promise) {
64+
public void encrypt(String dataBase64, String keyBase64, String ivBase64, Promise promise) {
6565
try {
66-
String result = encrypt(data, keyBase64, ivBase64);
66+
String result = encrypt(dataBase64, keyBase64, ivBase64);
6767
promise.resolve(result);
6868
} catch (Exception e) {
6969
promise.reject("-1", e.getMessage());
@@ -116,8 +116,8 @@ public static String bytesToHex(byte[] bytes) {
116116

117117
final static IvParameterSpec emptyIvSpec = new IvParameterSpec(new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00});
118118

119-
private static String encrypt(String text, String hexKey, String hexIv) throws Exception {
120-
if (text == null || text.length() == 0) {
119+
private static String encrypt(String textBase64, String hexKey, String hexIv) throws Exception {
120+
if (textBase64 == null || textBase64.length() == 0) {
121121
return null;
122122
}
123123

@@ -126,7 +126,8 @@ private static String encrypt(String text, String hexKey, String hexIv) throws E
126126

127127
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
128128
cipher.init(Cipher.ENCRYPT_MODE, secretKey, hexIv == null ? emptyIvSpec : new IvParameterSpec(Hex.decode(hexIv)));
129-
byte[] encrypted = cipher.doFinal(text.getBytes("UTF-8"));
129+
byte [] textBytes = Base64.getEncoder().decode(textBase64);
130+
byte[] encrypted = cipher.doFinal(textBytes);
130131
return Base64.encodeToString(encrypted, Base64.NO_WRAP);
131132
}
132133

@@ -141,7 +142,7 @@ private static String decrypt(String ciphertext, String hexKey, String hexIv) th
141142
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
142143
cipher.init(Cipher.DECRYPT_MODE, secretKey, hexIv == null ? emptyIvSpec : new IvParameterSpec(Hex.decode(hexIv)));
143144
byte[] decrypted = cipher.doFinal(Base64.decode(ciphertext, Base64.NO_WRAP));
144-
return new String(decrypted, "UTF-8");
145+
return Base64.encodeToString(decrypted, Base64.NO_WRAP)
145146
}
146147

147148
}

index.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,11 +91,11 @@ function randomBytes(length) {
9191

9292
const AES = {
9393
encrypt: function(textArrayBuffer, keyArrayBuffer, ivArrayBuffer) {
94-
const textString = convertArrayBufferToUtf8(textArrayBuffer);
94+
const textBase64 = convertArrayBufferToBase64(textArrayBuffer);
9595
const keyHex = convertArrayBufferToHex(keyArrayBuffer);
9696
const ivHex = convertArrayBufferToHex(ivArrayBuffer);
9797
return new Promise((resolve, reject) => {
98-
NativeModules.Aes.encrypt(textString, keyHex, ivHex)
98+
NativeModules.Aes.encrypt(textBase64, keyHex, ivHex)
9999
.then(cipherTextBase64 => {
100100
const result = convertBase64ToArrayBuffer(cipherTextBase64);
101101
resolve(result);
@@ -110,7 +110,7 @@ const AES = {
110110
return new Promise((resolve, reject) => {
111111
NativeModules.Aes.decrypt(cipherTextBase64, keyHex, ivHex)
112112
.then(textString => {
113-
const result = convertUtf8ToArrayBuffer(textString);
113+
const result = convertBase64ToArrayBuffer(textString);
114114
resolve(result);
115115
})
116116
.catch(error => reject(error));

ios/RCTCrypto/RCTAes.m

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@ @implementation RCTAes
55

66
RCT_EXPORT_MODULE()
77

8-
RCT_EXPORT_METHOD(encrypt:(NSString *)data key:(NSString *)key iv:(NSString *)iv
8+
RCT_EXPORT_METHOD(encrypt:(NSString *)dataBase64 key:(NSString *)key iv:(NSString *)iv
99
resolver:(RCTPromiseResolveBlock)resolve
1010
rejecter:(RCTPromiseRejectBlock)reject) {
1111
NSError *error = nil;
12-
NSString *base64 = [Aes encrypt:data key:key iv:iv];
12+
NSString *base64 = [Aes encrypt:dataBase64 key:key iv:iv];
1313
if (base64 == nil) {
1414
reject(@"encrypt_fail", @"Encrypt error", error);
1515
} else {

ios/RCTCrypto/lib/Aes.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#import <Foundation/Foundation.h>
22

33
@interface Aes : NSObject
4-
+ (NSString *) encrypt: (NSString *)clearText key: (NSString *)key iv: (NSString *)iv;
4+
+ (NSString *) encrypt: (NSString *)clearText64 key: (NSString *)key iv: (NSString *)iv;
55
+ (NSString *) decrypt: (NSString *)cipherText key: (NSString *)key iv: (NSString *)iv;
66
@end

ios/RCTCrypto/lib/Aes.m

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,15 @@ + (NSData *) AES128CBC: (NSString *)operation data: (NSData *)data key: (NSStrin
3434
return nil;
3535
}
3636

37-
+ (NSString *) encrypt: (NSString *)clearText key: (NSString *)key iv: (NSString *)iv {
38-
NSData *result = [self AES128CBC:@"encrypt" data:[clearText dataUsingEncoding:NSUTF8StringEncoding] key:key iv:iv];
37+
+ (NSString *) encrypt: (NSString *)clearText64 key: (NSString *)key iv: (NSString *)iv {
38+
NSData* clearData = [[NSData alloc] initWithBase64EncodedString:clearText64 options:0];
39+
NSData *result = [self AES128CBC:@"encrypt" data:clearData key:key iv:iv];
3940
return [result base64EncodedStringWithOptions:0];
4041
}
4142

4243
+ (NSString *) decrypt: (NSString *)cipherText key: (NSString *)key iv: (NSString *)iv {
4344
NSData *result = [self AES128CBC:@"decrypt" data:[[NSData alloc] initWithBase64EncodedString:cipherText options:0] key:key iv:iv];
44-
return [[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding];
45+
return [result base64EncodedStringWithOptions:0];
4546
}
4647

4748
@end

ios/RCTCrypto/lib/Shared.m

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,13 @@
77
@implementation Shared
88

99
+ (NSString *) toHex:(NSData *)nsdata {
10-
NSString * hexStr = [NSString stringWithFormat:@"%@", nsdata];
11-
for(NSString * toRemove in [NSArray arrayWithObjects:@"<", @">", @" ", nil])
12-
hexStr = [hexStr stringByReplacingOccurrencesOfString:toRemove withString:@""];
13-
return hexStr;
10+
// Copied from: https://riptutorial.com/ios/example/18979/converting-nsdata-to-hex-string
11+
const unsigned char *bytes = (const unsigned char *)nsdata.bytes;
12+
NSMutableString *hex = [NSMutableString new];
13+
for (NSInteger i = 0; i < nsdata.length; i++) {
14+
[hex appendFormat:@"%02x", bytes[i]];
15+
}
16+
return [hex copy];
1417
}
1518

1619
+ (NSData *) fromHex: (NSString *)string {

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "react-native-simple-crypto",
3-
"version": "0.2.7",
3+
"version": "0.2.8",
44
"description": "A simpler React-Native crypto library",
55
"main": "index.js",
66
"author": "Pedro Gomes <pedro@pedrouid.com>",

0 commit comments

Comments
 (0)