aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordec05eba <0xdec05eba@gmail.com>2018-05-16 08:13:26 +0200
committerdec05eba <0xdec05eba@gmail.com>2018-05-16 08:13:28 +0200
commit4254486345167d4800f4a8f2a9b84975f0a4c886 (patch)
treeafb6fcd6d2110b8f86acc9559d728706e767ac05
parentba8631c5f75df45fb07726e0aab3bb0834d6a5b6 (diff)
Return stored node users decrypted as hash map instead of vector
-rw-r--r--include/odhtdb/Database.hpp2
-rw-r--r--include/odhtdb/DatabaseStorage.hpp8
-rw-r--r--src/Database.cpp2
-rw-r--r--src/DatabaseStorage.cpp6
-rw-r--r--tests/main.cpp7
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