44
55import java .io .IOException ;
66import java .security .SecureRandom ;
7+ import java .util .Arrays ;
8+ import java .util .ArrayList ;
79import java .util .HashMap ;
810import java .util .Map ;
911
2931import org .spongycastle .crypto .digests .SHA224Digest ;
3032import org .spongycastle .crypto .digests .SHA256Digest ;
3133import org .spongycastle .crypto .digests .SHA384Digest ;
32- import org .spongycastle .crypto .digests .SHA384Digest ;
3334import org .spongycastle .crypto .digests .SHA512Digest ;
3435import org .spongycastle .crypto .generators .PKCS5S2ParametersGenerator ;
3536import org .spongycastle .crypto .PBEParametersGenerator ;
@@ -52,46 +53,43 @@ public RCTSha(ReactApplicationContext reactContext) {
5253 super (reactContext );
5354 }
5455
56+ private static ArrayList <String > algorithms = new ArrayList <String >(
57+ Arrays .asList ("SHA-1" ,
58+ "SHA-256" ,
59+ "SHA-512" ));
60+
5561 @ Override
5662 public String getName () {
5763 return "RCTSha" ;
5864 }
5965
60- @ ReactMethod
61- public void sha256 (String data , Promise promise ) {
62- try {
63- String result = shaX (data , "SHA-256" );
64- promise .resolve (result );
65- } catch (Exception e ) {
66- promise .reject ("-1" , e .getMessage ());
66+ private byte [] sha (byte [] data , String algorithm ) throws Exception {
67+ if (!algorithms .contains (algorithm )) {
68+ throw new Exception ("Invalid algorithm" );
6769 }
70+
71+ MessageDigest md = MessageDigest .getInstance (algorithm );
72+ md .update (data );
73+ return md .digest ();
6874 }
6975
7076 @ ReactMethod
71- public void sha1 (String data , Promise promise ) {
77+ public void shaBase64 (String data , String algorithm , Promise promise ) throws Exception {
7278 try {
73- String result = shaX ( data , "SHA-1" );
74- promise .resolve (result );
79+ byte [] digest = this . sha ( Base64 . decode ( data , Base64 . NO_WRAP ), algorithm );
80+ promise .resolve (Base64 . encodeToString ( digest , Base64 . NO_WRAP ) );
7581 } catch (Exception e ) {
7682 promise .reject ("-1" , e .getMessage ());
7783 }
7884 }
7985
8086 @ ReactMethod
81- public void sha512 (String data , Promise promise ) {
87+ public void shaUtf8 (String data , String algorithm , Promise promise ) throws Exception {
8288 try {
83- String result = shaX ( data , "SHA-512" );
84- promise .resolve (result );
89+ byte [] digest = data . getBytes ( );
90+ promise .resolve (Base64 . encodeToString ( digest , Base64 . DEFAULT ) );
8591 } catch (Exception e ) {
8692 promise .reject ("-1" , e .getMessage ());
8793 }
8894 }
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- }
9795}
0 commit comments