if (env->RegisterNatives(protector_class, offline_method_table,
                                 sizeof(offline_method_table) / sizeof(offline_method_table[0])) !=
            JNI_OK) {
            logMessageIfEnabled("offline_method_table");
            env->DeleteLocalRef(protector_class);
            logMessageIfEnabled("91001 (5)");
            killOwnProcess();
            return;
        }


i don't want this function to be called


error logs

2024-09-25 12:22:50.525 30401-30401 AndroidRuntime          in.org.npci.upi                      D  Shutting down VM
2024-09-25 12:22:50.526 30401-30401 AndroidRuntime          in.org.npci.upi                      E  FATAL EXCEPTION: main
                                                                                                    Process: in.org.npci.upi, PID: 30401
                                                                                                    java.lang.NoSuchMethodError: no static or non-static method "Lorg/npci/upi/security/pinactivitycomponent/OfflineNativeDefenderService;.nOfflineStoreValue(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V"
                                                                                                    	at org.npci.upi.security.pinactivitycomponent.NativeDefenderService.nEnableUPILITEX(Native Method)
                                                                                                    	at org.npci.upi.security.pinactivitycomponent.NativeDefenderService.g(Unknown Source:0)
                                                                                                    	at hh.g0.f(Unknown Source:142)
                                                                                                    	at org.npci.upi.security.pinactivitycomponent.GetCredential.D(Unknown Source:123)
                                                                                                    	at org.npci.upi.security.pinactivitycomponent.GetCredential.onCreate(Unknown Source:108)
                                                                                                    	at android.app.Activity.performCreate(Activity.java:8960)
                                                                                                    	at android.app.Activity.performCreate(Activity.java:8938)
                                                                                                    	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1526)
                                                                                                    	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3975)
                                                                                                    	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4173)
                                                                                                    	at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:114)
                                                                                                    	at android.app.servertransaction.TransactionExecutor.executeNonLifecycleItem(TransactionExecutor.java:231)
                                                                                                    	at android.app.servertransaction.TransactionExecutor.executeTransactionItems(TransactionExecutor.java:152)
                                                                                                    	at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:93)
                                                                                                    	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2595)
                                                                                                    	at android.os.Handler.dispatchMessage(Handler.java:107)
                                                                                                    	at android.os.Looper.loopOnce(Looper.java:232)
                                                                                                    	at android.os.Looper.loop(Looper.java:317)
                                                                                                    	at android.app.ActivityThread.main(ActivityThread.java:8592)
                                                                                                    	at java.lang.reflect.Method.invoke(Native Method)
                                                                                                    	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:580)
                                                                                                    	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:878)
2024-09-25 12:22:50.527 30401-30401 Exception!!!            in.org.npci.upi                      E  ************ LOCATION OF ERROR ************
                                                                                                    
                                                                                                    NPCI Common Library
                                                                                                    
                                                                                                    ************ CAUSE OF ERROR ************
                                                                                                    
                                                                                                    java.lang.NoSuchMethodError: no static or non-static method "Lorg/npci/upi/security/pinactivitycomponent/OfflineNativeDefenderService;.nOfflineStoreValue(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V"
                                                                                                    	at org.npci.upi.security.pinactivitycomponent.NativeDefenderService.nEnableUPILITEX(Native Method)
                                                                                                    	at org.npci.upi.security.pinactivitycomponent.NativeDefenderService.g(Unknown Source:0)
                                                                                                    	at hh.g0.f(Unknown Source:142)
                                                                                                    	at org.npci.upi.security.pinactivitycomponent.GetCredential.D(Unknown Source:123)
                                                                                                    	at org.npci.upi.security.pinactivitycomponent.GetCredential.onCreate(Unknown Source:108)
                                                                                                    	at android.app.Activity.performCreate(Activity.java:8960)
                                                                                                    	at android.app.Activity.performCreate(Activity.java:8938)
                                                                                                    	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1526)
                                                                                                    	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3975)
                                                                                                    	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4173)
                                                                                                    	at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:114)
                                                                                                    	at android.app.servertransaction.TransactionExecutor.executeNonLifecycleItem(TransactionExecutor.java:231)
                                                                                                    	at android.app.servertransaction.TransactionExecutor.executeTransactionItems(TransactionExecutor.java:152)
                                                                                                    	at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:93)
                                                                                                    	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2595)
                                                                                                    	at android.os.Handler.dispatchMessage(Handler.java:107)
                                                                                                    	at android.os.Looper.loopOnce(Looper.java:232)
                                                                                                    	at android.os.Looper.loop(Looper.java:317)
                                                                                                    	at android.app.ActivityThread.main(ActivityThread.java:8592)
                                                                                                    	at java.lang.reflect.Method.invoke(Native Method)
                                                                                                    	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:580)
                                                                                                    	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:878)
