aboutsummaryrefslogtreecommitdiff
path: root/include/odhtdb/LocalUserEncrypted.hpp
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2018-04-14 19:45:15 +0200
committerdec05eba <dec05eba@protonmail.com>2020-08-18 23:25:46 +0200
commit414f2cafc6cf2fe141c011b0d63d447a9b983ac3 (patch)
treea0d53ca898b8586e7be97689fcb993d5405d08a0 /include/odhtdb/LocalUserEncrypted.hpp
parent53a1850ce2a253c574113684ac38c8ed31b1d0ae (diff)
Store database storage to files, also loading
Diffstat (limited to 'include/odhtdb/LocalUserEncrypted.hpp')
-rw-r--r--include/odhtdb/LocalUserEncrypted.hpp51
1 files changed, 51 insertions, 0 deletions
diff --git a/include/odhtdb/LocalUserEncrypted.hpp b/include/odhtdb/LocalUserEncrypted.hpp
new file mode 100644
index 0000000..c250d13
--- /dev/null
+++ b/include/odhtdb/LocalUserEncrypted.hpp
@@ -0,0 +1,51 @@
+#pragma once
+
+#include "User.hpp"
+#include "types.hpp"
+#include "Encryption.hpp"
+
+namespace odhtdb
+{
+ struct EncryptedPrivateKey
+ {
+ u8 nonce[ENCRYPTION_NONCE_BYTE_SIZE];
+ u8 encryptedPrivateKey[16 + PRIVATE_KEY_NUM_BYTES];
+
+ EncryptedPrivateKey();
+ EncryptedPrivateKey(const EncryptedPrivateKey &other);
+
+ // Throws DecryptionException if password (or salt) is wrong
+ Signature::PrivateKey decrypt(const DataView &plainPassword, const DataView &salt) const;
+ };
+
+ // Local user with encrypted private key
+ class LocalUserEncrypted : public User
+ {
+ public:
+ static LocalUserEncrypted* create(const Signature::PublicKey &publicKey, const EncryptedPrivateKey &encryptedPrivateKey, const std::string &name, Group *group)
+ {
+ return new LocalUserEncrypted(publicKey, encryptedPrivateKey, name, group);
+ }
+
+ const Signature::PublicKey& getPublicKey() const override
+ {
+ return publicKey;
+ }
+
+ const EncryptedPrivateKey& getPrivateKey() const
+ {
+ return encryptedPrivateKey;
+ }
+ private:
+ LocalUserEncrypted(const Signature::PublicKey &_publicKey, const EncryptedPrivateKey &_encryptedPrivateKey, const std::string &name, Group *group) :
+ User(User::Type::LOCAL_ENCRYPTED, name, group),
+ publicKey(_publicKey),
+ encryptedPrivateKey(_encryptedPrivateKey)
+ {
+
+ }
+ private:
+ Signature::PublicKey publicKey;
+ EncryptedPrivateKey encryptedPrivateKey;
+ };
+}