15static const unsigned char MAGIC[4] = {0x43, 0x57, 0x44, 0x42};
16static const unsigned char VERSION = 0x01;
23static int aes256_encrypt(
const unsigned char *key,
const unsigned char *
iv,
24 const unsigned char *
in,
size_t in_len,
unsigned char *out) {
46static int aes256_decrypt(
const unsigned char *key,
const unsigned char *
iv,
47 const unsigned char *
in,
size_t in_len,
unsigned char *out) {
127 unsigned char *blob = (
unsigned char *)
malloc(total);
134 memcpy(blob + off, MAGIC, 4);
161 size_t blob_len,
size_t *out_len) {
162 if (!ctx || !blob || !out_len)
return NULL;
170 if (
memcmp(blob + off, MAGIC, 4) != 0)
return NULL;
172 if (blob[off] != VERSION)
return NULL;
176 const unsigned char *
kek_iv = blob + off;
207 size_t ct_len = blob_len - off;
unsigned char * cwist_db_crypt_seal(const cwist_db_crypt_ctx_t *ctx, const unsigned char *sqlite_bytes, size_t sqlite_len, size_t *out_len)
Encrypt an SQLite database blob.
unsigned char * cwist_db_crypt_open(const cwist_db_crypt_ctx_t *ctx, const unsigned char *blob, size_t blob_len, size_t *out_len)
Decrypt a sealed blob produced by cwist_db_crypt_seal().
Two-level key hierarchy for encrypting an SQLite database blob.
#define CWIST_DB_CRYPT_IV_LEN
#define CWIST_DB_CRYPT_KEY_LEN
#define CWIST_DB_CRYPT_HDR_LEN
mbedTLS TLS backend: EVP subset (HMAC digest tags, AES-256-CBC).
#define EVP_DecryptInit_ex
#define EVP_DecryptFinal_ex
struct cwist_mtls_cipher_ctx EVP_CIPHER_CTX
#define EVP_CIPHER_CTX_new
#define EVP_EncryptInit_ex
#define EVP_EncryptUpdate
#define EVP_EncryptFinal_ex
#define EVP_CIPHER_CTX_free
#define EVP_DecryptUpdate
mbedTLS TLS backend: OPENSSL_cleanse (BoringSSL puts it here).
mbedTLS TLS backend: RAND_bytes over mbedTLS CTR-DRBG.
unsigned char kek[CWIST_DB_CRYPT_KEY_LEN]