diff --git a/src/lib/installState.js b/src/lib/installState.js index 0c7de5882..a1f41bff0 100644 --- a/src/lib/installState.js +++ b/src/lib/installState.js @@ -159,6 +159,13 @@ async function checksum(data) { * @returns */ async function checksumText(text) { - const textUint8 = new TextEncoder().encode(text); - return await checksum(textUint8); + return new Promise((resolve, reject) => { + cordova.exec( + (hash) => resolve(hash), + (error) => reject(error), + "System", + "checksumText", + [text], + ); + }); } diff --git a/src/plugins/system/android/com/foxdebug/system/System.java b/src/plugins/system/android/com/foxdebug/system/System.java index 69edbffb8..1adf80bb4 100644 --- a/src/plugins/system/android/com/foxdebug/system/System.java +++ b/src/plugins/system/android/com/foxdebug/system/System.java @@ -107,6 +107,10 @@ import android.graphics.ImageDecoder; +import java.security.MessageDigest; +import java.security.MessageDigest; + + public class System extends CordovaPlugin { private static final String TAG = "SystemPlugin"; @@ -560,6 +564,33 @@ public void run() { break; case "compare-texts": compareTexts(arg1, arg2, callbackContext); + break; + case "checksumText": + + cordova.getThreadPool().execute(() -> { + try { + + MessageDigest digest = MessageDigest.getInstance("SHA-256"); + + byte[] hash = digest.digest(args.getString(0).getBytes("UTF-8")); + + StringBuilder hexString = new StringBuilder(); + + for (byte b : hash) { + String hex = Integer.toHexString(0xff & b); + + if (hex.length() == 1) hexString.append('0'); + + hexString.append(hex); + } + + + callbackContext.success(hexString.toString()); + } catch (Exception e) { + callbackContext.error(e.getMessage()); + } + }); + break; default: break;