VaultManager.h raw
 1#pragma once
 2
 3#include <sodium.h>
 4
 5#include <QByteArray>
 6#include <QDateTime>
 7#include <QObject>
 8#include <QString>
 9
10struct PasswordEntry {
11	int id;
12	QString origin;
13	QString username;
14	QString password;
15	QDateTime created_at;
16	QDateTime updated_at;
17};
18
19class VaultManager : public QObject {
20	Q_OBJECT
21public:
22	static VaultManager &instance() {
23		static VaultManager inst;
24		return inst;
25	}
26
27	bool init();
28	bool isInitialized();
29	bool setup(const QString &masterPassword);
30	bool unlock(const QString &masterPassword);
31	void lock();
32	bool isUnlocked() const { return !databaseKey.isEmpty(); }
33
34	bool savePassword(const QString &origin, const QString &username, const QString &password);
35	QList<PasswordEntry> getPasswords(const QString &origin = QString());
36
37private:
38	VaultManager();
39	~VaultManager();
40
41	QByteArray databaseKey;	 // The DEK
42
43	QByteArray deriveKEK(const QString &password, const QByteArray &salt, unsigned long long memlimit, unsigned long long opslimit);
44};