diff options
author | dec05eba <0xdec05eba@gmail.com> | 2018-05-16 08:13:26 +0200 |
---|---|---|
committer | dec05eba <0xdec05eba@gmail.com> | 2018-05-16 08:13:28 +0200 |
commit | 4254486345167d4800f4a8f2a9b84975f0a4c886 (patch) | |
tree | afb6fcd6d2110b8f86acc9559d728706e767ac05 | |
parent | ba8631c5f75df45fb07726e0aab3bb0834d6a5b6 (diff) |
Return stored node users decrypted as hash map instead of vector
-rw-r--r-- | include/odhtdb/Database.hpp | 2 | ||||
-rw-r--r-- | include/odhtdb/DatabaseStorage.hpp | 8 | ||||
-rw-r--r-- | src/Database.cpp | 2 | ||||
-rw-r--r-- | src/DatabaseStorage.cpp | 6 | ||||
-rw-r--r-- | tests/main.cpp | 7 |
5 files changed, 10 insertions, 15 deletions
diff --git a/include/odhtdb/Database.hpp b/include/odhtdb/Database.hpp index bd7b3f5..87389eb 100644 --- a/include/odhtdb/Database.hpp +++ b/include/odhtdb/Database.hpp @@ -192,7 +192,7 @@ namespace odhtdb // Returns nodes, public key and private key of encrypted user. // Throws DatabaseStorageWrongPassword if password for the stored user is wrong. - std::vector<NodeUserKeyPair> getStoredUserNodeDataDecrypted(const std::string &username, const std::string &password); + MapHash<Signature::KeyPair> getStoredUserNodeDataDecrypted(const std::string &username, const std::string &password); std::vector<OwnedMemory> getUserGroups(const Hash &nodeHash, const Signature::PublicKey &userPublicKey) const; diff --git a/include/odhtdb/DatabaseStorage.hpp b/include/odhtdb/DatabaseStorage.hpp index 2b1e552..264ab57 100644 --- a/include/odhtdb/DatabaseStorage.hpp +++ b/include/odhtdb/DatabaseStorage.hpp @@ -72,12 +72,6 @@ namespace odhtdb using FetchNodeUserActionGapsCallbackFunc = std::function<void(const DataView userPublicKey, u64 start, u64 range)>; using FetchNodeUserLatestActionCounterCallbackFunc = std::function<void(const DataView userPublicKey, u64 latestActionCounter)>; - struct NodeUserKeyPair - { - const Hash nodeHash; - const Signature::KeyPair keyPair; - }; - class DatabaseStorage { public: @@ -130,7 +124,7 @@ namespace odhtdb // Returns nodes, public key and private key of encrypted user. // Throws DatabaseStorageWrongPassword if password for the stored user is wrong. // Throws DatabaseStorageNoSuchStoredUser if user doesn't exist. - std::vector<NodeUserKeyPair> getStoredUserNodeDataDecrypted(const std::string &username, const std::string &password); + MapHash<Signature::KeyPair> getStoredUserNodeDataDecrypted(const std::string &username, const std::string &password); // Returns true and node decryption key if node exists and we have the decryption key, // otherwise return false and OwnedMemory with data set to nullptr diff --git a/src/Database.cpp b/src/Database.cpp index 5b3f705..8529811 100644 --- a/src/Database.cpp +++ b/src/Database.cpp @@ -661,7 +661,7 @@ namespace odhtdb return databaseStorage.storeUserPasswordEncrypted(nodeHash, username, password, keyPair); } - vector<NodeUserKeyPair> Database::getStoredUserNodeDataDecrypted(const string &username, const string &password) + MapHash<Signature::KeyPair> Database::getStoredUserNodeDataDecrypted(const string &username, const string &password) { return databaseStorage.getStoredUserNodeDataDecrypted(username, password); } diff --git a/src/DatabaseStorage.cpp b/src/DatabaseStorage.cpp index ed190e8..7b316f7 100644 --- a/src/DatabaseStorage.cpp +++ b/src/DatabaseStorage.cpp @@ -923,13 +923,13 @@ namespace odhtdb transaction.commit(); } - vector<NodeUserKeyPair> DatabaseStorage::getStoredUserNodeDataDecrypted(const string &username, const string &password) + MapHash<Signature::KeyPair> DatabaseStorage::getStoredUserNodeDataDecrypted(const string &username, const string &password) { OwnedMemory hashedPassword = hashPassword(DataView((void*)password.data(), password.size()), DataView((void*)passwordSalt, PASSWORD_SALT_LEN)); DataView hashedPasswordView(hashedPassword.data, hashedPassword.size); i64 encryptedUserRowId = getStoredUserId(username, hashedPasswordView); - vector<NodeUserKeyPair> result; + MapHash<Signature::KeyPair> result; SqlQuery query(sqliteDb, "SELECT node, userPublicKey, nonce, userPrivateKeyEncrypted FROM NodeEncryptedUserData WHERE usernameId = ?", { encryptedUserRowId }); while(query.next()) { @@ -947,7 +947,7 @@ namespace odhtdb Decryption decryptedStoredPrivateKey(storedPrivateKeyEncrypted, storedNonce, hashedPasswordView); Signature::PrivateKey userPrivateKey((const char*)decryptedStoredPrivateKey.getDecryptedText().data, decryptedStoredPrivateKey.getDecryptedText().size); Signature::KeyPair keyPair(userPublicKey, userPrivateKey); - result.push_back({ nodeHash, keyPair }); + result[nodeHash] = keyPair; } catch(DecryptionException &e) { diff --git a/tests/main.cpp b/tests/main.cpp index e819684..3f9bbf9 100644 --- a/tests/main.cpp +++ b/tests/main.cpp @@ -221,11 +221,12 @@ int main() auto nodeUserData = database.getStoredUserNodeDataDecrypted(username, password); assertEquals((size_t)1, nodeUserData.size()); - if(nodeUserData[0].nodeHash != *databaseNode.getRequestHash()) + auto userDataIt = nodeUserData.find(*databaseNode.getRequestHash()); + if(userDataIt == nodeUserData.end()) fail("Expected stored node hash to match node hash"); - if(nodeUserData[0].keyPair.getPublicKey() != adminUserKey->getPublicKey()) + if(userDataIt->second.getPublicKey() != adminUserKey->getPublicKey()) fail("Expected stored public key to match admin user public key"); - if(nodeUserData[0].keyPair.getPrivateKey() != adminUserKey->getPrivateKey()) + if(userDataIt->second.getPrivateKey() != adminUserKey->getPrivateKey()) fail("Expected stored private key to match admin user private key"); try |