Skip to content

Commit 7378b0b

Browse files
committed
Add ArrayBuffer support for SHA functions
1 parent 3cf9dfc commit 7378b0b

5 files changed

Lines changed: 32 additions & 27 deletions

File tree

-1.04 KB
Binary file not shown.
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
#Wed Oct 31 17:20:33 PDT 2018
1+
#Mon Apr 13 18:24:21 MDT 2020
22
distributionBase=GRADLE_USER_HOME
33
distributionPath=wrapper/dists
44
zipStoreBase=GRADLE_USER_HOME
55
zipStorePath=wrapper/dists
6-
distributionUrl=https\://services.gradle.org/distributions/gradle-2.2-all.zip
6+
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip

android/src/main/java/com/pedrouid/crypto/RCTSha.java

Lines changed: 11 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
import org.spongycastle.crypto.digests.SHA224Digest;
3030
import org.spongycastle.crypto.digests.SHA256Digest;
3131
import org.spongycastle.crypto.digests.SHA384Digest;
32-
import org.spongycastle.crypto.digests.SHA384Digest;
3332
import org.spongycastle.crypto.digests.SHA512Digest;
3433
import org.spongycastle.crypto.generators.PKCS5S2ParametersGenerator;
3534
import org.spongycastle.crypto.PBEParametersGenerator;
@@ -58,40 +57,28 @@ public String getName() {
5857
}
5958

6059
@ReactMethod
61-
public void sha256(String data, Promise promise) {
60+
public void shaBase64(String data, String algorithm, Promise promise) throws Exception {
6261
try {
63-
String result = shaX(data, "SHA-256");
64-
promise.resolve(result);
65-
} catch (Exception e) {
66-
promise.reject("-1", e.getMessage());
67-
}
68-
}
62+
MessageDigest md = MessageDigest.getInstance(algorithm);
63+
md.update(Base64.decode(data, Base64.NO_WRAP));
64+
byte[] digest = md.digest();
6965

70-
@ReactMethod
71-
public void sha1(String data, Promise promise) {
72-
try {
73-
String result = shaX(data, "SHA-1");
74-
promise.resolve(result);
66+
promise.resolve(Base64.encodeToString(digest, Base64.NO_WRAP));
7567
} catch (Exception e) {
7668
promise.reject("-1", e.getMessage());
7769
}
7870
}
7971

8072
@ReactMethod
81-
public void sha512(String data, Promise promise) {
73+
public void sha(String data, String algorithm, Promise promise) throws Exception {
8274
try {
83-
String result = shaX(data, "SHA-512");
84-
promise.resolve(result);
75+
MessageDigest md = MessageDigest.getInstance(algorithm);
76+
md.update(data.getBytes());
77+
byte[] digest = md.digest();
78+
79+
promise.resolve(Base64.encodeToString(digest, Base64.DEFAULT));
8580
} catch (Exception e) {
8681
promise.reject("-1", e.getMessage());
8782
}
8883
}
89-
90-
private String shaX(String data, String algorithm) throws Exception {
91-
MessageDigest md = MessageDigest.getInstance(algorithm);
92-
md.update(data.getBytes());
93-
byte[] digest = md.digest();
94-
95-
return Base64.encodeToString(digest, Base64.DEFAULT);
96-
}
9784
}

index.d.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,11 @@ declare module "react-native-simple-crypto" {
2222

2323
export namespace SHA {
2424
export function sha1(text: string): Promise<string>;
25+
export function sha1(text: ArrayBuffer): Promise<ArrayBuffer>;
2526
export function sha256(text: string): Promise<string>;
27+
export function sha256(text: ArrayBuffer): Promise<ArrayBuffer>;
2628
export function sha512(text: string): Promise<string>;
29+
export function sha512(text: ArrayBuffer): Promise<ArrayBuffer>;
2730
}
2831

2932
export namespace HMAC {

index.js

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,17 @@ function randomBytes(length) {
8989
});
9090
}
9191

92+
async function SHAWrapper(data, algorithm) {
93+
if (typeof data === 'string') {
94+
return NativeModules.Sha.sha(data, algorithm)
95+
} else {
96+
const dataBase64 = convertArrayBufferToBase64(data);
97+
const result = await NativeModules.Sha.shaBase64(dataBase64, algorithm)
98+
99+
return convertBase64ToArrayBuffer(result);
100+
}
101+
}
102+
92103
const AES = {
93104
encrypt: function(textArrayBuffer, keyArrayBuffer, ivArrayBuffer) {
94105
const textBase64 = convertArrayBufferToBase64(textArrayBuffer);
@@ -118,7 +129,11 @@ const AES = {
118129
}
119130
};
120131

121-
const SHA = NativeModules.Sha;
132+
const SHA = {
133+
sha1: data => SHAWrapper(data, 'SHA-1'),
134+
sha256: data => SHAWrapper(data, 'SHA-256'),
135+
sha512: data => SHAWrapper(data, 'SHA-512')
136+
};
122137

123138
const HMAC = {
124139
hmac256: function(textArrayBuffer, keyArrayBuffer) {

0 commit comments

Comments
 (0)