summaryrefslogtreecommitdiffstats
path: root/ext/sqlite_modern_cpp/sqlite_modern_cpp/sqlcipher.h
diff options
context:
space:
mode:
Diffstat (limited to 'ext/sqlite_modern_cpp/sqlite_modern_cpp/sqlcipher.h')
-rw-r--r--ext/sqlite_modern_cpp/sqlite_modern_cpp/sqlcipher.h44
1 files changed, 44 insertions, 0 deletions
diff --git a/ext/sqlite_modern_cpp/sqlite_modern_cpp/sqlcipher.h b/ext/sqlite_modern_cpp/sqlite_modern_cpp/sqlcipher.h
new file mode 100644
index 0000000..da0f018
--- /dev/null
+++ b/ext/sqlite_modern_cpp/sqlite_modern_cpp/sqlcipher.h
@@ -0,0 +1,44 @@
+#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);
+ }
+ };
+}