Unverified Commit e37986d6 authored by kladko's avatar kladko

SKALE-3067-cleanup-sgx

parent 43b1c173
...@@ -47,58 +47,79 @@ using namespace std; ...@@ -47,58 +47,79 @@ using namespace std;
string stringFromFr(const libff::alt_bn128_Fr &_el) { string stringFromFr(const libff::alt_bn128_Fr &_el) {
try { string ret = "";
mpz_t t; mpz_t t;
mpz_init(t); mpz_init(t);
try {
_el.as_bigint().to_mpz(t); _el.as_bigint().to_mpz(t);
char arr[mpz_sizeinbase(t, 10) + 2]; SAFE_CHAR_BUF(arr, BUF_LEN);
char *tmp = mpz_get_str(arr, 10, t); char *tmp = mpz_get_str(arr, 10, t);
mpz_clear(t);
return string(tmp);
ret = string(tmp);
} catch (exception &e) { } catch (exception &e) {
LOG_ERROR(e.what()); LOG_ERROR(e.what());
return ""; goto clean;
} catch (...) { } catch (...) {
LOG_ERROR("Unknown throwable"); LOG_ERROR("Unknown throwable");
return ""; goto clean;
} }
clean:
mpz_clear(t);
return ret;
} }
template<class T> template<class T>
string ConvertToString(const T &field_elem, int base = 10) { string ConvertToString(const T &field_elem, int base = 10) {
try {
string ret;
mpz_t t; mpz_t t;
mpz_init(t); mpz_init(t);
try {
field_elem.as_bigint().to_mpz(t); field_elem.as_bigint().to_mpz(t);
char arr[mpz_sizeinbase(t, base) + 2]; SAFE_CHAR_BUF(arr, BUF_LEN);
char *tmp = mpz_get_str(arr, base, t); char *tmp = mpz_get_str(arr, base, t);
mpz_clear(t);
string output = tmp;
return output; ret = string(tmp);
goto clean;
} catch (exception &e) { } catch (exception &e) {
LOG_ERROR(e.what()); LOG_ERROR(e.what());
return ""; goto clean;
} catch (...) { } catch (...) {
LOG_ERROR("Unknown throwable"); LOG_ERROR("Unknown throwable");
return ""; goto clean;
} }
clean:
mpz_clear(t);
return ret;
} }
string ConvertG2ToString(const libff::alt_bn128_G2 &elem, int base = 10, const string &delim = ":") { string ConvertG2ToString(const libff::alt_bn128_G2 &elem, int base = 10, const string &delim = ":") {
string result = "";
try { try {
string result;
result += ConvertToString(elem.X.c0); result += ConvertToString(elem.X.c0);
result += delim; result += delim;
result += ConvertToString(elem.X.c1); result += ConvertToString(elem.X.c1);
...@@ -107,23 +128,28 @@ string ConvertG2ToString(const libff::alt_bn128_G2 &elem, int base = 10, const s ...@@ -107,23 +128,28 @@ string ConvertG2ToString(const libff::alt_bn128_G2 &elem, int base = 10, const s
result += delim; result += delim;
result += ConvertToString(elem.Y.c1); result += ConvertToString(elem.Y.c1);
return result; goto clean;
} catch (exception &e) { } catch (exception &e) {
LOG_ERROR(e.what()); LOG_ERROR(e.what());
return nullptr; goto clean;
} catch (...) { } catch (...) {
LOG_ERROR("Unknown throwable"); LOG_ERROR("Unknown throwable");
return nullptr; goto clean;
} }
clean:
return result;
} }
vector <libff::alt_bn128_Fr> SplitStringToFr(const char *coeffs, const char symbol) { vector <libff::alt_bn128_Fr> SplitStringToFr(const char *coeffs, const char symbol) {
vector <libff::alt_bn128_Fr> tokens; vector <libff::alt_bn128_Fr> result;
try {
string str(coeffs); string str(coeffs);
string delim; string delim;
try {
delim.push_back(symbol); delim.push_back(symbol);
size_t prev = 0, pos = 0; size_t prev = 0, pos = 0;
...@@ -133,25 +159,31 @@ vector <libff::alt_bn128_Fr> SplitStringToFr(const char *coeffs, const char symb ...@@ -133,25 +159,31 @@ vector <libff::alt_bn128_Fr> SplitStringToFr(const char *coeffs, const char symb
string token = str.substr(prev, pos - prev); string token = str.substr(prev, pos - prev);
if (!token.empty()) { if (!token.empty()) {
libff::alt_bn128_Fr coeff(token.c_str()); libff::alt_bn128_Fr coeff(token.c_str());
tokens.push_back(coeff); result.push_back(coeff);
} }
prev = pos + delim.length(); prev = pos + delim.length();
} while (pos < str.length() && prev < str.length()); } while (pos < str.length() && prev < str.length());
return tokens; goto clean;
} catch (exception &e) { } catch (exception &e) {
LOG_ERROR(e.what()); LOG_ERROR(e.what());
return tokens; goto clean;
} catch (...) { } catch (...) {
LOG_ERROR("Unknown throwable"); LOG_ERROR("Unknown throwable");
return tokens; goto clean;
} }
clean:
return result;
} }
int gen_dkg_poly(char *secret, unsigned _t) { int gen_dkg_poly(char *secret, unsigned _t) {
try {
int status = 1;
string result; string result;
try {
for (size_t i = 0; i < _t; ++i) { for (size_t i = 0; i < _t; ++i) {
libff::alt_bn128_Fr cur_coef = libff::alt_bn128_Fr::random_element(); libff::alt_bn128_Fr cur_coef = libff::alt_bn128_Fr::random_element();
...@@ -164,42 +196,47 @@ int gen_dkg_poly(char *secret, unsigned _t) { ...@@ -164,42 +196,47 @@ int gen_dkg_poly(char *secret, unsigned _t) {
strncpy(secret, result.c_str(), result.length() + 1); strncpy(secret, result.c_str(), result.length() + 1);
if (strlen(secret) == 0) { if (strlen(secret) == 0) {
return 1; goto clean;
} }
return 0; status = 0;
} catch (exception &e) { } catch (exception &e) {
LOG_ERROR(e.what()); LOG_ERROR(e.what());
return 1; goto clean;
} catch (...) { } catch (...) {
LOG_ERROR("Unknown throwable"); LOG_ERROR("Unknown throwable");
return 1; goto clean;
} }
clean:
return status;
} }
libff::alt_bn128_Fr PolynomialValue(const vector <libff::alt_bn128_Fr> &pol, libff::alt_bn128_Fr point, unsigned _t) { libff::alt_bn128_Fr PolynomialValue(const vector <libff::alt_bn128_Fr> &pol, libff::alt_bn128_Fr point, unsigned _t) {
libff::alt_bn128_Fr result = libff::alt_bn128_Fr::zero();
libff::alt_bn128_Fr value = libff::alt_bn128_Fr::zero();
try { try {
libff::alt_bn128_Fr pow = libff::alt_bn128_Fr::one(); libff::alt_bn128_Fr pow = libff::alt_bn128_Fr::one();
for (unsigned i = 0; i < pol.size(); ++i) { for (unsigned i = 0; i < pol.size(); ++i) {
value += pol[i] * pow; result += pol[i] * pow;
pow *= point; pow *= point;
} }
return value; goto clean;
} catch (exception &e) { } catch (exception &e) {
LOG_ERROR(e.what()); LOG_ERROR(e.what());
return value; goto clean;
} catch (...) { } catch (...) {
LOG_ERROR("Unknown throwable"); LOG_ERROR("Unknown throwable");
return value; goto clean;
} }
clean:
return result;
} }
void calc_secret_shares(const char *decrypted_coeffs, void calc_secret_shares(const char *decrypted_coeffs,
...@@ -233,11 +270,13 @@ void calc_secret_shares(const char *decrypted_coeffs, ...@@ -233,11 +270,13 @@ void calc_secret_shares(const char *decrypted_coeffs,
int calc_secret_share(const char *decrypted_coeffs, char *s_share, int calc_secret_share(const char *decrypted_coeffs, char *s_share,
unsigned _t, unsigned _n, unsigned ind) { unsigned _t, unsigned _n, unsigned ind) {
int result = 1;
try { try {
char symbol = ':'; char symbol = ':';
vector <libff::alt_bn128_Fr> poly = SplitStringToFr(decrypted_coeffs, symbol); vector <libff::alt_bn128_Fr> poly = SplitStringToFr(decrypted_coeffs, symbol);
if (poly.size() != _t) { if (poly.size() != _t) {
return 1; goto clean;
} }
libff::alt_bn128_Fr secret_share = PolynomialValue(poly, libff::alt_bn128_Fr(ind), _t); libff::alt_bn128_Fr secret_share = PolynomialValue(poly, libff::alt_bn128_Fr(ind), _t);
...@@ -246,15 +285,19 @@ int calc_secret_share(const char *decrypted_coeffs, char *s_share, ...@@ -246,15 +285,19 @@ int calc_secret_share(const char *decrypted_coeffs, char *s_share,
cur_share.insert(0, n_zeroes, '0'); cur_share.insert(0, n_zeroes, '0');
strncpy(s_share, cur_share.c_str(), cur_share.length() + 1); strncpy(s_share, cur_share.c_str(), cur_share.length() + 1);
return 0; result = 0;
goto clean;
} catch (exception &e) { } catch (exception &e) {
LOG_ERROR(e.what()); LOG_ERROR(e.what());
return 1; goto clean;
} catch (...) { } catch (...) {
LOG_ERROR("Unknown throwable"); LOG_ERROR("Unknown throwable");
return 1; goto clean;
} }
clean:
return result;
} }
void calc_secret_shareG2_old(const char *decrypted_coeffs, char *s_shareG2, void calc_secret_shareG2_old(const char *decrypted_coeffs, char *s_shareG2,
...@@ -281,17 +324,20 @@ void calc_secret_shareG2_old(const char *decrypted_coeffs, char *s_shareG2, ...@@ -281,17 +324,20 @@ void calc_secret_shareG2_old(const char *decrypted_coeffs, char *s_shareG2,
int calc_secret_shareG2(const char *s_share, char *s_shareG2) { int calc_secret_shareG2(const char *s_share, char *s_shareG2) {
int result = 1;
try {
mpz_t share; mpz_t share;
mpz_init(share); mpz_init(share);
try {
if (mpz_set_str(share, s_share, 16) == -1) { if (mpz_set_str(share, s_share, 16) == -1) {
mpz_clear(share); goto clean;
return 1;
} }
char arr[mpz_sizeinbase(share, 10) + 2]; SAFE_CHAR_BUF(arr, BUF_LEN);
char *share_str = mpz_get_str(arr, 10, share); char *share_str = mpz_get_str(arr, 10, share);
libff::alt_bn128_Fr secret_share(share_str); libff::alt_bn128_Fr secret_share(share_str);
...@@ -303,18 +349,22 @@ int calc_secret_shareG2(const char *s_share, char *s_shareG2) { ...@@ -303,18 +349,22 @@ int calc_secret_shareG2(const char *s_share, char *s_shareG2) {
string secret_shareG2_str = ConvertG2ToString(secret_shareG2); string secret_shareG2_str = ConvertG2ToString(secret_shareG2);
strncpy(s_shareG2, secret_shareG2_str.c_str(), secret_shareG2_str.length() + 1); strncpy(s_shareG2, secret_shareG2_str.c_str(), secret_shareG2_str.length() + 1);
result = 0;
mpz_clear(share); goto clean;
return 0;
} catch (exception &e) { } catch (exception &e) {
LOG_ERROR(e.what()); LOG_ERROR(e.what());
return 1; goto clean;
} catch (...) { } catch (...) {
LOG_ERROR("Unknown throwable"); LOG_ERROR("Unknown throwable");
return 1; goto clean;
} }
clean:
mpz_clear(share);
return result;
} }
int calc_public_shares(const char *decrypted_coeffs, char *public_shares, int calc_public_shares(const char *decrypted_coeffs, char *public_shares,
......
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