54 lines
1.2 KiB
C++
54 lines
1.2 KiB
C++
#pragma once
|
|
|
|
#ifndef SQLITE_HAS_CODEC
|
|
#define SQLITE_HAS_CODEC
|
|
#endif
|
|
|
|
#include "../sqlite_modern_cpp.h"
|
|
|
|
namespace sqlite
|
|
{
|
|
struct sqlcipher_config : public sqlite_config
|
|
{
|
|
std::string key;
|
|
};
|
|
|
|
class sqlcipher_database : public database
|
|
{
|
|
public:
|
|
sqlcipher_database(std::string db, const sqlcipher_config &config) : database(db, config)
|
|
{
|
|
set_key(config.key);
|
|
}
|
|
|
|
sqlcipher_database(std::u16string db, const sqlcipher_config &config) : database(db, config)
|
|
{
|
|
set_key(config.key);
|
|
}
|
|
|
|
void set_key(const std::string &key)
|
|
{
|
|
if(auto ret = sqlite3_key(_db.get(), key.data(), key.size()))
|
|
errors::throw_sqlite_error(ret);
|
|
}
|
|
|
|
void set_key(const std::string &key, const std::string &db_name)
|
|
{
|
|
if(auto ret = sqlite3_key_v2(_db.get(), db_name.c_str(), key.data(), key.size()))
|
|
errors::throw_sqlite_error(ret);
|
|
}
|
|
|
|
void rekey(const std::string &new_key)
|
|
{
|
|
if(auto ret = sqlite3_rekey(_db.get(), new_key.data(), new_key.size()))
|
|
errors::throw_sqlite_error(ret);
|
|
}
|
|
|
|
void rekey(const std::string &new_key, const std::string &db_name)
|
|
{
|
|
if(auto ret = sqlite3_rekey_v2(_db.get(), db_name.c_str(), new_key.data(), new_key.size()))
|
|
errors::throw_sqlite_error(ret);
|
|
}
|
|
};
|
|
} // namespace sqlite
|