2024-09-25 12:22:50.527 30401-30401 Process                 in.org.npci.upi                      I  Sending signal. PID: 30401 SIG: 9


package org.npci.upi.security.pinactivitycomponent;

import android.content.Context;

import java.security.KeyPair;
import java.security.PrivateKey;

import org.npci.upi.security.pinactivitycomponent.npciprotector.constants.SharedPreferenceType;

import java.security.PublicKey;
import java.util.Objects;

import javax.crypto.SecretKey;

/**
 * This class is used to access native defender jni functional calls
 *
 * @author breezen
 * @since 21/12/23
 */
public final class NativeDefenderService {

    static {
        System.loadLibrary("SecureComponent");
    }

    public static void enable() {
    }

    private static String alias = null;

    private NativeDefenderService() {
    }

    private NativeDefenderService(String aliasHash) {
        alias = aliasHash;
    }

    private static NativeDefenderService nativeDefenderService = null;


    /**
     * This function is used to get the instance of NativeDefenderService
     *
     * @return NativeDefenderService
     */
    public static synchronized NativeDefenderService getInstance() {
        if (nativeDefenderService == null) {
            nativeDefenderService = new NativeDefenderService();
        }
        return nativeDefenderService;
    }

    /**
     * This function is used to get the instance of NativeDefenderService
     *
     * @param aliasHash Alias
     * @return NativeDefenderService
     */
    public static synchronized NativeDefenderService getInstance(String aliasHash) {
        if (nativeDefenderService == null || !(aliasHash.equals(alias))) {
            nativeDefenderService = new NativeDefenderService(aliasHash);
        }
        return nativeDefenderService;
    }

    void putDataInSharedPreference(Context context, String fileNamePostfix, String key, Object objValue) {
        try {
            setValue(context, "Data" + fileNamePostfix, key, objValue);
        } catch (Exception e) {
            //TODO Check StackTrace Printing
            e.printStackTrace();
        }
    }

    Object getDataFromSharedPreference(Context context, String fileNamePostfix, String key, String valueType) {
        try {
            //Class<?> classType = null;
            Class<?> classType = String.class;
            if (Objects.equals(valueType, SharedPreferenceType.TYPE_INTEGER)) {
                classType = Integer.class;
            } else if (Objects.equals(valueType, SharedPreferenceType.TYPE_BOOLEAN)) {
                classType = Boolean.class;
            }
            return nGetValue(context, "Data" + fileNamePostfix, key, classType);
        } catch (Exception e) {
            //TODO Check StackTrace Printing
            e.printStackTrace();
            return null;
        }
    }

    void putValueInNPCIVault(Context context, String key, Object objValue) {
        try {
            setValue(context, CLConstants.SHARED_PREFERENCE_VAULT, key, objValue);
        } catch (Exception e) {
            //TODO Check StackTrace Printing
            e.printStackTrace();
        }
    }

    Object getValueFromNPCIVault(Context context, String key, String valueType) {
        try {
            Class<?> classType = null;
            if (Objects.equals(valueType, SharedPreferenceType.TYPE_STRING)) {
                classType = String.class;
            } else if (Objects.equals(valueType, SharedPreferenceType.TYPE_INTEGER)) {
                classType = Integer.class;
            } else if (Objects.equals(valueType, SharedPreferenceType.TYPE_BOOLEAN)) {
                classType = Boolean.class;
            }
            return nGetValue(context, CLConstants.SHARED_PREFERENCE_VAULT, key, classType);
        } catch (Exception e) {
            //TODO Check StackTrace Printing
            e.printStackTrace();
            return null;
        }
    }

