27#include <unordered_map>
41 bool unlock(
const std::string& masterPassword);
44 std::vector<PasswordEntry>
loadIndex()
const;
45 bool saveIndex(
const std::vector<PasswordEntry>& entries)
const;
52 const std::vector<std::pair<PasswordEntry, std::string>>& items,
53 std::function<
void(
int ok,
int fail)> onDone);
55 std::function<
void(std::string csv, std::string err)> onDone)
const;
57 std::function<
void(std::string)> callback)
const;
59 bool setSecret(
const std::string&
id,
const std::string& secret);
64 std::string
nowIso()
const;
82 std::string
pbkdf2Hex(
const std::string& password,
83 const std::string& saltHex,
84 int iterations = 200000)
const;
87 bool saveSecretsFile(
const std::unordered_map<std::string,std::string>& secrets)
const;
88 bool loadSecretsFile(std::unordered_map<std::string,std::string>& secrets)
const;
90 const std::string& nonce12,
91 const std::string& plaintext,
92 std::string& ciphertext,
93 std::string& tag16)
const;
96 const std::string& nonce12,
97 const std::string& ciphertext,
98 const std::string& tag16,
99 std::string& plaintext)
const;
100 std::string
deriveKey(
const std::string& saltHex)
const;
101 static bool atomicWriteFile(
const std::string& path,
const std::string& content);
102 void flushAsync(std::unordered_map<std::string,std::string> snapshot)
const;
std::string masterPassword_
std::unordered_map< std::string, std::string > secretCache_
bool setSecret(const std::string &id, const std::string &secret)
bool createMasterPassword(const std::string &masterPassword)
std::string generateId() const
std::atomic< bool > cacheReady_
bool addEntry(const PasswordEntry &entry, const std::string &secret)
std::string pbkdf2Hex(const std::string &password, const std::string &saltHex, int iterations=200000) const
std::string getSecretsPath() const
std::atomic< bool > unlocked_
std::string generateNonceHex() const
std::string getHashPath() const
void flushAsync(std::unordered_map< std::string, std::string > snapshot) const
bool isCacheReady() const
std::string generateSaltHex() const
bool loadSecretsFile(std::unordered_map< std::string, std::string > &secrets) const
bool aesEncrypt(const std::string &key32, const std::string &nonce12, const std::string &plaintext, std::string &ciphertext, std::string &tag16) const
std::string nowIso() const
std::string makeSecretKey(const std::string &id) const
void getSecretAsync(const std::string &id, std::function< void(std::string)> callback) const
bool aesDecrypt(const std::string &key32, const std::string &nonce12, const std::string &ciphertext, const std::string &tag16, std::string &plaintext) const
bool unlock(const std::string &masterPassword)
std::string deriveKey(const std::string &saltHex) const
bool updateEntry(const PasswordEntry &entry, const std::string &secret)
static bool atomicWriteFile(const std::string &path, const std::string &content)
bool saveSecretsFile(const std::unordered_map< std::string, std::string > &secrets) const
std::string getIndexPath() const
void deleteAllEntries(std::function< void(bool)> onDone)
std::vector< PasswordEntry > loadIndex() const
void exportToCSV(std::function< void(std::string csv, std::string err)> onDone) const
bool deleteEntry(const std::string &id)
void addEntriesBulk(const std::vector< std::pair< PasswordEntry, std::string > > &items, std::function< void(int ok, int fail)> onDone)
bool saveIndex(const std::vector< PasswordEntry > &entries) const