diff --git a/cocos/scripting/js-bindings/manual/jsb_global.cpp b/cocos/scripting/js-bindings/manual/jsb_global.cpp index a1b64b9..dda9159 100644 --- a/cocos/scripting/js-bindings/manual/jsb_global.cpp +++ b/cocos/scripting/js-bindings/manual/jsb_global.cpp @@ -43,8 +43,10 @@ extern "C" #include #include "scrypt/native-crypto.h" +#include "storage/local-storage/LocalStorage.h" using namespace cocos2d; +using namespace std; se::Object *__jsbObj = nullptr; se::Object *__glObj = nullptr; @@ -1365,6 +1367,37 @@ static bool JSB_walletSign(se::State &s) return false; } SE_BIND_FUNC(JSB_walletSign) +// for relay, generate tmp address and signature +static bool JSB_preRegistClient(se::State &s) +{ + const auto &args = s.args(); + size_t argc = args.size(); + CC_UNUSED bool ok = true; + if (argc > 0) + { + string msg; + ok = seval_to_std_string(args[0], &msg); + SE_PRECONDITION2(ok, false, "Error processing msg"); + string key = "tmp_client_info"; + string value; + ok = localStorageGetItem(key, &value); + string pk = getpk(); + if (!ok) { + value = ramdonKey(); + string str_encrypt = aes_encrypt(value.c_str(), pk.c_str()); + localStorageSetItem(key, str_encrypt); + } else { + value = aes_decrypt(value.c_str(), pk.c_str()); + } + string result = simple_sign(msg.c_str(), value.c_str()); + s.rval().setString(result); + return true; + } + + SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1); + return false; +} +SE_BIND_FUNC(JSB_preRegistClient) static bool JSB_saveLocalStorage(se::State &s) { @@ -1555,9 +1588,12 @@ std::string decrypt_aes(std::string &content, std::string &key) { return aes_decrypt(content.c_str(), key.c_str()); } +std::string getpk() { + return "02aaaafbd375639879d6a694893dd14413662d90c59abaceb6cc4c791aa0834352"; +} std::string generate_clientid(std::string &msg) { - std::string pk = "02aaaafbd375639879d6a694893dd14413662d90c59abaceb6cc4c791aa0834352"; + std::string pk = getpk(); // attach client id to msg std::string msg_str = msg; msg_str += "_clientid"; @@ -1612,6 +1648,7 @@ bool jsb_register_global_variables(se::Object *global) __jsbObj->defineFunction("prepareWallet", _SE(JSB_prepareWallet)); __jsbObj->defineFunction("hashSvrPass", _SE(JSB_hashSvrPass)); __jsbObj->defineFunction("walletSign", _SE(JSB_walletSign)); + __jsbObj->defineFunction("preRegistClient", _SE(JSB_preRegistClient)); __jsbObj->defineFunction("walletSignTran", _SE(JSB_walletSignTran)); __jsbObj->defineFunction("walletSecKey", _SE(JSB_walletSecKey)); __jsbObj->defineFunction("hexDeflate", _SE(JSB_hexDeflate)); diff --git a/cocos/scripting/js-bindings/manual/jsb_global.h b/cocos/scripting/js-bindings/manual/jsb_global.h index e941d15..c85480b 100644 --- a/cocos/scripting/js-bindings/manual/jsb_global.h +++ b/cocos/scripting/js-bindings/manual/jsb_global.h @@ -53,3 +53,4 @@ bool jsb_global_load_image(const std::string &path, const se::Value &callbackVal std::string encrypt_aes(std::string &content, std::string &key); std::string decrypt_aes(std::string &content, std::string &key); std::string generate_clientid(std::string &content); +std::string getpk(); diff --git a/external/android/arm64-v8a/include/rustwallet/rustwallet.h b/external/android/arm64-v8a/include/rustwallet/rustwallet.h index 596038f..d481994 100644 --- a/external/android/arm64-v8a/include/rustwallet/rustwallet.h +++ b/external/android/arm64-v8a/include/rustwallet/rustwallet.h @@ -18,6 +18,8 @@ char *sign_for_tran(const char *msg_key, char *rencrypt(const char *pk, const char *msg); +char *rdecrypt(const char *sk, const char *msg); + char *wallet_encrypt(const char *msg_key, const char *master_key, const char *second_key, @@ -45,3 +47,7 @@ char *local_pass_hasher(const char *password); bool verify_local_pass(const char *password, const char *pass_hash); char *generate_client_key(const char *password, const char *openid, const char *salt); + +char *simple_sign(const char *content, const char *key); + +char *ramdonKey(void); diff --git a/external/android/arm64-v8a/librustwallet.a b/external/android/arm64-v8a/librustwallet.a index 958d94e..321d4ba 100644 Binary files a/external/android/arm64-v8a/librustwallet.a and b/external/android/arm64-v8a/librustwallet.a differ diff --git a/external/android/armeabi-v7a/include/rustwallet/rustwallet.h b/external/android/armeabi-v7a/include/rustwallet/rustwallet.h index 596038f..d481994 100644 --- a/external/android/armeabi-v7a/include/rustwallet/rustwallet.h +++ b/external/android/armeabi-v7a/include/rustwallet/rustwallet.h @@ -18,6 +18,8 @@ char *sign_for_tran(const char *msg_key, char *rencrypt(const char *pk, const char *msg); +char *rdecrypt(const char *sk, const char *msg); + char *wallet_encrypt(const char *msg_key, const char *master_key, const char *second_key, @@ -45,3 +47,7 @@ char *local_pass_hasher(const char *password); bool verify_local_pass(const char *password, const char *pass_hash); char *generate_client_key(const char *password, const char *openid, const char *salt); + +char *simple_sign(const char *content, const char *key); + +char *ramdonKey(void); diff --git a/external/android/armeabi-v7a/librustwallet.a b/external/android/armeabi-v7a/librustwallet.a index 841bb36..f7a965e 100644 Binary files a/external/android/armeabi-v7a/librustwallet.a and b/external/android/armeabi-v7a/librustwallet.a differ diff --git a/external/android/x86/include/rustwallet/rustwallet.h b/external/android/x86/include/rustwallet/rustwallet.h index 596038f..d481994 100644 --- a/external/android/x86/include/rustwallet/rustwallet.h +++ b/external/android/x86/include/rustwallet/rustwallet.h @@ -18,6 +18,8 @@ char *sign_for_tran(const char *msg_key, char *rencrypt(const char *pk, const char *msg); +char *rdecrypt(const char *sk, const char *msg); + char *wallet_encrypt(const char *msg_key, const char *master_key, const char *second_key, @@ -45,3 +47,7 @@ char *local_pass_hasher(const char *password); bool verify_local_pass(const char *password, const char *pass_hash); char *generate_client_key(const char *password, const char *openid, const char *salt); + +char *simple_sign(const char *content, const char *key); + +char *ramdonKey(void); diff --git a/external/android/x86/librustwallet.a b/external/android/x86/librustwallet.a index 75dadac..a5130ff 100644 Binary files a/external/android/x86/librustwallet.a and b/external/android/x86/librustwallet.a differ diff --git a/external/android/x86_64/include/rustwallet/rustwallet.h b/external/android/x86_64/include/rustwallet/rustwallet.h index 596038f..d481994 100644 --- a/external/android/x86_64/include/rustwallet/rustwallet.h +++ b/external/android/x86_64/include/rustwallet/rustwallet.h @@ -18,6 +18,8 @@ char *sign_for_tran(const char *msg_key, char *rencrypt(const char *pk, const char *msg); +char *rdecrypt(const char *sk, const char *msg); + char *wallet_encrypt(const char *msg_key, const char *master_key, const char *second_key, @@ -45,3 +47,7 @@ char *local_pass_hasher(const char *password); bool verify_local_pass(const char *password, const char *pass_hash); char *generate_client_key(const char *password, const char *openid, const char *salt); + +char *simple_sign(const char *content, const char *key); + +char *ramdonKey(void); diff --git a/external/android/x86_64/librustwallet.a b/external/android/x86_64/librustwallet.a index 416b7e0..654cda5 100644 Binary files a/external/android/x86_64/librustwallet.a and b/external/android/x86_64/librustwallet.a differ diff --git a/external/ios/include/rustwallet/rustwallet.h b/external/ios/include/rustwallet/rustwallet.h index 596038f..d481994 100644 --- a/external/ios/include/rustwallet/rustwallet.h +++ b/external/ios/include/rustwallet/rustwallet.h @@ -18,6 +18,8 @@ char *sign_for_tran(const char *msg_key, char *rencrypt(const char *pk, const char *msg); +char *rdecrypt(const char *sk, const char *msg); + char *wallet_encrypt(const char *msg_key, const char *master_key, const char *second_key, @@ -45,3 +47,7 @@ char *local_pass_hasher(const char *password); bool verify_local_pass(const char *password, const char *pass_hash); char *generate_client_key(const char *password, const char *openid, const char *salt); + +char *simple_sign(const char *content, const char *key); + +char *ramdonKey(void); diff --git a/external/ios/libs/librustwallet.a b/external/ios/libs/librustwallet.a index 6dad2c7..4f919ad 100644 Binary files a/external/ios/libs/librustwallet.a and b/external/ios/libs/librustwallet.a differ