    /**
     * This function is used to save value in sharedPreference file
     *
     * @param context                  Context
     * @param sharedPreferenceFileName SharedPreference FileName
     * @param key                      Key
     * @param objValue                 Value
     */
    private void setValue(Context context, String sharedPreferenceFileName, String key, Object objValue) {
        try {
            nStoreValue(context, sharedPreferenceFileName, key, objValue);
        } catch (Exception e) {
            //TODO Check StackTrace Printing
            e.printStackTrace();
        }
    }


    /**
     * This function is used to get the value from sharedPreference
     *
     * @param context                  Context
     * @param sharedPreferenceFileName SharedPreference File Name
     * @param key                      Key
     * @param valueType                Value Type String/Int/Boolean
     * @return Object - If key is found otherwise null
     */
    private Object getValue(Context context, String sharedPreferenceFileName, String key, String valueType) {
        try {
            Class<?> classType = null;
            if (Objects.equals(valueType, SharedPreferenceType.TYPE_STRING)) {
                classType = String.class;
            } else if (Objects.equals(valueType, SharedPreferenceType.TYPE_INTEGER)) {
                classType = Integer.class;
            } else if (Objects.equals(valueType, SharedPreferenceType.TYPE_BOOLEAN)) {
                classType = Boolean.class;
            }
            return nGetValue(context, sharedPreferenceFileName, key, classType);
        } catch (Exception e) {
            //TODO Check StackTrace Printing
            e.printStackTrace();
            return null;
        }
    }

    String encryptAESGCM(String message, String key) throws Exception {
        return nEncryptAESGCMSS(message, key);
    }

    byte[] encryptAESGCM(byte[] data, byte[] key, byte[]
            randomBytes) throws Exception {
        return nEncryptAESGCMBBB(data, key, randomBytes);
    }

    String decryptAESGCM(String message, String key) throws Exception {
        return nDecryptAESGCMSS(message, key);
    }

    byte[] decryptAESGCM(byte[] data, byte[] key, byte[]
            randomBytes) throws Exception {
        return nDecryptAESGCMBBB(data, key, randomBytes);
    }

    String getKeyAttestation(String alias) throws Exception {
        return nGetKeyAttestation(alias);
    }


    String createAsymmetricECKeyPair(String alias) throws Exception {
        return nCreateAsymmetricECKeyPair(alias);
    }


    String createAsymmetricRSAKeyPair(String alias, Object enableBiometric) throws Exception {
        return nCreateAsymmetricRSAKeyPair(alias, enableBiometric);
    }

    SecretKey createKey(String alias) throws Exception {
        return nCreateKey(alias);
    }

    byte[] encryptData(String data, PublicKey issuerPublicKy) throws Exception {
        return nEncryptData(data, issuerPublicKy);
    }

    boolean verify(String plainText, String sig, PublicKey publicKey) throws Exception {
        return nVerify(plainText, sig, publicKey);
    }

    boolean verifyEcSignature(String payload, String sig, PublicKey publicKey) throws Exception {
        return nVerifyEcSignature(payload, sig, publicKey);
    }



    byte[] getRandomSalt() throws Exception {
        return nGetRandomSalt();
    }

    byte[] signWithKey(String payload, String alias, boolean isEcAlgo) throws Exception {
        return nSignWithKey(payload, alias, isEcAlgo);
    }

    public static void checkBindingState() {
        nCheckBindingState();
    }

    void enableUPILITEX() {
        nEnableUPILITEX();
    }

    byte[] getSecretKey(String algo) throws Exception {
        return nGetSecretKey(algo);
    }

    KeyPair createKeyRSA(String alias) throws Exception {
        return nCreateKeyRSA(alias);
    }

    String encryptVaultData(String algo, String vaultData, SecretKey secretKey) throws Exception {
        return nEncryptVaultData(algo, vaultData, secretKey);
    }

    String decryptVaultData(String algo, String encryptedVaultData, SecretKey secretKey, String randomBytes) throws Exception {
        return nDecryptVaultData(algo, encryptedVaultData, secretKey, randomBytes);
    }

    byte[] decrypt(String data, PrivateKey privateKey) throws Exception {
        return nDecryptS(data, privateKey);
    }

    byte[] decrypt(String algo, java.security.Key key, byte[] iv, byte[] data) throws Exception {
        return nDecryptB(algo, key, iv, data);
    }

