Unverified Commit db866200 authored by Stan Kladko's avatar Stan Kladko Committed by GitHub

Merge pull request #80 from skalenetwork/SKALE-2536-certs-2

Skale 2536 certs 2
parents 8465cb08 cec4e6bd
...@@ -22,21 +22,26 @@ ...@@ -22,21 +22,26 @@
*/ */
#include "CSRManagerServer.h"
#include "SGXException.h"
#include "sgxwallet_common.h"
#include <iostream> #include <iostream>
#include <fstream> #include <fstream>
#include <jsonrpccpp/server/connectors/httpserver.h> #include <jsonrpccpp/server/connectors/httpserver.h>
#include "spdlog/spdlog.h"
#include "CSRManagerServer.h"
#include "SGXException.h"
#include "sgxwallet_common.h"
#include "Log.h"
#include "common.h" #include "common.h"
CSRManagerServer *cs = nullptr; shared_ptr<CSRManagerServer> CSRManagerServer::cs = nullptr;
jsonrpc::HttpServer *hs3 = nullptr; shared_ptr<jsonrpc::HttpServer> CSRManagerServer::hs3 = nullptr;
CSRManagerServer::CSRManagerServer(AbstractServerConnector &connector, CSRManagerServer::CSRManagerServer(AbstractServerConnector &connector,
...@@ -44,22 +49,15 @@ CSRManagerServer::CSRManagerServer(AbstractServerConnector &connector, ...@@ -44,22 +49,15 @@ CSRManagerServer::CSRManagerServer(AbstractServerConnector &connector,
Json::Value getUnsignedCSRsImpl() { Json::Value getUnsignedCSRsImpl() {
spdlog::info("Enter getUnsignedCSRsImpl"); spdlog::info(__FUNCTION__);
Json::Value result; INIT_RESULT(result)
result["status"] = 0;
result["errorMessage"] = "";
try { try {
vector<string> hashes_vect = LevelDB::getCsrDb()->writeKeysToVector1(MAX_CSR_NUM); vector<string> hashes_vect = LevelDB::getCsrDb()->writeKeysToVector1(MAX_CSR_NUM);
for (int i = 0; i < (int) hashes_vect.size(); i++) { for (int i = 0; i < (int) hashes_vect.size(); i++) {
result["hashes"][i] = hashes_vect.at(i); result["hashes"][i] = hashes_vect.at(i);
} }
} catch (SGXException &_e) { } HANDLE_SGX_EXCEPTION(result);
cerr << " err str " << _e.errString << endl;
result["status"] = _e.status;
result["errorMessage"] = _e.errString;
}
return result; return result;
} }
...@@ -111,30 +109,26 @@ Json::Value signByHashImpl(const string &hash, int status) { ...@@ -111,30 +109,26 @@ Json::Value signByHashImpl(const string &hash, int status) {
result["status"] = status; result["status"] = status;
} catch (SGXException &_e) { } HANDLE_SGX_EXCEPTION(result)
cerr << " err str " << _e.errString << endl;
result["status"] = _e.status;
result["errorMessage"] = _e.errString;
}
return result; return result;
} }
Json::Value CSRManagerServer::getUnsignedCSRs() { Json::Value CSRManagerServer::getUnsignedCSRs() {
lock_guard<recursive_mutex> lock(m); LOCK(m)
return getUnsignedCSRsImpl(); return getUnsignedCSRsImpl();
} }
Json::Value CSRManagerServer::signByHash(const string &hash, int status) { Json::Value CSRManagerServer::signByHash(const string &hash, int status) {
lock_guard<recursive_mutex> lock(m); LOCK(m)
return signByHashImpl(hash, status); return signByHashImpl(hash, status);
} }
int init_csrmanager_server() { int CSRManagerServer::initCSRManagerServer() {
hs3 = new jsonrpc::HttpServer(BASE_PORT + 2); hs3 = make_shared<jsonrpc::HttpServer>(BASE_PORT + 2);
hs3->BindLocalhost(); hs3->BindLocalhost();
cs = new CSRManagerServer(*hs3, JSONRPC_SERVER_V2); // server (json-rpc 2.0) cs = make_shared<CSRManagerServer>(*hs3, JSONRPC_SERVER_V2); // server (json-rpc 2.0)
if (!cs->StartListening()) { if (!cs->StartListening()) {
spdlog::info("CSR manager server could not start listening"); spdlog::info("CSR manager server could not start listening");
......
...@@ -25,26 +25,37 @@ ...@@ -25,26 +25,37 @@
#ifndef SGXD_CSRMANAGERSERVER_H #ifndef SGXD_CSRMANAGERSERVER_H
#define SGXD_CSRMANAGERSERVER_H #define SGXD_CSRMANAGERSERVER_H
#include <mutex>
#include <jsonrpccpp/server/connectors/httpserver.h>
#include "abstractCSRManagerServer.h" #include "abstractCSRManagerServer.h"
#include "LevelDB.h" #include "LevelDB.h"
#include <mutex>
using namespace jsonrpc; using namespace jsonrpc;
using namespace std;
class CSRManagerServer : public abstractCSRManagerServer { class CSRManagerServer : public abstractCSRManagerServer {
std::recursive_mutex m; recursive_mutex m;
static shared_ptr<HttpServer> hs3;
static shared_ptr<CSRManagerServer> cs;
public: public:
CSRManagerServer(AbstractServerConnector &connector, serverVersion_t type); CSRManagerServer(AbstractServerConnector &connector, serverVersion_t type);
virtual Json::Value getUnsignedCSRs(); virtual Json::Value getUnsignedCSRs();
virtual Json::Value signByHash(const std::string& hash, int status); virtual Json::Value signByHash(const string& hash, int status);
static int initCSRManagerServer();
}; };
extern int init_csrmanager_server();
......
...@@ -71,7 +71,9 @@ public: ...@@ -71,7 +71,9 @@ public:
}; };
#define INIT_RESULT(__RESULT__) Json::Value __RESULT__; __RESULT__["status"] = 0; __RESULT__["errorMessage"] = ""; #define INIT_RESULT(__RESULT__) Json::Value __RESULT__; __RESULT__["status"] = 0; __RESULT__["errorMessage"] = "";
#define HANDLE_SGX_EXCEPTION(_RESULT_) catch (SGXException &__e) { Log::handleSGXException(_RESULT_, __e);} #define HANDLE_SGX_EXCEPTION(_RESULT_) catch (SGXException &__e) { Log::handleSGXException(_RESULT_, __e);} \
catch (exception &__e) {spdlog::error(__e.what()); _RESULT_["status"] = 1; _RESULT_["errorMessage"] = __e.what();}
#define LOCK(__M__) lock_guard<recursive_mutex> lock(__M__); #define LOCK(__M__) lock_guard<recursive_mutex> lock(__M__);
#endif #endif
......
...@@ -43,7 +43,7 @@ ...@@ -43,7 +43,7 @@
#include "SGXRegistrationServer.h" #include "SGXRegistrationServer.h"
#include "LevelDB.h" #include "LevelDB.h"
#include "spdlog/spdlog.h" #include "Log.h"
#include "common.h" #include "common.h"
int printDebugInfo = -1; int printDebugInfo = -1;
...@@ -51,162 +51,135 @@ int useHTTPS = -1; ...@@ -51,162 +51,135 @@ int useHTTPS = -1;
int encryptKeys = -1; int encryptKeys = -1;
int autoconfirm = -1; int autoconfirm = -1;
SGXRegistrationServer *registrationServer = nullptr; shared_ptr <SGXRegistrationServer> SGXRegistrationServer::server = nullptr;
HttpServer *httpServer2 = nullptr; shared_ptr <HttpServer> SGXRegistrationServer::httpServer = nullptr;
SGXRegistrationServer::SGXRegistrationServer(AbstractServerConnector &connector, SGXRegistrationServer::SGXRegistrationServer(AbstractServerConnector &connector,
serverVersion_t type, bool _autoSign) serverVersion_t type, bool _autoSign)
: AbstractRegServer(connector, type), isCertCreated(false), autoSign(_autoSign) {} : AbstractRegServer(connector, type), autoSign(_autoSign) {}
Json::Value signCertificateImpl(const string &_csr, bool _autoSign = false) { Json::Value signCertificateImpl(const string &_csr, bool _autoSign = false) {
Json::Value result; spdlog::info(__FUNCTION__);
result["status"] = 0; INIT_RESULT(result)
result["errorMessage"] = "";
result["result"] = false;
try { try {
spdlog::info("enter signCertificateImpl");
string status = "1";
string hash = cryptlite::sha256::hash_hex(_csr); string hash = cryptlite::sha256::hash_hex(_csr);
if (!_autoSign) {
string db_key = "CSR:HASH:" + hash; if (system("ls " CERT_DIR "/" CERT_CREATE_COMMAND) != 0) {
LevelDB::getCsrStatusDb()->writeDataUnique(db_key, _csr); spdlog::error("cert/create_client_cert does not exist");
throw SGXException(FAIL_TO_CREATE_CERTIFICATE, "CLIENT CERTIFICATE GENERATION FAILED");
} }
if (_autoSign) {
string csr_name = "cert/" + hash + ".csr"; string csr_name = string(CERT_DIR) + "/" + hash + ".csr";
ofstream outfile(csr_name); ofstream outfile(csr_name);
outfile.exceptions(std::ifstream::failbit | std::ifstream::badbit);
outfile << _csr << endl; outfile << _csr << endl;
outfile.close(); outfile.close();
if (access(csr_name.c_str(), F_OK) != 0) {
throw SGXException(FILE_NOT_FOUND, "Csr does not exist"); if (system(("ls " + csr_name).c_str()) != 0) {
spdlog::error("could not create csr file");
throw SGXException(FAIL_TO_CREATE_CERTIFICATE, "CLIENT CERTIFICATE GENERATION FAILED");
} }
string genCert = "cd cert && ./create_client_cert " + hash; if (system(("openssl req -in " + csr_name).c_str()) != 0) {
spdlog::error("Incorrect CSR format: {}", _csr);
throw SGXException(FAIL_TO_CREATE_CERTIFICATE, "Incorrect CSR format ");
}
if (_autoSign) {
string genCert = string("cd ") + CERT_DIR + "&& ./"
+ CERT_CREATE_COMMAND + " " + hash ;
if (system(genCert.c_str()) == 0) { if (system(genCert.c_str()) == 0) {
spdlog::info("CLIENT CERTIFICATE IS SUCCESSFULLY GENERATED"); spdlog::info("Client cert " + hash + " generated");
status = "0"; string db_key = "CSR:HASH:" + hash + "STATUS:";
string status = "0";
LevelDB::getCsrStatusDb()->writeDataUnique(db_key, status);
} else { } else {
spdlog::info("CLIENT CERTIFICATE GENERATION FAILED");
string status_db_key = "CSR:HASH:" + hash + "STATUS:"; spdlog::error("Client cert generation failed: {} ", genCert);
LevelDB::getCsrStatusDb()->writeDataUnique(status_db_key, to_string(FAIL_TO_CREATE_CERTIFICATE));
throw SGXException(FAIL_TO_CREATE_CERTIFICATE, "CLIENT CERTIFICATE GENERATION FAILED"); throw SGXException(FAIL_TO_CREATE_CERTIFICATE, "CLIENT CERTIFICATE GENERATION FAILED");
//exit(-1);
} }
} else {
string db_key = "CSR:HASH:" + hash;
LevelDB::getCsrStatusDb()->writeDataUnique(db_key, _csr);
} }
result["result"] = true; result["result"] = true;
result["hash"] = hash; result["hash"] = hash;
string db_key = "CSR:HASH:" + hash + "STATUS:"; } HANDLE_SGX_EXCEPTION(result)
LevelDB::getCsrStatusDb()->writeDataUnique(db_key, status);
} catch (SGXException &_e) {
cerr << " err str " << _e.errString << endl;
result["status"] = _e.status;
result["errorMessage"] = _e.errString;
result["result"] = false;
}
return result; return result;
} }
Json::Value GetSertificateImpl(const string &hash) { Json::Value getCertificateImpl(const string &hash) {
Json::Value result; Json::Value result;
string cert; string cert;
try { try {
string db_key = "CSR:HASH:" + hash + "STATUS:"; string db_key = "CSR:HASH:" + hash + "STATUS:";
shared_ptr<string> status_str_ptr = LevelDB::getCsrStatusDb()->readString(db_key); shared_ptr <string> status_str_ptr = LevelDB::getCsrStatusDb()->readString(db_key);
if (status_str_ptr == nullptr) { if (status_str_ptr == nullptr) {
throw SGXException(KEY_SHARE_DOES_NOT_EXIST, "Data with this name does not exist in csr db"); throw SGXException(CERT_REQUEST_DOES_NOT_EXIST, "Data with this name does not exist in csr db");
} }
int status = atoi(status_str_ptr->c_str()); int status = atoi(status_str_ptr->c_str());
if (status == 0) { if (status == 0) {
string crt_name = "cert/" + hash + ".crt"; string crtPath = "cert/" + hash + ".crt";
//if (access(crt_name.c_str(), F_OK) == 0){
ifstream infile(crt_name); if (system(("ls " + crtPath).c_str()) != 0) {
if (!infile.is_open()) {
string status_db_key = "CSR:HASH:" + hash + "STATUS:";
LevelDB::getCsrStatusDb()->deleteKey(status_db_key);
LevelDB::getCsrStatusDb()->writeDataUnique(status_db_key, to_string(FILE_NOT_FOUND));
throw SGXException(FILE_NOT_FOUND, "Certificate does not exist"); throw SGXException(FILE_NOT_FOUND, "Certificate does not exist");
} else { }
ifstream infile(crtPath);
infile.exceptions(std::ifstream::failbit | std::ifstream::badbit);
ostringstream ss; ostringstream ss;
ss << infile.rdbuf(); ss << infile.rdbuf();
cert = ss.str();
infile.close(); infile.close();
string remove_crt = "cd cert && rm -rf " + hash + ".crt && rm -rf " + hash + ".csr"; cert = ss.str();
if (system(remove_crt.c_str()) == 0) {
//cerr << "cert removed" << endl;
spdlog::info(" cert removed ");
} else {
spdlog::info(" cert was not removed ");
}
}
} }
result["status"] = status; result["status"] = status;
result["cert"] = cert; result["cert"] = cert;
} catch (SGXException &_e) { } HANDLE_SGX_EXCEPTION(result)
cerr << " err str " << _e.errString << endl;
result["status"] = _e.status;
result["errorMessage"] = _e.errString;
}
return result; return result;
} }
Json::Value SGXRegistrationServer::SignCertificate(const string &csr) { Json::Value SGXRegistrationServer::SignCertificate(const string &csr) {
spdlog::info("Enter signCertificate "); spdlog::info(__FUNCTION__);
lock_guard<recursive_mutex> lock(m); LOCK(m)
return signCertificateImpl(csr, autoSign); return signCertificateImpl(csr, autoSign);
} }
Json::Value SGXRegistrationServer::GetCertificate(const string &hash) { Json::Value SGXRegistrationServer::GetCertificate(const string &hash) {
lock_guard<recursive_mutex> lock(m); spdlog::info(__FUNCTION__);
return GetSertificateImpl(hash); LOCK(m)
return getCertificateImpl(hash);
} }
void SGXRegistrationServer::set_cert_created(bool b) {
sleep(100);
isCertCreated = b;
}
int SGXRegistrationServer::initRegistrationServer(bool _autoSign) {
int initRegistrationServer(bool _autoSign) { httpServer = make_shared<HttpServer>(BASE_PORT + 1);
server = make_shared<SGXRegistrationServer>(*httpServer,
// string certPath = "cert/SGXCACertificate.crt";
// string keyPath = "cert/SGXCACertificate.key";
//
// if (access(certPath.c_str(), F_OK) != 0){
// cerr << "CERTIFICATE IS GOING TO BE CREATED" << endl;
//
// string genCert = "cd cert && ./self-signed-tls -c=US -s=California -l=San-Francisco -o=\"Skale Labs\" -u=\"Department of Software Engineering\" -n=\"SGXCACertificate\" -e=info@skalelabs.com";
//
// if (system(genCert.c_str()) == 0){
// cerr << "CERTIFICATE IS SUCCESSFULLY GENERATED" << endl;
// }
// else{
// cerr << "CERTIFICATE GENERATION FAILED" << endl;
// exit(-1);
// }
// }
httpServer2 = new HttpServer(BASE_PORT + 1);
registrationServer = new SGXRegistrationServer(*httpServer2,
JSONRPC_SERVER_V2, JSONRPC_SERVER_V2,
_autoSign); // hybrid server (json-rpc 1.0 & 2.0) _autoSign); // hybrid server (json-rpc 1.0 & 2.0)
if (!registrationServer->StartListening()) { if (!server->StartListening()) {
spdlog::info("Registration server could not start listening"); spdlog::error("Registration server could not start listening on port {}", BASE_PORT + 1);
exit(-1); exit(-1);
} else { } else {
spdlog::info("Registration server started on port {}", BASE_PORT + 1); spdlog::info("Registration server started on port {}", BASE_PORT + 1);
...@@ -216,3 +189,9 @@ int initRegistrationServer(bool _autoSign) { ...@@ -216,3 +189,9 @@ int initRegistrationServer(bool _autoSign) {
return 0; return 0;
} }
shared_ptr<SGXRegistrationServer> SGXRegistrationServer::getServer() {
CHECK_STATE(server);
return server;
}
...@@ -25,31 +25,44 @@ ...@@ -25,31 +25,44 @@
#define SGXD_SGXREGISTRATIONSERVER_H #define SGXD_SGXREGISTRATIONSERVER_H
#include "abstractregserver.h"
#include <mutex> #include <mutex>
#include "abstractregserver.h"
#include <jsonrpccpp/server/connectors/httpserver.h>
#define CERT_DIR "cert"
#define CERT_CREATE_COMMAND "create_client_cert"
using namespace jsonrpc; using namespace jsonrpc;
using namespace std; using namespace std;
class SGXRegistrationServer: public AbstractRegServer { class SGXRegistrationServer : public AbstractRegServer {
std::recursive_mutex m; recursive_mutex m;
bool isCertCreated;
bool autoSign; bool autoSign;
static shared_ptr <HttpServer> httpServer;
static shared_ptr <SGXRegistrationServer> server;
public: public:
SGXRegistrationServer(AbstractServerConnector &connector, serverVersion_t type, bool _autoSign = false); static shared_ptr <SGXRegistrationServer> getServer();
void set_cert_created(bool b);
virtual Json::Value SignCertificate(const std::string& csr); SGXRegistrationServer(AbstractServerConnector &connector, serverVersion_t type, bool _autoSign = false);
virtual Json::Value GetCertificate(const std::string& hash);
};
virtual Json::Value SignCertificate(const string &csr);
virtual Json::Value GetCertificate(const string &hash);
extern int initRegistrationServer(bool _autoSign = false); static int initRegistrationServer(bool _autoSign = false);
};
#endif // SGXD_SGXREGISTRATIONSERVER_H #endif // SGXD_SGXREGISTRATIONSERVER_H
\ No newline at end of file
#define SGXWALLET_VERSION "1.48.1" #define SGXWALLET_VERSION "1.49.2"
\ No newline at end of file \ No newline at end of file
...@@ -74,8 +74,8 @@ bool isStringDec(string &_str) { ...@@ -74,8 +74,8 @@ bool isStringDec(string &_str) {
} }
SGXWalletServer *s = nullptr; shared_ptr<SGXWalletServer> SGXWalletServer::server = nullptr;
HttpServer *httpServer = nullptr; shared_ptr<HttpServer> SGXWalletServer::httpServer = nullptr;
SGXWalletServer::SGXWalletServer(AbstractServerConnector &_connector, SGXWalletServer::SGXWalletServer(AbstractServerConnector &_connector,
serverVersion_t _type) serverVersion_t _type)
...@@ -130,11 +130,11 @@ int SGXWalletServer::initHttpsServer(bool _checkCerts) { ...@@ -130,11 +130,11 @@ int SGXWalletServer::initHttpsServer(bool _checkCerts) {
} }
} }
httpServer = new HttpServer(BASE_PORT, certPath, keyPath, rootCAPath, _checkCerts, 64); httpServer = make_shared<HttpServer>(BASE_PORT, certPath, keyPath, rootCAPath, _checkCerts, 64);
s = new SGXWalletServer(*httpServer, server = make_shared<SGXWalletServer>(*httpServer,
JSONRPC_SERVER_V2); // hybrid server (json-rpc 1.0 & 2.0) JSONRPC_SERVER_V2); // hybrid server (json-rpc 1.0 & 2.0)
if (!s->StartListening()) { if (!server->StartListening()) {
spdlog::error("SGX Server could not start listening"); spdlog::error("SGX Server could not start listening");
exit(-1); exit(-1);
} else { } else {
...@@ -146,10 +146,10 @@ int SGXWalletServer::initHttpsServer(bool _checkCerts) { ...@@ -146,10 +146,10 @@ int SGXWalletServer::initHttpsServer(bool _checkCerts) {
int SGXWalletServer::initHttpServer() { //without ssl int SGXWalletServer::initHttpServer() { //without ssl
httpServer = new HttpServer(BASE_PORT + 3); httpServer = make_shared<HttpServer>(BASE_PORT + 3);
s = new SGXWalletServer(*httpServer, server = make_shared<SGXWalletServer>(*httpServer,
JSONRPC_SERVER_V2); // hybrid server (json-rpc 1.0 & 2.0) JSONRPC_SERVER_V2); // hybrid server (json-rpc 1.0 & 2.0)
if (!s->StartListening()) { if (!server->StartListening()) {
spdlog::error("Server could not start listening"); spdlog::error("Server could not start listening");
exit(-1); exit(-1);
} }
...@@ -207,7 +207,7 @@ SGXWalletServer::blsSignMessageHashImpl(const string &_keyShareName, const strin ...@@ -207,7 +207,7 @@ SGXWalletServer::blsSignMessageHashImpl(const string &_keyShareName, const strin
char *signature = (char *) calloc(BUF_LEN, 1); char *signature = (char *) calloc(BUF_LEN, 1);
shared_ptr<string> value = nullptr; shared_ptr <string> value = nullptr;
try { try {
if (!checkName(_keyShareName, "BLS_KEY")) { if (!checkName(_keyShareName, "BLS_KEY")) {
...@@ -274,7 +274,7 @@ Json::Value SGXWalletServer::generateECDSAKeyImpl() { ...@@ -274,7 +274,7 @@ Json::Value SGXWalletServer::generateECDSAKeyImpl() {
result["encryptedKey"] = ""; result["encryptedKey"] = "";
vector<string> keys; vector <string> keys;
try { try {
keys = genECDSAKey(); keys = genECDSAKey();
...@@ -319,7 +319,7 @@ Json::Value SGXWalletServer::renameECDSAKeyImpl(const string &_keyName, const st ...@@ -319,7 +319,7 @@ Json::Value SGXWalletServer::renameECDSAKeyImpl(const string &_keyName, const st
throw SGXException(UNKNOWN_ERROR, "invalid key name"); throw SGXException(UNKNOWN_ERROR, "invalid key name");
} }
shared_ptr<string> key_ptr = readFromDb(_tempKeyName); shared_ptr <string> key_ptr = readFromDb(_tempKeyName);
writeDataToDB(_keyName, *key_ptr); writeDataToDB(_keyName, *key_ptr);
...@@ -340,7 +340,7 @@ Json::Value SGXWalletServer::ecdsaSignMessageHashImpl(int _base, const string &_ ...@@ -340,7 +340,7 @@ Json::Value SGXWalletServer::ecdsaSignMessageHashImpl(int _base, const string &_
result["signature_r"] = ""; result["signature_r"] = "";
result["signature_s"] = ""; result["signature_s"] = "";
vector<string> sign_vect(3); vector <string> sign_vect(3);
try { try {
...@@ -362,7 +362,7 @@ Json::Value SGXWalletServer::ecdsaSignMessageHashImpl(int _base, const string &_ ...@@ -362,7 +362,7 @@ Json::Value SGXWalletServer::ecdsaSignMessageHashImpl(int _base, const string &_
throw SGXException(-22, "Invalid base"); throw SGXException(-22, "Invalid base");
} }
shared_ptr<string> key_ptr = readFromDb(_keyName, ""); shared_ptr <string> key_ptr = readFromDb(_keyName, "");
sign_vect = ecdsaSignHash(key_ptr->c_str(), cutHash.c_str(), _base); sign_vect = ecdsaSignHash(key_ptr->c_str(), cutHash.c_str(), _base);
if (sign_vect.size() != 3) { if (sign_vect.size() != 3) {
...@@ -393,7 +393,7 @@ Json::Value SGXWalletServer::getPublicECDSAKeyImpl(const string &_keyName) { ...@@ -393,7 +393,7 @@ Json::Value SGXWalletServer::getPublicECDSAKeyImpl(const string &_keyName) {
if (!checkECDSAKeyName(_keyName)) { if (!checkECDSAKeyName(_keyName)) {
throw SGXException(INVALID_ECDSA_KEY_NAME, "Invalid ECDSA key name"); throw SGXException(INVALID_ECDSA_KEY_NAME, "Invalid ECDSA key name");
} }
shared_ptr<string> keyStr = readFromDb(_keyName); shared_ptr <string> keyStr = readFromDb(_keyName);
publicKey = getECDSAPubKey(keyStr->c_str()); publicKey = getECDSAPubKey(keyStr->c_str());
spdlog::debug("PublicKey {}", publicKey); spdlog::debug("PublicKey {}", publicKey);
spdlog::debug("PublicKey length {}", publicKey.length()); spdlog::debug("PublicKey length {}", publicKey.length());
...@@ -435,7 +435,7 @@ Json::Value SGXWalletServer::getVerificationVectorImpl(const string &_polyName, ...@@ -435,7 +435,7 @@ Json::Value SGXWalletServer::getVerificationVectorImpl(const string &_polyName,
result["status"] = 0; result["status"] = 0;
result["errorMessage"] = ""; result["errorMessage"] = "";
vector<vector<string>> verifVector; vector <vector<string>> verifVector;
try { try {
if (!checkName(_polyName, "POLY")) { if (!checkName(_polyName, "POLY")) {
throw SGXException(INVALID_POLY_NAME, "Invalid polynomial name"); throw SGXException(INVALID_POLY_NAME, "Invalid polynomial name");
...@@ -444,13 +444,13 @@ Json::Value SGXWalletServer::getVerificationVectorImpl(const string &_polyName, ...@@ -444,13 +444,13 @@ Json::Value SGXWalletServer::getVerificationVectorImpl(const string &_polyName,
throw SGXException(INVALID_DKG_PARAMS, "Invalid parameters: n or t "); throw SGXException(INVALID_DKG_PARAMS, "Invalid parameters: n or t ");
} }
shared_ptr<string> encr_poly_ptr = readFromDb(_polyName); shared_ptr <string> encr_poly_ptr = readFromDb(_polyName);
verifVector = get_verif_vect(encr_poly_ptr->c_str(), _t, _n); verifVector = get_verif_vect(encr_poly_ptr->c_str(), _t, _n);
//cerr << "verif vect size " << verifVector.size() << endl; //cerr << "verif vect size " << verifVector.size() << endl;
for (int i = 0; i < _t; i++) { for (int i = 0; i < _t; i++) {
vector<string> cur_coef = verifVector.at(i); vector <string> cur_coef = verifVector.at(i);
for (int j = 0; j < 4; j++) { for (int j = 0; j < 4; j++) {
result["verificationVector"][i][j] = cur_coef.at(j); result["verificationVector"][i][j] = cur_coef.at(j);
result["Verification Vector"][i][j] = cur_coef.at(j); result["Verification Vector"][i][j] = cur_coef.at(j);
...@@ -484,9 +484,9 @@ Json::Value SGXWalletServer::getSecretShareImpl(const string &_polyName, const J ...@@ -484,9 +484,9 @@ Json::Value SGXWalletServer::getSecretShareImpl(const string &_polyName, const J
throw SGXException(INVALID_DKG_PARAMS, "Invalid DKG parameters: n or t "); throw SGXException(INVALID_DKG_PARAMS, "Invalid DKG parameters: n or t ");
} }
shared_ptr<string> encr_poly_ptr = readFromDb(_polyName); shared_ptr <string> encr_poly_ptr = readFromDb(_polyName);
vector<string> pubKeysStrs; vector <string> pubKeysStrs;
for (int i = 0; i < _n; i++) { for (int i = 0; i < _n; i++) {
if (!checkHex(_pubKeys[i].asString(), 64)) { if (!checkHex(_pubKeys[i].asString(), 64)) {
throw SGXException(INVALID_HEX, "Invalid public key"); throw SGXException(INVALID_HEX, "Invalid public key");
...@@ -532,7 +532,7 @@ Json::Value SGXWalletServer::dkgVerificationImpl(const string &_publicShares, co ...@@ -532,7 +532,7 @@ Json::Value SGXWalletServer::dkgVerificationImpl(const string &_publicShares, co
throw SGXException(INVALID_DKG_PARAMS, "Invalid length of public shares"); throw SGXException(INVALID_DKG_PARAMS, "Invalid length of public shares");
} }
shared_ptr<string> encryptedKeyHex_ptr = readFromDb(_ethKeyName); shared_ptr <string> encryptedKeyHex_ptr = readFromDb(_ethKeyName);
if (!verifyShares(_publicShares.c_str(), _secretShare.c_str(), encryptedKeyHex_ptr->c_str(), _t, _n, _index)) { if (!verifyShares(_publicShares.c_str(), _secretShare.c_str(), encryptedKeyHex_ptr->c_str(), _t, _n, _index)) {
result["result"] = false; result["result"] = false;
...@@ -576,11 +576,11 @@ SGXWalletServer::createBLSPrivateKeyImpl(const string &_blsKeyName, const string ...@@ -576,11 +576,11 @@ SGXWalletServer::createBLSPrivateKeyImpl(const string &_blsKeyName, const string
if (!check_n_t(_t, _n)) { if (!check_n_t(_t, _n)) {
throw SGXException(INVALID_DKG_PARAMS, "Invalid DKG parameters: n or t "); throw SGXException(INVALID_DKG_PARAMS, "Invalid DKG parameters: n or t ");
} }
vector<string> sshares_vect; vector <string> sshares_vect;
spdlog::debug("secret shares from json are - {}", _secretShare); spdlog::debug("secret shares from json are - {}", _secretShare);
shared_ptr<string> encryptedKeyHex_ptr = readFromDb(_ethKeyName); shared_ptr <string> encryptedKeyHex_ptr = readFromDb(_ethKeyName);
bool res = CreateBLSShare(_blsKeyName, _secretShare.c_str(), encryptedKeyHex_ptr->c_str()); bool res = CreateBLSShare(_blsKeyName, _secretShare.c_str(), encryptedKeyHex_ptr->c_str());
if (res) { if (res) {
...@@ -609,11 +609,11 @@ Json::Value SGXWalletServer::getBLSPublicKeyShareImpl(const string &_blsKeyName) ...@@ -609,11 +609,11 @@ Json::Value SGXWalletServer::getBLSPublicKeyShareImpl(const string &_blsKeyName)
if (!checkName(_blsKeyName, "BLS_KEY")) { if (!checkName(_blsKeyName, "BLS_KEY")) {
throw SGXException(INVALID_POLY_NAME, "Invalid BLSKey name"); throw SGXException(INVALID_POLY_NAME, "Invalid BLSKey name");
} }
shared_ptr<string> encryptedKeyHex_ptr = readFromDb(_blsKeyName); shared_ptr <string> encryptedKeyHex_ptr = readFromDb(_blsKeyName);
spdlog::debug("encr_bls_key_share is {}", *encryptedKeyHex_ptr); spdlog::debug("encr_bls_key_share is {}", *encryptedKeyHex_ptr);
spdlog::debug("length is {}", encryptedKeyHex_ptr->length()); spdlog::debug("length is {}", encryptedKeyHex_ptr->length());
vector<string> public_key_vect = GetBLSPubKey(encryptedKeyHex_ptr->c_str()); vector <string> public_key_vect = GetBLSPubKey(encryptedKeyHex_ptr->c_str());
for (uint8_t i = 0; i < 4; i++) { for (uint8_t i = 0; i < 4; i++) {
result["blsPublicKeyShare"][i] = public_key_vect.at(i); result["blsPublicKeyShare"][i] = public_key_vect.at(i);
result["BlsPublicKeyShare"][i] = public_key_vect.at(i); result["BlsPublicKeyShare"][i] = public_key_vect.at(i);
...@@ -633,7 +633,7 @@ Json::Value SGXWalletServer::complaintResponseImpl(const string &_polyName, int ...@@ -633,7 +633,7 @@ Json::Value SGXWalletServer::complaintResponseImpl(const string &_polyName, int
throw SGXException(INVALID_POLY_NAME, "Invalid polynomial name"); throw SGXException(INVALID_POLY_NAME, "Invalid polynomial name");
} }
string shareG2_name = "shareG2_" + _polyName + "_" + to_string(_ind) + ":"; string shareG2_name = "shareG2_" + _polyName + "_" + to_string(_ind) + ":";
shared_ptr<string> shareG2_ptr = readFromDb(shareG2_name); shared_ptr <string> shareG2_ptr = readFromDb(shareG2_name);
string DHKey = decryptDHKey(_polyName, _ind); string DHKey = decryptDHKey(_polyName, _ind);
...@@ -669,7 +669,7 @@ Json::Value SGXWalletServer::isPolyExistsImpl(const string &_polyName) { ...@@ -669,7 +669,7 @@ Json::Value SGXWalletServer::isPolyExistsImpl(const string &_polyName) {
result["exists"] = false; result["exists"] = false;
try { try {
std::shared_ptr<std::string> poly_str_ptr = LevelDB::getLevelDb()->readString(_polyName); std::shared_ptr <std::string> poly_str_ptr = LevelDB::getLevelDb()->readString(_polyName);
if (poly_str_ptr != nullptr) { if (poly_str_ptr != nullptr) {
result["IsExist"] = true; result["IsExist"] = true;
...@@ -785,7 +785,7 @@ Json::Value SGXWalletServer::getServerStatus() { ...@@ -785,7 +785,7 @@ Json::Value SGXWalletServer::getServerStatus() {
return getServerStatusImpl(); return getServerStatusImpl();
} }
shared_ptr<string> SGXWalletServer::readFromDb(const string &name, const string &prefix) { shared_ptr <string> SGXWalletServer::readFromDb(const string &name, const string &prefix) {
auto dataStr = LevelDB::getLevelDb()->readString(prefix + name); auto dataStr = LevelDB::getLevelDb()->readString(prefix + name);
...@@ -796,7 +796,7 @@ shared_ptr<string> SGXWalletServer::readFromDb(const string &name, const string ...@@ -796,7 +796,7 @@ shared_ptr<string> SGXWalletServer::readFromDb(const string &name, const string
return dataStr; return dataStr;
} }
shared_ptr<string> SGXWalletServer::readKeyShare(const string &_keyShareName) { shared_ptr <string> SGXWalletServer::readKeyShare(const string &_keyShareName) {
auto keyShareStr = LevelDB::getLevelDb()->readString("BLSKEYSHARE:" + _keyShareName); auto keyShareStr = LevelDB::getLevelDb()->readString("BLSKEYSHARE:" + _keyShareName);
......
...@@ -25,19 +25,22 @@ ...@@ -25,19 +25,22 @@
#define SGXWALLET_SGXWALLETSERVER_HPP #define SGXWALLET_SGXWALLETSERVER_HPP
#include "abstractstubserver.h"
#include <mutex>
#include <jsonrpccpp/server/connectors/httpserver.h>
#include <mutex>
#include "abstractstubserver.h"
using namespace jsonrpc; using namespace jsonrpc;
using namespace std; using namespace std;
class SGXWalletServer : public AbstractStubServer { class SGXWalletServer : public AbstractStubServer {
SGXWalletServer *server = nullptr;
recursive_mutex m; recursive_mutex m;
static shared_ptr<SGXWalletServer> server;
static shared_ptr<HttpServer> httpServer;
public: public:
SGXWalletServer(AbstractServerConnector &_connector, serverVersion_t _type); SGXWalletServer(AbstractServerConnector &_connector, serverVersion_t _type);
......
...@@ -113,6 +113,7 @@ void initAll(uint32_t _logLevel, bool _checkCert, bool _autoSign) { ...@@ -113,6 +113,7 @@ void initAll(uint32_t _logLevel, bool _checkCert, bool _autoSign) {
static int sgxServerInited; static int sgxServerInited;
cout << "Running sgxwallet version:" << SGXWALLET_VERSION << endl; cout << "Running sgxwallet version:" << SGXWALLET_VERSION << endl;
CHECK_STATE(sgxServerInited == 0) CHECK_STATE(sgxServerInited == 0)
sgxServerInited = 1; sgxServerInited = 1;
initEnclave(_logLevel); initEnclave(_logLevel);
...@@ -121,8 +122,8 @@ void initAll(uint32_t _logLevel, bool _checkCert, bool _autoSign) { ...@@ -121,8 +122,8 @@ void initAll(uint32_t _logLevel, bool _checkCert, bool _autoSign) {
if (useHTTPS) { if (useHTTPS) {
SGXWalletServer::initHttpsServer(_checkCert); SGXWalletServer::initHttpsServer(_checkCert);
initRegistrationServer(_autoSign); SGXRegistrationServer::initRegistrationServer(_autoSign);
init_csrmanager_server(); CSRManagerServer::initCSRManagerServer();
} else { } else {
SGXWalletServer::initHttpServer(); SGXWalletServer::initHttpServer();
} }
......
-----BEGIN CERTIFICATE REQUEST-----
MIICmjCCAYICAQAwVTELMAkGA1UEBhMCVVMxEzARBgNVBAgMClNvbWUtU3RhdGUx
ITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEOMAwGA1UEAwwFU0tB
TEUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDE6YD01cpYiyacQ+nx
esoN3IVs74b/+78uwpUMXbodlfNTLjqbWOkVwBVNZtrLSAa9d1Unz+gODfDBtVMl
cWkyfRLgQfT8Ks6opEUitmyzc3B/rXsU3lO0qGz+tHscOB9lJQVl64LXaFpVFTnh
LHZtQxvPuqrMfnc6iE0HlLU9wYAFVeDxtmH4oTFsTcsKNK4USynlyI33oc4q1sUC
2ZYB2D1OeewtuAlJEEq75CrSlWXuqruFp1kgNKp/xAdw7CnhCBQhmMC1q1kAK4oo
/g4Nb2SMS5VfHATnswJXdjbMD26tROr7Y8WOojWwHtC2YU96cqy3tw9U4RNGm3Sf
gkhZAgMBAAGgADANBgkqhkiG9w0BAQsFAAOCAQEAcioOqQ0t/M57ugitShFeN6Cq
cnc8mScGkLlaWjr9eznr9N3GiQQfSY3otJ/i0SD2kbrZ3E1MAGIup0ZHm+CTs2KU
sPJYz6XwDHPN17Pfal95+wA2dpWOwHz3c8AJ/9qIh2e3SesLF4lUrP56HspNiRbJ
EReGdHHA+c5MLe85vAOoRwEX+XHwmnoki3V9MORx0oTCecshuebY11aGXTSqB8t2
xe6GrVoBHIUS56z5lltKHJayoFbyiI0dfrMs0SnY2j9CwYqEy/0w8gDH78zCc2wf
bgneXwSdFcy/V9182hcocKHxECLdYal+3DnnnN0GZHZlxV5yn1zfAIYHYBBzkg==
-----END CERTIFICATE REQUEST-----
-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDE6YD01cpYiyac
Q+nxesoN3IVs74b/+78uwpUMXbodlfNTLjqbWOkVwBVNZtrLSAa9d1Unz+gODfDB
tVMlcWkyfRLgQfT8Ks6opEUitmyzc3B/rXsU3lO0qGz+tHscOB9lJQVl64LXaFpV
FTnhLHZtQxvPuqrMfnc6iE0HlLU9wYAFVeDxtmH4oTFsTcsKNK4USynlyI33oc4q
1sUC2ZYB2D1OeewtuAlJEEq75CrSlWXuqruFp1kgNKp/xAdw7CnhCBQhmMC1q1kA
K4oo/g4Nb2SMS5VfHATnswJXdjbMD26tROr7Y8WOojWwHtC2YU96cqy3tw9U4RNG
m3SfgkhZAgMBAAECggEAWditZYlzBUmguWZnhS5gqUh4fMciEwT8K8rPFVBizoMP
/mE2jpFX8Puu/J00sdJQePzNFxhPKrKDqu8gXBJOTKIzDa4qqTCjEOG7ReZ03MCM
kUVHxrLXALRk3ybckXiuIols2B9ImR7dMLs5qJuQAbTAKN1kd2Aw6L0uYIoi1GT7
B76Xe1LuvVxjyzGzBdRX1fWZ44WUVVq5zmiMdgAVNQZNTqKJdt6kJjkfZFTidc7z
/69+0Xlq7nl5E4/7SEYRqEzNgdLAIJttkf6LX4Vunek6qewHSj9ji31ecNSD0wmM
GFjCPW9uInWLymQQBJm633RBZF362FSzX8lqxa4AjQKBgQD5sF9IXvvw4qiYJ7Hl
QaSBY6VPPniaXWeQer/9ki8doxXnhc38fNGxcni8BtV5+2+VSSlNIZ1ahI/kRsDA
o0yq7JvhMU7nUqPGN/23lDCqOuWyuXcNsKXZV9lVj3kzhI+Z++GDSteMywXYQ5qh
4Kx12AUi7o2ggwpsG2SrIUd63wKBgQDJ46LDvQ8Xrj6m87qWQ6RJib4tYKmuSNQx
Ov0HVbYPXk9BTnS3hvvxQLZHFPj9iopMG6SywmEgBcVlRwkFuF8gUXOFMjBfPDe+
ouukjoL59mjrC0i+c9apwsfPBgfG5vzjlNjdna6dcUykg90NJDrv7zGCfImfZGgs
9vfKVMvbxwKBgEHwFMmM4+WyRamg2fbcBfBxeydZLQo+3mmmMOtq3mxqNA+nI0Wp
RMsimsW03E1RXB9FadXHqcFMvp8fHCoDNezxfRzUI60tArkG8ka3qL5bvWscVVdV
LgcejvNsZyp2uGGGxgAhFJlGyC1bdQuIxKJ+QKT/8IDR+j+gYE5dBH5rAoGAUEBH
W+1UCYK+7thlbAO5U24Ihbst19SlXGhpWjgM5bEEah5IsQdcMLsbecfxbb9bWAOJ
BXHU78i7fZWuFXMDhTI7bE/WAJVMR2A1sTThBYGYlQ3oPaSISPTfPgDUqJD7J2/s
gLOETJtT7vVnsiibsPJwyMC+Z/ienHkTaH8qhdMCgYAsP7JiJ2RXWMMSfzaORE5T
Ggzm5rsdROod+qKP20zjGZByQaWnjdLNVEcICE1ASXv6ROGP9/GyOv/Cmr8ZU0lI
2WRetrhJipQgTPtv+5WeeqR5FAqw6ZtdrAse8+GFHfafhL83Wf8EWpZkYXB7JE2K
hdlRVAxc5YkTVsfeV8IXtA==
-----END PRIVATE KEY-----
...@@ -81,6 +81,9 @@ extern int autoconfirm; ...@@ -81,6 +81,9 @@ extern int autoconfirm;
#define INVALID_DKG_PARAMS -12 #define INVALID_DKG_PARAMS -12
#define INVALID_SECRET_SHARES_LENGTH -13 #define INVALID_SECRET_SHARES_LENGTH -13
#define CERT_REQUEST_DOES_NOT_EXIST -14
#define INVALID_ECDSA_KEY_NAME -20 #define INVALID_ECDSA_KEY_NAME -20
#define INVALID_HEX -21 #define INVALID_HEX -21
#define INVALID_ECSDA_SIGNATURE -22 #define INVALID_ECSDA_SIGNATURE -22
......
...@@ -69,6 +69,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ...@@ -69,6 +69,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <thread> #include <thread>
#include "common.h" #include "common.h"
#include "stubclient.h" #include "stubclient.h"
#include "SGXRegistrationServer.h"
#include "SGXWalletServer.h" #include "SGXWalletServer.h"
#include "testw.h" #include "testw.h"
...@@ -303,9 +304,23 @@ public: ...@@ -303,9 +304,23 @@ public:
~TestFixture() { ~TestFixture() {
destroyEnclave(); destroyEnclave();
} }
};
class TestFixtureHTTPS {
public:
TestFixtureHTTPS() {
resetDB();
setOptions(false, false, true, true);
initAll(0, false, true);
}
~TestFixtureHTTPS() {
destroyEnclave();
}
}; };
TEST_CASE_METHOD(TestFixture, "ECDSA keygen and signature test", "[ecdsa-key-sig-gen]") { TEST_CASE_METHOD(TestFixture, "ECDSA keygen and signature test", "[ecdsa-key-sig-gen]") {
...@@ -769,6 +784,28 @@ TEST_CASE_METHOD(TestFixture, "Get ServerStatus", "[get-server-status]") { ...@@ -769,6 +784,28 @@ TEST_CASE_METHOD(TestFixture, "Get ServerStatus", "[get-server-status]") {
} }
TEST_CASE_METHOD(TestFixtureHTTPS, "Cert request sign", "[cert-sign]") {
REQUIRE(SGXRegistrationServer::getServer() != nullptr);
string csrFile = "insecure-samples/yourdomain.csr";
ifstream infile(csrFile);
infile.exceptions(std::ifstream::failbit | std::ifstream::badbit);
ostringstream ss;
ss << infile.rdbuf();
infile.close();
auto result = SGXRegistrationServer::getServer()->SignCertificate(ss.str());
REQUIRE(result["status"] == 0);
result = SGXRegistrationServer::getServer()->SignCertificate("Haha");
REQUIRE(result["status"] != 0);
}
TEST_CASE_METHOD(TestFixture, "DKG API test", "[dkg-api]") { TEST_CASE_METHOD(TestFixture, "DKG API test", "[dkg-api]") {
......
...@@ -21,6 +21,8 @@ ...@@ -21,6 +21,8 @@
#define SAMPLE_DKG_PUB_KEY_2 "378b3e6fdfe2633256ae1662fcd23466d02ead907b5d4366136341cea5e46f5a7bb67d897d6e35f619810238aa143c416f61c640ed214eb9c67a34c4a31b7d25" #define SAMPLE_DKG_PUB_KEY_2 "378b3e6fdfe2633256ae1662fcd23466d02ead907b5d4366136341cea5e46f5a7bb67d897d6e35f619810238aa143c416f61c640ed214eb9c67a34c4a31b7d25"
//openssl req -new -newkey rsa:2048 -nodes -keyout yourdomain.key -out yourdomain.csr^
#define SAMPLE_CSR_FILE_NAME "samples/yourdomain.csr"
#endif //SGXWALLET_TESTW_H #endif //SGXWALLET_TESTW_H
...@@ -35,7 +35,8 @@ print("Starting build push") ...@@ -35,7 +35,8 @@ print("Starting build push")
print("Top directory is:" + topDir) print("Top directory is:" + topDir)
testList = ["[get-server-status]", testList = [ "[cert-sign]",
"[get-server-status]",
"[ecdsa-key-gen]", "[ecdsa-key-gen]",
"[ecdsa-key-sig-gen]", "[ecdsa-key-sig-gen]",
"[ecdsa-get-pub-key]", "[ecdsa-get-pub-key]",
......
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