Unverified Commit d2e6f8ca authored by kladko's avatar kladko

SKALE-1880-fix-ecdsa

parent 7bf43a09
...@@ -135,9 +135,10 @@ string getECDSAPubKey(const char *_encryptedKeyHex) { ...@@ -135,9 +135,10 @@ string getECDSAPubKey(const char *_encryptedKeyHex) {
return pubKey; return pubKey;
} }
void verifyECDSASig(string& pubKeyStr, const char *hashHex, const char *signatureR, bool verifyECDSASig(string& pubKeyStr, const char *hashHex, const char *signatureR,
const char *signatureS) { const char *signatureS) {
bool result = false;
signature sig = signature_init(); signature sig = signature_init();
...@@ -158,12 +159,15 @@ void verifyECDSASig(string& pubKeyStr, const char *hashHex, const char *signatur ...@@ -158,12 +159,15 @@ void verifyECDSASig(string& pubKeyStr, const char *hashHex, const char *signatur
} }
signature_set_str(sig, signatureR, signatureS, 16); signature_set_str(sig, signatureR, signatureS, 16);
point_set_hex(publicKey, r.c_str(), s.c_str()); point_set_hex(publicKey, r.c_str(), s.c_str());
if (!signature_verify(msgMpz, sig, publicKey, curve)) { if (!signature_verify(msgMpz, sig, publicKey, curve)) {
spdlog::error("ECDSA sig not verified"); spdlog::error("ECDSA sig not verified");
goto clean; goto clean;
} }
result = true;
clean: clean:
mpz_clear(msgMpz); mpz_clear(msgMpz);
...@@ -171,10 +175,12 @@ void verifyECDSASig(string& pubKeyStr, const char *hashHex, const char *signatur ...@@ -171,10 +175,12 @@ void verifyECDSASig(string& pubKeyStr, const char *hashHex, const char *signatur
point_clear(publicKey); point_clear(publicKey);
signature_free(sig); signature_free(sig);
return result;
} }
vector <string> ecdsaSignHash(const char *encryptedKeyHex, const char *hashHex, int base) { vector <string> ecdsaSignHash(const char *encryptedKeyHex, const char *hashHex, int base) {
vector <string> signature_vect(3); vector <string> signatureVector(3);
vector<char> errMsg(1024, 0); vector<char> errMsg(1024, 0);
int errStatus = 0; int errStatus = 0;
...@@ -219,18 +225,21 @@ vector <string> ecdsaSignHash(const char *encryptedKeyHex, const char *hashHex, ...@@ -219,18 +225,21 @@ vector <string> ecdsaSignHash(const char *encryptedKeyHex, const char *hashHex,
exception = make_shared<SGXException>(666, "failed to sign"); exception = make_shared<SGXException>(666, "failed to sign");
goto clean; goto clean;
} }
signature_vect.at(0) = to_string(signatureV); signatureVector.at(0) = to_string(signatureV);
if (base == 16) { if (base == 16) {
signature_vect.at(1) = "0x" + string(signatureR.data()); signatureVector.at(1) = "0x" + string(signatureR.data());
signature_vect.at(2) = "0x" + string(signatureS.data()); signatureVector.at(2) = "0x" + string(signatureS.data());
} else { } else {
signature_vect.at(1) = string(signatureR.data()); signatureVector.at(1) = string(signatureR.data());
signature_vect.at(2) = string(signatureS.data()); signatureVector.at(2) = string(signatureS.data());
} }
/* Now verify signature */ /* Now verify signature */
verifyECDSASig(pubKeyStr, hashHex, signatureR.data(), signatureS.data()); if (!verifyECDSASig(pubKeyStr, hashHex, signatureR.data(), signatureS.data())) {
exception = make_shared<SGXException>(667, "ECDSA did not verify");
goto clean;
}
clean: clean:
...@@ -238,5 +247,5 @@ vector <string> ecdsaSignHash(const char *encryptedKeyHex, const char *hashHex, ...@@ -238,5 +247,5 @@ vector <string> ecdsaSignHash(const char *encryptedKeyHex, const char *hashHex,
if (exception) if (exception)
throw *exception; throw *exception;
return signature_vect; return signatureVector;
} }
\ No newline at end of file
...@@ -256,3 +256,5 @@ bool signature_verify(mpz_t message, signature sig, point public_key, domain_par ...@@ -256,3 +256,5 @@ bool signature_verify(mpz_t message, signature sig, point public_key, domain_par
return result; return result;
} }
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