    byte[] getEncryptedData(String algo, java.security.Key key, byte[] iv, byte[] data) throws Exception {
        return nGetEncryptedData(algo, key, iv, data);
    }

    void deleteFromSharedPreference(String filename, String[] keys, Context mContext) throws Exception {
        nDeleteFromSharedPreference(filename, keys, mContext);
    }

    private native void nStoreValue(Context context, String sharedPreferenceFileName, String key, Object obj) throws Exception;

    private static native Object nGetValue(Context context, String sharedPrefFileName, String key, Class<?> classType) throws Exception;

    private static native String nEncryptAESGCMSS(String message, String key) throws Exception;

    private static native byte[] nEncryptAESGCMBBB(byte[] data, byte[] key, byte[]
            randomBytes) throws Exception;

    private static native String nDecryptAESGCMSS(String message, String key) throws Exception;

    private static native byte[] nDecryptAESGCMBBB(byte[] data, byte[] key, byte[]
            randomBytes) throws Exception;

    private static native String nGetKeyAttestation(String alias) throws Exception;

    private static native String nCreateAsymmetricECKeyPair(String alias) throws Exception;

    private static native String nCreateAsymmetricRSAKeyPair(String alias, Object enableBiometric) throws Exception;

    private static native SecretKey nCreateKey(String alias) throws Exception;

    private static native byte[] nEncryptData(String data, PublicKey issuerPublicKy) throws Exception;

    private static native boolean nVerify(String plainText, String sig, PublicKey publicKey) throws Exception;

    private static native boolean nVerifyEcSignature(String payload, String sig, PublicKey publicKey) throws Exception;




    private static native byte[] nGetRandomSalt() throws Exception;

    private static native byte[] nSignWithKey(String payload, String alias, boolean isEcAlgo) throws Exception;


    // -----------new functions------------------
    public static native void nCheckBindingState();

    public static native void nEnableUPILITEX();

    public static native byte[] nGetSecretKey(String algo) throws Exception; //tested

    public static native KeyPair nCreateKeyRSA(String alias) throws Exception; //tested

    public static native String nEncryptVaultData(String algo, String vaultData, SecretKey secretKey) throws Exception; //tested

    public static native String nDecryptVaultData(String algo, String encryptedVaultData, SecretKey secretKey, String randomBytes) throws Exception; //tested

    public static native byte[] nDecryptS(String data, PrivateKey privateKey) throws Exception; //tested

    public static native byte[] nDecryptB(String algo, java.security.Key key, byte[] iv, byte[] data) throws Exception;

    public static native byte[] nGetEncryptedData(String algo, java.security.Key key, byte[] iv, byte[] data) throws Exception;

    public static native void nDeleteFromSharedPreference(String filename, String[] keys, Context mContext) throws Exception; //tested

}

package org.npci.upi.security.pinactivitycomponent;


import android.content.Context;

import org.npci.upi.security.pinactivitycomponent.npciprotector.constants.SharedPreferenceType;

import java.security.KeyPair;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.util.Objects;

import javax.crypto.SecretKey;

public final class OfflineNativeDefenderService {

    static {
        System.loadLibrary("SecureComponent");
    }

    public static void enable() {
    }

    private static String alias = null;

    private OfflineNativeDefenderService() {
    }

    private OfflineNativeDefenderService(String aliasHash) {
        alias = aliasHash;
    }

    private static OfflineNativeDefenderService offlineNativeDefenderService = null;


    public static synchronized OfflineNativeDefenderService getInstance() {
        if (offlineNativeDefenderService == null) {
            offlineNativeDefenderService = new OfflineNativeDefenderService();
        }
        return offlineNativeDefenderService;
    }

    public static synchronized OfflineNativeDefenderService getInstance(String aliasHash) {
        if (offlineNativeDefenderService == null || !(aliasHash.equals(alias))) {
            offlineNativeDefenderService = new OfflineNativeDefenderService(aliasHash);
        }
        return offlineNativeDefenderService;
    }

    void putDataInSharedPreference(Context context, String fileNamePostfix, String key, Object objValue) {
        try {
            setValue(context, "Data" + fileNamePostfix, key, objValue);
        } catch (Exception e) {
            //TODO Check StackTrace Printing
            e.printStackTrace();
        }
    }

