-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathexample.c
More file actions
99 lines (82 loc) · 2.7 KB
/
example.c
File metadata and controls
99 lines (82 loc) · 2.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#include "../../libsql.h"
#include <stdio.h>
int main() {
libsql_setup((libsql_config_t){0});
const char *encryption_key = "my_secret_key";
libsql_database_t db = libsql_database_init((libsql_database_desc_t
){.path = "encrypted.db",
.encryption_key = encryption_key,
.cypher = LIBSQL_CYPHER_AES256});
if (db.err) {
fprintf(
stderr,
"Error initializing encrypted database: %s\n",
libsql_error_message(db.err)
);
return 1;
}
libsql_connection_t conn = libsql_database_connect(db);
if (conn.err) {
fprintf(
stderr,
"Error connecting to encrypted database: %s\n",
libsql_error_message(conn.err)
);
return 1;
}
const char *setup_sql = "CREATE TABLE IF NOT EXISTS secrets (id INTEGER "
"PRIMARY KEY AUTOINCREMENT, content TEXT);"
"INSERT INTO secrets (content) VALUES ('Top Secret "
"Info 1'), ('Classified Data 2');";
libsql_batch_t batch = libsql_connection_batch(conn, setup_sql);
if (batch.err) {
fprintf(
stderr,
"Error executing setup batch: %s\n",
libsql_error_message(batch.err)
);
return 1;
}
printf("Table created and data inserted into encrypted database.\n");
libsql_statement_t query_stmt =
libsql_connection_prepare(conn, "SELECT * FROM secrets");
if (query_stmt.err) {
fprintf(
stderr,
"Error preparing query: %s\n",
libsql_error_message(query_stmt.err)
);
return 1;
}
libsql_rows_t rows = libsql_statement_query(query_stmt);
if (rows.err) {
fprintf(
stderr,
"Error executing query: %s\n",
libsql_error_message(rows.err)
);
return 1;
}
printf("Secrets in the encrypted database:\n");
libsql_row_t row;
while (!(row = libsql_rows_next(rows)).err && !libsql_row_empty(row)) {
libsql_result_value_t id = libsql_row_value(row, 0);
libsql_result_value_t content = libsql_row_value(row, 1);
if (id.err || content.err) {
fprintf(stderr, "Error retrieving row values\n");
continue;
}
printf(
"%lld: %s\n",
(long long)id.ok.value.integer,
(char *)content.ok.value.text.ptr
);
libsql_row_deinit(row);
}
libsql_rows_deinit(rows);
libsql_statement_deinit(query_stmt);
libsql_connection_deinit(conn);
libsql_database_deinit(db);
printf("Database closed. The file 'encrypted.db' is now encrypted.\n");
return 0;
}