/* Copyright (C) 2019-Present SKALE Labs This file is part of sgxwallet. sgxwallet is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. sgxwallet is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with sgxwallet. If not, see <https://www.gnu.org/licenses/>. @file DKGCrypto.h @author Stan Kladko @date 2019 */ #ifndef SGXD_DKGCRYPTO_H #define SGXD_DKGCRYPTO_H #include <string> #include <vector> #include <libff/algebra/curves/alt_bn128/alt_bn128_pp.hpp> using namespace std; string gen_dkg_poly( int _t); vector <vector<string>> get_verif_vect(const string& encryptedPolyHex, int t, int n); vector <vector<string>> getVerificationVectorMult(const std::string& encryptedPolyHex, int t, int n, size_t ind); vector<string> splitString(const char* coeffs, const char symbol); string getSecretShares(const string& _polyName, const char* _encryptedPolyHex, const vector<string>& _publicKeys, int _t, int _n); string getSecretSharesV2(const string& _polyName, const char* _encryptedPolyHex, const vector<string>& _publicKeys, int _t, int _n); bool verifyShares(const char* publicShares, const char* encr_sshare, const char * encryptedKeyHex, int t, int n, int ind); bool verifySharesV2(const char* publicShares, const char* encr_sshare, const char * encryptedKeyHex, int t, int n, int ind); string decryptDHKey(const string& polyName, int ind); bool createBLSShare( const string& blsKeyName, const char * s_shares, const char * encryptedKeyHex); vector<string> getBLSPubKey(const char * encryptedKeyHex); vector<string> mult_G2(const string& x); string convertHexToDec(const string& hex_str); string convertG2ToString(const libff::alt_bn128_G2& elem, int base = 10, const string& delim = ":"); vector<string> calculateAllBlsPublicKeys(const vector<string>& public_shares); bool testCreateBLSShare( const char * s_shares); #endif //SGXD_DKGCRYPTO_H