    Object getDataFromSharedPreference(Context context, String fileNamePostfix, String key, String valueType) {
        try {
            //Class<?> classType = null;
            Class<?> classType = String.class;
            if (Objects.equals(valueType, SharedPreferenceType.TYPE_INTEGER)) {
                classType = Integer.class;
            } else if (Objects.equals(valueType, SharedPreferenceType.TYPE_BOOLEAN)) {
                classType = Boolean.class;
            }
            return nOfflineGetValue(context, "Data" + fileNamePostfix, key, classType);
        } catch (Exception e) {
            //TODO Check StackTrace Printing
            e.printStackTrace();
            return null;
        }
    }

    void putValueInNPCIVault(Context context, String key, Object objValue) {
        try {
            setValue(context, CLConstants.SHARED_PREFERENCE_VAULT, key, objValue);
        } catch (Exception e) {
            //TODO Check StackTrace Printing
            e.printStackTrace();
        }
    }

    Object getValueFromNPCIVault(Context context, String key, String valueType) {
        try {
            Class<?> classType = null;
            if (Objects.equals(valueType, SharedPreferenceType.TYPE_STRING)) {
                classType = String.class;
            } else if (Objects.equals(valueType, SharedPreferenceType.TYPE_INTEGER)) {
                classType = Integer.class;
            } else if (Objects.equals(valueType, SharedPreferenceType.TYPE_BOOLEAN)) {
                classType = Boolean.class;
            }
            return nOfflineGetValue(context, CLConstants.SHARED_PREFERENCE_VAULT, key, classType);
        } catch (Exception e) {
            //TODO Check StackTrace Printing
            e.printStackTrace();
            return null;
        }
    }

    private void setValue(Context context, String sharedPreferenceFileName, String key, Object objValue) {
        try {
            nOfflineStoreValue(context, sharedPreferenceFileName, key, objValue);
        } catch (Exception e) {
            //TODO Check StackTrace Printing
            e.printStackTrace();
        }
    }


    private Object getValue(Context context, String sharedPreferenceFileName, String key, String valueType) {
        try {
            Class<?> classType = null;
            if (Objects.equals(valueType, SharedPreferenceType.TYPE_STRING)) {
                classType = String.class;
            } else if (Objects.equals(valueType, SharedPreferenceType.TYPE_INTEGER)) {
                classType = Integer.class;
            } else if (Objects.equals(valueType, SharedPreferenceType.TYPE_BOOLEAN)) {
                classType = Boolean.class;
            }
            return nOfflineGetValue(context, sharedPreferenceFileName, key, classType);
        } catch (Exception e) {
            //TODO Check StackTrace Printing
            e.printStackTrace();
            return null;
        }
    }

    String encryptAESGCM(String message, String key) throws Exception {
        return nOfflineEncryptAESGCMSS(message, key);
    }

    byte[] encryptAESGCM(byte[] data, byte[] key, byte[]
            randomBytes) throws Exception {
        return nOfflineEncryptAESGCMBBB(data, key, randomBytes);
    }

    String decryptAESGCM(String message, String key) throws Exception {
        return nOfflineDecryptAESGCMSS(message, key);
    }

    byte[] decryptAESGCM(byte[] data, byte[] key, byte[]
            randomBytes) throws Exception {
        return nOfflineDecryptAESGCMBBB(data, key, randomBytes);
    }

    String getKeyAttestation(String alias) throws Exception {
        return nOfflineGetKeyAttestation(alias);
    }


    String createAsymmetricECKeyPair(String alias) throws Exception {
        return nOfflineCreateAsymmetricECKeyPair(alias);
    }


    String createAsymmetricRSAKeyPair(String alias, Object enableBiometric) throws Exception {
        return nOfflineCreateAsymmetricRSAKeyPair(alias, enableBiometric);
    }

    SecretKey createKey(String alias) throws Exception {
        return nOfflineCreateKey(alias);
    }

    byte[] encryptData(String data, PublicKey issuerPublicKy) throws Exception {
        return nOfflineEncryptData(data, issuerPublicKy);
    }

    boolean verify(String plainText, String sig, PublicKey publicKey) throws Exception {
        return nOfflineVerify(plainText, sig, publicKey);
    }

