增加一个手动释放rust string的方法
This commit is contained in:
parent
14a9ca9671
commit
f3cddf9f8e
@ -116,15 +116,27 @@ public:
|
|||||||
inline char* getTmpPass() {return tmp_pass;}
|
inline char* getTmpPass() {return tmp_pass;}
|
||||||
inline char* getKeySeed() {return key_seed;}
|
inline char* getKeySeed() {return key_seed;}
|
||||||
void setKeyMaster(const char *val) {
|
void setKeyMaster(const char *val) {
|
||||||
|
if (key_master != nullptr) {
|
||||||
|
free(key_master);
|
||||||
|
}
|
||||||
key_master = strdup(val);
|
key_master = strdup(val);
|
||||||
}
|
}
|
||||||
void setKeySecond(const char *val) {
|
void setKeySecond(const char *val) {
|
||||||
|
if (key_second != nullptr) {
|
||||||
|
free(key_second);
|
||||||
|
}
|
||||||
key_second = strdup(val);
|
key_second = strdup(val);
|
||||||
}
|
}
|
||||||
void setTmpPass(const char *val) {
|
void setTmpPass(const char *val) {
|
||||||
|
if (tmp_pass != nullptr) {
|
||||||
|
free(tmp_pass);
|
||||||
|
}
|
||||||
tmp_pass = strdup(val);
|
tmp_pass = strdup(val);
|
||||||
}
|
}
|
||||||
void setKeySeed(const char *val) {
|
void setKeySeed(const char *val) {
|
||||||
|
if (key_seed != nullptr) {
|
||||||
|
free(key_seed);
|
||||||
|
}
|
||||||
key_seed = strdup(val);
|
key_seed = strdup(val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1282,16 +1282,19 @@ static bool JSB_prepareWallet(se::State &s)
|
|||||||
std::string pass;
|
std::string pass;
|
||||||
ok = seval_to_std_string(args[4], &pass);
|
ok = seval_to_std_string(args[4], &pass);
|
||||||
SE_PRECONDITION2(ok, false, "Error processing pass");
|
SE_PRECONDITION2(ok, false, "Error processing pass");
|
||||||
std::string localSKey = generate_client_key(pass.c_str(), openid.c_str(), salt.c_str());
|
auto localSKey = generate_client_key(pass.c_str(), openid.c_str(), salt.c_str());
|
||||||
Application::getInstance()->setKeyMaster(keyMaster.c_str());
|
Application::getInstance()->setKeyMaster(keyMaster.c_str());
|
||||||
Application::getInstance()->setKeySecond(localSKey.c_str());
|
Application::getInstance()->setKeySecond(localSKey);
|
||||||
std::string seed = keccak256_hash((id + openid + salt).c_str());
|
free_cstr(localSKey);
|
||||||
Application::getInstance()->setKeySeed(seed.c_str());
|
auto seed = keccak256_hash((id + openid + salt).c_str());
|
||||||
std::string address = get_address(
|
Application::getInstance()->setKeySeed(seed);
|
||||||
|
free_cstr(seed);
|
||||||
|
auto address = get_address(
|
||||||
Application::getInstance()->getKeySeed(),
|
Application::getInstance()->getKeySeed(),
|
||||||
Application::getInstance()->getKeyMaster(),
|
Application::getInstance()->getKeyMaster(),
|
||||||
Application::getInstance()->getKeySecond());
|
Application::getInstance()->getKeySecond());
|
||||||
s.rval().setString(address);
|
s.rval().setString(address);
|
||||||
|
free_cstr(address);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1322,21 +1325,25 @@ static bool JSB_walletSecKey(se::State &s)
|
|||||||
std::string pass;
|
std::string pass;
|
||||||
ok = seval_to_std_string(args[4], &pass);
|
ok = seval_to_std_string(args[4], &pass);
|
||||||
SE_PRECONDITION2(ok, false, "Error processing pass");
|
SE_PRECONDITION2(ok, false, "Error processing pass");
|
||||||
std::string localSKey = generate_client_key(pass.c_str(), openid.c_str(), salt.c_str());
|
auto localSKey = generate_client_key(pass.c_str(), openid.c_str(), salt.c_str());
|
||||||
std::string seed = keccak256_hash((id + openid + salt).c_str());
|
auto seed = keccak256_hash((id + openid + salt).c_str());
|
||||||
std::string address = get_address(
|
auto address = get_address(
|
||||||
seed.c_str(),
|
seed,
|
||||||
keyMaster.c_str(),
|
keyMaster.c_str(),
|
||||||
localSKey.c_str());
|
localSKey);
|
||||||
std::string key_str = generate_sec_key(
|
auto key_str = generate_sec_key(
|
||||||
seed.c_str(),
|
seed,
|
||||||
keyMaster.c_str(),
|
keyMaster.c_str(),
|
||||||
localSKey.c_str());
|
localSKey);
|
||||||
std::string result = StringUtils::format("{\"address\": \"%s\",\"key\": \"%s\"}\n",
|
std::string result = StringUtils::format("{\"address\": \"%s\",\"key\": \"%s\"}\n",
|
||||||
address.c_str(),
|
address,
|
||||||
key_str.c_str());
|
key_str);
|
||||||
|
|
||||||
s.rval().setString(result);
|
s.rval().setString(result);
|
||||||
|
free_cstr(localSKey);
|
||||||
|
free_cstr(seed);
|
||||||
|
free_cstr(address);
|
||||||
|
free_cstr(key_str);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1355,8 +1362,9 @@ static bool JSB_hashSvrPass(se::State &s)
|
|||||||
std::string pass;
|
std::string pass;
|
||||||
ok = seval_to_std_string(args[0], &pass);
|
ok = seval_to_std_string(args[0], &pass);
|
||||||
SE_PRECONDITION2(ok, false, "Error processing pass");
|
SE_PRECONDITION2(ok, false, "Error processing pass");
|
||||||
std::string hashstr = hash_pass_svr(pass.c_str());
|
auto hashstr = hash_pass_svr(pass.c_str());
|
||||||
s.rval().setString(hashstr);
|
s.rval().setString(hashstr);
|
||||||
|
free_cstr(hashstr);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1375,12 +1383,13 @@ static bool JSB_walletSign(se::State &s)
|
|||||||
std::string msg;
|
std::string msg;
|
||||||
ok = seval_to_std_string(args[0], &msg);
|
ok = seval_to_std_string(args[0], &msg);
|
||||||
SE_PRECONDITION2(ok, false, "Error processing seed");
|
SE_PRECONDITION2(ok, false, "Error processing seed");
|
||||||
std::string sign_str = sign(
|
auto sign_str = sign(
|
||||||
Application::getInstance()->getKeySeed(),
|
Application::getInstance()->getKeySeed(),
|
||||||
Application::getInstance()->getKeyMaster(),
|
Application::getInstance()->getKeyMaster(),
|
||||||
Application::getInstance()->getKeySecond(),
|
Application::getInstance()->getKeySecond(),
|
||||||
msg.c_str());
|
msg.c_str());
|
||||||
s.rval().setString(sign_str);
|
s.rval().setString(sign_str);
|
||||||
|
free_cstr(sign_str);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1406,8 +1415,9 @@ static bool JSB_preRegistClient(se::State &s)
|
|||||||
value = ramdonKey();
|
value = ramdonKey();
|
||||||
store_encrypt_item(key, value);
|
store_encrypt_item(key, value);
|
||||||
}
|
}
|
||||||
string result = simple_sign(msg.c_str(), value.c_str());
|
auto result = simple_sign(msg.c_str(), value.c_str());
|
||||||
s.rval().setString(result);
|
s.rval().setString(result);
|
||||||
|
free_cstr(result);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1449,9 +1459,10 @@ static bool JSB_parseRelayAESKey(se::State &s)
|
|||||||
ok = load_encrypt_item("relay_rsa_sk", &sk_rsa);
|
ok = load_encrypt_item("relay_rsa_sk", &sk_rsa);
|
||||||
SE_PRECONDITION2(ok, false, "No local RSA private key found");
|
SE_PRECONDITION2(ok, false, "No local RSA private key found");
|
||||||
|
|
||||||
string key_aes = rsa_decrypt(key_encrypted.c_str(), sk_rsa.c_str());
|
auto key_aes = rsa_decrypt(key_encrypted.c_str(), sk_rsa.c_str());
|
||||||
CCLOG("aes key: %s", key_aes.c_str());
|
CCLOG("aes key: %s", key_aes);
|
||||||
store_encrypt_item("relay_aes_key", key_aes);
|
store_encrypt_item("relay_aes_key", key_aes);
|
||||||
|
free_cstr(key_aes);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1528,12 +1539,13 @@ static bool JSB_walletSignTran(se::State &s)
|
|||||||
std::string msg;
|
std::string msg;
|
||||||
ok = seval_to_std_string(args[0], &msg);
|
ok = seval_to_std_string(args[0], &msg);
|
||||||
SE_PRECONDITION2(ok, false, "Error processing seed");
|
SE_PRECONDITION2(ok, false, "Error processing seed");
|
||||||
std::string sign_str = sign_for_tran(
|
auto sign_str = sign_for_tran(
|
||||||
Application::getInstance()->getKeySeed(),
|
Application::getInstance()->getKeySeed(),
|
||||||
Application::getInstance()->getKeyMaster(),
|
Application::getInstance()->getKeyMaster(),
|
||||||
Application::getInstance()->getKeySecond(),
|
Application::getInstance()->getKeySecond(),
|
||||||
msg.c_str());
|
msg.c_str());
|
||||||
s.rval().setString(sign_str);
|
s.rval().setString(sign_str);
|
||||||
|
free_cstr(sign_str);
|
||||||
// free_cwallet(wallet);
|
// free_cwallet(wallet);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -1553,8 +1565,9 @@ static bool JSB_hexDeflate(se::State &s)
|
|||||||
std::string value;
|
std::string value;
|
||||||
ok = seval_to_std_string(args[0], &value);
|
ok = seval_to_std_string(args[0], &value);
|
||||||
SE_PRECONDITION2(ok, false, "Error processing arguments");
|
SE_PRECONDITION2(ok, false, "Error processing arguments");
|
||||||
std::string result = hex_deflate(value.c_str());
|
auto result = hex_deflate(value.c_str());
|
||||||
s.rval().setString(result);
|
s.rval().setString(result);
|
||||||
|
free_cstr(result);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1);
|
SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1);
|
||||||
@ -1572,8 +1585,9 @@ static bool JSB_hexInflate(se::State &s)
|
|||||||
std::string value;
|
std::string value;
|
||||||
ok = seval_to_std_string(args[0], &value);
|
ok = seval_to_std_string(args[0], &value);
|
||||||
SE_PRECONDITION2(ok, false, "Error processing arguments");
|
SE_PRECONDITION2(ok, false, "Error processing arguments");
|
||||||
std::string result = hex_inflate(value.c_str());
|
auto result = hex_inflate(value.c_str());
|
||||||
s.rval().setString(result);
|
s.rval().setString(result);
|
||||||
|
free_cstr(result);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1);
|
SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 1);
|
||||||
@ -1591,12 +1605,13 @@ static bool JSB_walletEncrypt(se::State &s)
|
|||||||
std::string msg;
|
std::string msg;
|
||||||
ok = seval_to_std_string(args[0], &msg);
|
ok = seval_to_std_string(args[0], &msg);
|
||||||
SE_PRECONDITION2(ok, false, "Error processing msg");
|
SE_PRECONDITION2(ok, false, "Error processing msg");
|
||||||
std::string str_encrypt = wallet_encrypt(
|
auto str_encrypt = wallet_encrypt(
|
||||||
Application::getInstance()->getKeySeed(),
|
Application::getInstance()->getKeySeed(),
|
||||||
Application::getInstance()->getKeyMaster(),
|
Application::getInstance()->getKeyMaster(),
|
||||||
Application::getInstance()->getKeySecond(),
|
Application::getInstance()->getKeySecond(),
|
||||||
msg.c_str());
|
msg.c_str());
|
||||||
s.rval().setString(str_encrypt);
|
s.rval().setString(str_encrypt);
|
||||||
|
free_cstr(str_encrypt);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1618,10 +1633,11 @@ static bool JSB_rencrypt(se::State &s)
|
|||||||
std::string msg;
|
std::string msg;
|
||||||
ok = seval_to_std_string(args[1], &msg);
|
ok = seval_to_std_string(args[1], &msg);
|
||||||
SE_PRECONDITION2(ok, false, "Error processing msg");
|
SE_PRECONDITION2(ok, false, "Error processing msg");
|
||||||
std::string str_encrypt = rencrypt(
|
auto str_encrypt = rencrypt(
|
||||||
pk.c_str(),
|
pk.c_str(),
|
||||||
msg.c_str());
|
msg.c_str());
|
||||||
s.rval().setString(str_encrypt);
|
s.rval().setString(str_encrypt);
|
||||||
|
free_cstr(str_encrypt);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1640,12 +1656,13 @@ static bool JSB_walletDecrypt(se::State &s)
|
|||||||
std::string msg;
|
std::string msg;
|
||||||
ok = seval_to_std_string(args[0], &msg);
|
ok = seval_to_std_string(args[0], &msg);
|
||||||
SE_PRECONDITION2(ok, false, "Error processing seed");
|
SE_PRECONDITION2(ok, false, "Error processing seed");
|
||||||
std::string str_encrypt = wallet_decrypt(
|
auto str_encrypt = wallet_decrypt(
|
||||||
Application::getInstance()->getKeySeed(),
|
Application::getInstance()->getKeySeed(),
|
||||||
Application::getInstance()->getKeyMaster(),
|
Application::getInstance()->getKeyMaster(),
|
||||||
Application::getInstance()->getKeySecond(),
|
Application::getInstance()->getKeySecond(),
|
||||||
msg.c_str());
|
msg.c_str());
|
||||||
s.rval().setString(str_encrypt);
|
s.rval().setString(str_encrypt);
|
||||||
|
free_cstr(str_encrypt);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1656,8 +1673,9 @@ SE_BIND_FUNC(JSB_walletDecrypt)
|
|||||||
|
|
||||||
void store_encrypt_item(string key, string value) {
|
void store_encrypt_item(string key, string value) {
|
||||||
string pk = getpk();
|
string pk = getpk();
|
||||||
string str_encrypt = aes_encrypt(value.c_str(), pk.c_str());
|
auto str_encrypt = aes_encrypt(value.c_str(), pk.c_str());
|
||||||
localStorageSetItem(key, str_encrypt);
|
localStorageSetItem(key, str_encrypt);
|
||||||
|
free_cstr(str_encrypt);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool load_encrypt_item(string key, string *value) {
|
bool load_encrypt_item(string key, string *value) {
|
||||||
|
2
external/ios/include/rustwallet/rustwallet.h
vendored
2
external/ios/include/rustwallet/rustwallet.h
vendored
@ -57,3 +57,5 @@ char *rsa_key_pair(void);
|
|||||||
char *rsa_encrypt(const char *content, const char *p_key);
|
char *rsa_encrypt(const char *content, const char *p_key);
|
||||||
|
|
||||||
char *rsa_decrypt(const char *content, const char *s_key);
|
char *rsa_decrypt(const char *content, const char *s_key);
|
||||||
|
|
||||||
|
void free_cstr(char *s);
|
||||||
|
BIN
external/ios/libs/librustwallet.a
vendored
BIN
external/ios/libs/librustwallet.a
vendored
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user