aboutsummaryrefslogtreecommitdiff
path: root/src/DatabaseStorage.cpp
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2018-04-25 05:29:43 +0200
committerdec05eba <dec05eba@protonmail.com>2020-08-18 23:25:46 +0200
commit96469ee44afb7a31157d1653c172fc11f47d675c (patch)
tree0c77ff084882ffa689d67e5eaa175997d7b0d1e7 /src/DatabaseStorage.cpp
parentc985ca6ccdf2ad6f21e3fbbada76030ddccb0fa0 (diff)
Store opendht identity in storage file (cached)
Diffstat (limited to 'src/DatabaseStorage.cpp')
-rw-r--r--src/DatabaseStorage.cpp35
1 files changed, 34 insertions, 1 deletions
diff --git a/src/DatabaseStorage.cpp b/src/DatabaseStorage.cpp
index bd98b8b..c507f02 100644
--- a/src/DatabaseStorage.cpp
+++ b/src/DatabaseStorage.cpp
@@ -24,6 +24,7 @@ namespace odhtdb
};
const u64 QUARANTINE_STORAGE_TIME_MICROSECONDS = 60 * 1.0e6;
+ const u16 STORAGE_VERSION = 1;
DatabaseStorageObject::DatabaseStorageObject(DataView &_data, u64 _timestamp, const Signature::PublicKey &_creatorPublicKey) :
data(_data), createdTimestamp(_timestamp), creatorPublicKey(_creatorPublicKey)
@@ -62,9 +63,21 @@ namespace odhtdb
if(!metadataLoaded)
{
sibs::SafeSerializer metadataSerializer;
- metadataSerializer.add((u16)0); // Storage version
+ metadataSerializer.add(STORAGE_VERSION);
randombytes_buf(passwordSalt, PASSWORD_SALT_LEN);
metadataSerializer.add(passwordSalt, PASSWORD_SALT_LEN);
+
+ //string passwordSaltStr((const char*)passwordSalt, PASSWORD_SALT_LEN);
+ identity = dht::crypto::generateIdentity();
+ dht::Blob privateKeyData = identity.first->serialize();
+ metadataSerializer.add((u16)privateKeyData.size());
+ metadataSerializer.add(privateKeyData.data(), privateKeyData.size());
+
+ dht::Blob certificateData;
+ identity.second->pack(certificateData);
+ metadataSerializer.add((u16)certificateData.size());
+ metadataSerializer.add(certificateData.data(), certificateData.size());
+
fileAppend(metadataFilePath, { metadataSerializer.getBuffer().data(), metadataSerializer.getBuffer().size() });
}
}
@@ -288,9 +301,24 @@ namespace odhtdb
sibs::SafeDeserializer deserializer((u8*)metadataFileContent.data, metadataFileContent.size);
u16 storageVersion = deserializer.extract<u16>();
+ if(storageVersion != STORAGE_VERSION)
+ throw std::runtime_error("Wrong storage version!");
u8 passwordSalt[PASSWORD_SALT_LEN];
deserializer.extract(passwordSalt, PASSWORD_SALT_LEN);
+ //string passwordSaltStr((const char*)passwordSalt, PASSWORD_SALT_LEN);
+
+ u16 privateKeySize = deserializer.extract<u16>();
+ dht::Blob privateKeyRaw;
+ privateKeyRaw.resize(privateKeySize);
+ deserializer.extract(&privateKeyRaw[0], privateKeySize);
+ identity.first = make_shared<dht::crypto::PrivateKey>(privateKeyRaw);
+
+ u16 certificateSize = deserializer.extract<u16>();
+ dht::Blob certificateRaw;
+ certificateRaw.resize(certificateSize);
+ deserializer.extract(&certificateRaw[0], certificateSize);
+ identity.second = make_shared<dht::crypto::Certificate>(certificateRaw);
assert(deserializer.empty());
}
@@ -524,6 +552,11 @@ namespace odhtdb
return nullptr;
}
+ const dht::crypto::Identity& DatabaseStorage::getIdentity() const
+ {
+ return identity;
+ }
+
void DatabaseStorage::update()
{
// TODO: Modify this to iterate backwards. Because list is sorted in order of timestamp, we can remove data in range