SKALE-2830 fix memory leaks

parent 615056d8
......@@ -51,20 +51,6 @@
#include "third_party/spdlog/spdlog.h"
#include "common.h"
std::string *FqToString(libff::alt_bn128_Fq *_fq) {
mpz_t t;
mpz_init(t);
_fq->as_bigint().to_mpz(t);
char arr[mpz_sizeinbase(t, 10) + 2];
char *tmp = mpz_get_str(arr, 10, t);
mpz_clear(t);
return new std::string(tmp);
}
int char2int(char _input) {
if (_input >= '0' && _input <= '9')
return _input - '0';
......@@ -170,38 +156,29 @@ bool sign_aes(const char *_encryptedKeyHex, const char *_hashHex, size_t _t, siz
std::pair<libff::alt_bn128_G1, std::string> hash_with_hint = obj->HashtoG1withHint(hash);
string *xStr = FqToString(&(hash_with_hint.first.X));
string xStr = BLSutils::ConvertToString(hash_with_hint.first.X);
if (xStr == nullptr) {
std::cerr << "Null xStr" << std::endl;
BOOST_THROW_EXCEPTION(runtime_error("Null xStr"));
if (xStr.empty()) {
std::cerr << "Empty xStr" << std::endl;
BOOST_THROW_EXCEPTION(runtime_error("Empty xStr"));
}
string *yStr = FqToString(&(hash_with_hint.first.Y));
string yStr = BLSutils::ConvertToString(hash_with_hint.first.Y);
if (yStr == nullptr) {
std::cerr << "Null yStr" << std::endl;
BOOST_THROW_EXCEPTION(runtime_error("Null yStr"));
if (yStr.empty()) {
std::cerr << "Empty yStr" << std::endl;
BOOST_THROW_EXCEPTION(runtime_error("Empty yStr"));
}
char errMsg[BUF_LEN];
memset(errMsg, 0, BUF_LEN);
char xStrArg[BUF_LEN];
char yStrArg[BUF_LEN];
char signature[BUF_LEN];
memset(xStrArg, 0, BUF_LEN);
memset(yStrArg, 0, BUF_LEN);
vector<char> errMsg(BUF_LEN, 0);
strncpy(xStrArg, xStr->c_str(), BUF_LEN);
strncpy(yStrArg, yStr->c_str(), BUF_LEN);
vector<char> signature(BUF_LEN);
size_t sz = 0;
uint8_t encryptedKey[BUF_LEN];
vector<uint8_t> encryptedKey(BUF_LEN);
bool result = hex2carray(_encryptedKeyHex, &sz, encryptedKey);
bool result = hex2carray(_encryptedKeyHex, &sz, encryptedKey.data());
if (!result) {
cerr << "Invalid hex encrypted key" << endl;
......@@ -211,8 +188,8 @@ bool sign_aes(const char *_encryptedKeyHex, const char *_hashHex, size_t _t, siz
int errStatus = 0;
sgx_status_t status =
trustedBlsSignMessageAES(eid, &errStatus, errMsg, encryptedKey,
sz, xStrArg, yStrArg, signature);
trustedBlsSignMessageAES(eid, &errStatus, &errMsg.front(), encryptedKey.data(),
sz, &xStr.front(), &yStr.front(), &signature.front());
if (status != SGX_SUCCESS) {
cerr << "SGX enclave call to trustedBlsSignMessage failed:" << status << std::endl;
......@@ -224,9 +201,9 @@ bool sign_aes(const char *_encryptedKeyHex, const char *_hashHex, size_t _t, siz
BOOST_THROW_EXCEPTION(runtime_error("SGX enclave call to trustedBlsSignMessage failed"));
}
std::string hint = BLSutils::ConvertToString(hash_with_hint.first.Y) + ":" + hash_with_hint.second;
std::string hint = yStr + ":" + hash_with_hint.second;
std::string sig = signature;
std::string sig(signature.begin(), signature.end());
sig.append(":");
sig.append(hint);
......
......@@ -140,7 +140,7 @@ std::string BLSPrivateKeyShareSGX::signWithHelperSGXstr(
bool result = hex2carray(encryptedKeyHex->c_str(), &sz, encryptedKey);
if (!result) {
cerr << "Invalid hex encrypted key" << endl;
cerr << "Invalid hex encrypted key" << endl;
BOOST_THROW_EXCEPTION(std::invalid_argument("Invalid hex encrypted key"));
}
......@@ -176,6 +176,9 @@ std::string BLSPrivateKeyShareSGX::signWithHelperSGXstr(
sig.append(":");
sig.append(hint);
delete xStr;
delete yStr;
return sig;
}
......
......@@ -355,7 +355,7 @@ Json::Value SGXWalletServer::ecdsaSignMessageHashImpl(int _base, const string &_
throw SGXException(INVALID_ECSDA_SIGNATURE, "Invalid ecdsa signature");
}
spdlog::debug("got signature_s {}", signatureVector.at(2));
spdlog::debug("got signature_s {}", signatureVector.at(2));
result["signature_v"] = signatureVector.at(0);
result["signature_r"] = signatureVector.at(1);
......
......@@ -71,6 +71,7 @@ void gen_session_key(char *skey_str, char* pb_keyB, char* common_key) {
mpz_clear(skey);
point_clear(pub_keyB);
point_clear(session_key);
domain_parameters_clear(curve);
free(pb_keyB_x);
free(pb_keyB_y);
......
......@@ -117,6 +117,8 @@ bool enclave_sign(const char *_keyString, const char *_hashXString, const char *
libff::alt_bn128_G1 sign = key->as_bigint() * hash;
delete key;
sign.to_affine_coordinates();
auto r = stringFromG1(&sign);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment