#pragma once #include "types.hpp" #include "Encryption.hpp" #include "Signature.hpp" namespace odhtdb { struct EncryptedPrivateKey { u8 nonce[ENCRYPTION_NONCE_BYTE_SIZE]; u8 encryptedPrivateKey[ENCRYPTION_CHECKSUM_BYTE_SIZE + 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: static LocalUserEncrypted* create(const Signature::PublicKey &publicKey, const EncryptedPrivateKey &encryptedPrivateKey) { return new LocalUserEncrypted(publicKey, encryptedPrivateKey); } const Signature::PublicKey& getPublicKey() const { return publicKey; } const EncryptedPrivateKey& getPrivateKey() const { return encryptedPrivateKey; } private: LocalUserEncrypted(const Signature::PublicKey &_publicKey, const EncryptedPrivateKey &_encryptedPrivateKey) : publicKey(_publicKey), encryptedPrivateKey(_encryptedPrivateKey) { } private: Signature::PublicKey publicKey; EncryptedPrivateKey encryptedPrivateKey; }; }