From 0366c782f103958a2307e23711ed2ea886fbbad9 Mon Sep 17 00:00:00 2001 From: Dario Date: Mon, 16 Mar 2020 11:50:03 +0100 Subject: [PATCH] adding self-healing function for User::sign, working only while passphrase is saved not encrypted --- src/cpp/model/User.cpp | 15 ++++++++++++++- src/cpp/model/table/User.cpp | 1 + src/cpp/model/table/User.h | 3 +++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/cpp/model/User.cpp b/src/cpp/model/User.cpp index 0aba84292..d574ef5e2 100644 --- a/src/cpp/model/User.cpp +++ b/src/cpp/model/User.cpp @@ -1111,9 +1111,22 @@ MemoryBin* User::sign(const unsigned char* message, size_t messageSize) } } if (correctPassphraseFound) { + + // save corrected key into db + auto encyrptedPrivKey = encrypt(privKey); + auto newUser = controller::User::create(); + if (1 == newUser->load(mDBId)) { + auto userModel = newUser->getModel(); + userModel->setPrivateKey(encyrptedPrivKey); + userModel->updatePrivkey(); + + mm->releaseMemory(encyrptedPrivKey); + + } + + // sign with received key auto const_privKey = keys.getPrivateKey(); auto signBinBuffer = mm->getFreeMemory(crypto_sign_BYTES); - unsigned long long actualSignLength = 0; if (crypto_sign_detached(*signBinBuffer, &actualSignLength, message, messageSize, *const_privKey)) { diff --git a/src/cpp/model/table/User.cpp b/src/cpp/model/table/User.cpp index 8645499f6..9d3715c3a 100644 --- a/src/cpp/model/table/User.cpp +++ b/src/cpp/model/table/User.cpp @@ -140,6 +140,7 @@ namespace model { return select; } + /* std::string mEmail; std::string mFirstName; diff --git a/src/cpp/model/table/User.h b/src/cpp/model/table/User.h index 6fec71a4a..4d859972e 100644 --- a/src/cpp/model/table/User.h +++ b/src/cpp/model/table/User.h @@ -41,6 +41,9 @@ namespace model { const char* getTableName() const { return "users"; } std::string toString(); std::string toHTMLString(); + + // specific db operation + inline size_t updatePrivkey() { lock(); auto result = updateIntoDB("privkey", mPrivateKey); unlock(); return result; } // default getter unlocked