    boolean verifyEcSignature(String payload, String sig, PublicKey publicKey) throws Exception {
        return nOfflineVerifyEcSignature(payload, sig, publicKey);
    }



    byte[] getRandomSalt() throws Exception {
        return nOfflineGetRandomSalt();
    }

    byte[] signWithKey(String payload, String alias, boolean isEcAlgo) throws Exception {
        return nOfflineSignWithKey(payload, alias, isEcAlgo);
    }



    byte[] getSecretKey(String algo) throws Exception {
        return nOfflineGetSecretKey(algo);
    }

    KeyPair createKeyRSA(String alias) throws Exception {
        return nOfflineCreateKeyRSA(alias);
    }

    String encryptVaultData(String algo, String vaultData, SecretKey secretKey) throws Exception {
        return nOfflineEncryptVaultData(algo, vaultData, secretKey);
    }

    String decryptVaultData(String algo, String encryptedVaultData, SecretKey secretKey, String randomBytes) throws Exception {
        return nOfflineDecryptVaultData(algo, encryptedVaultData, secretKey, randomBytes);
    }

    byte[] decrypt(String data, PrivateKey privateKey) throws Exception {
        return nOfflineDecryptS(data, privateKey);
    }

    byte[] decrypt(String algo, java.security.Key key, byte[] iv, byte[] data) throws Exception {
        return nOfflineDecryptB(algo, key, iv, data);
    }

    byte[] getEncryptedData(String algo, java.security.Key key, byte[] iv, byte[] data) throws Exception {
        return nOfflineGetEncryptedData(algo, key, iv, data);
    }

    void deleteFromSharedPreference(String filename, String[] keys, Context mContext) throws Exception {
        nOfflineDeleteFromSharedPreference(filename, keys, mContext);
    }

    private native void nOfflineStoreValue(Context context, String sharedPreferenceFileName, String key, Object obj) throws Exception;

    private static native Object nOfflineGetValue(Context context, String sharedPrefFileName, String key, Class<?> classType) throws Exception;

    private static native String nOfflineEncryptAESGCMSS(String message, String key) throws Exception;

    private static native byte[] nOfflineEncryptAESGCMBBB(byte[] data, byte[] key, byte[]
            randomBytes) throws Exception;

    private static native String nOfflineDecryptAESGCMSS(String message, String key) throws Exception;

    private static native byte[] nOfflineDecryptAESGCMBBB(byte[] data, byte[] key, byte[]
            randomBytes) throws Exception;

    private static native String nOfflineGetKeyAttestation(String alias) throws Exception;

    private static native String nOfflineCreateAsymmetricECKeyPair(String alias) throws Exception;

    private static native String nOfflineCreateAsymmetricRSAKeyPair(String alias, Object enableBiometric) throws Exception;

    private static native SecretKey nOfflineCreateKey(String alias) throws Exception;

    private static native byte[] nOfflineEncryptData(String data, PublicKey issuerPublicKy) throws Exception;

    private static native boolean nOfflineVerify(String plainText, String sig, PublicKey publicKey) throws Exception;

    private static native boolean nOfflineVerifyEcSignature(String payload, String sig, PublicKey publicKey) throws Exception;




    private static native byte[] nOfflineGetRandomSalt() throws Exception;

    private static native byte[] nOfflineSignWithKey(String payload, String alias, boolean isEcAlgo) throws Exception;


    // -----------new functions------------------


    public static native byte[] nOfflineGetSecretKey(String algo) throws Exception; //tested

    public static native KeyPair nOfflineCreateKeyRSA(String alias) throws Exception; //tested

    public static native String nOfflineEncryptVaultData(String algo, String vaultData, SecretKey secretKey) throws Exception; //tested

    public static native String nOfflineDecryptVaultData(String algo, String encryptedVaultData, SecretKey secretKey, String randomBytes) throws Exception; //tested

    public static native byte[] nOfflineDecryptS(String data, PrivateKey privateKey) throws Exception; //tested

    public static native byte[] nOfflineDecryptB(String algo, java.security.Key key, byte[] iv, byte[] data) throws Exception;

    public static native byte[] nOfflineGetEncryptedData(String algo, java.security.Key key, byte[] iv, byte[] data) throws Exception;

    public static native void nOfflineDeleteFromSharedPreference(String filename, String[] keys, Context mContext) throws Exception; //tested




}