#pragma once #include #include #include #include #include struct PasswordEntry { int id; QString origin; QString username; QString password; QDateTime created_at; QDateTime updated_at; }; class VaultManager : public QObject { Q_OBJECT public: static VaultManager &instance() { static VaultManager inst; return inst; } bool init(); bool isInitialized(); bool setup(const QString &masterPassword); bool unlock(const QString &masterPassword); void lock(); bool isUnlocked() const { return !databaseKey.isEmpty(); } bool savePassword(const QString &origin, const QString &username, const QString &password); QList getPasswords(const QString &origin = QString()); private: VaultManager(); ~VaultManager(); QByteArray databaseKey; // The DEK QByteArray deriveKEK(const QString &password, const QByteArray &salt, unsigned long long memlimit, unsigned long long opslimit); };