45 rader
1.2 KiB
C
45 rader
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);
|
||
|
}
|
||
|
};
|
||
|
}
|