sqlcipher-src
The SQLCipher amalgamation and the libtomcrypt crypto provider as C source for -sys crates.
Native builds compile SOURCE_FILE with their own crypto provider and flags:
let dir = source_dir;
assert!;
assert!;
Builds without a system crypto library compile SOURCE_FILE with -DSQLITE_HAS_CODEC -DSQLCIPHER_CRYPTO_LIBTOMCRYPT and each file in LIBTOMCRYPT_SOURCES as its own translation unit with -DLTC_SOURCE, all with LIBTOMCRYPT_INCLUDE_DIR on the include path and one shared set of LTC_* switches:
let dir = source_dir;
assert!;
for source in LIBTOMCRYPT_SOURCES
The sqlcipher feature of sqlite-wasm-rs builds this way for wasm32-unknown-unknown.
The sources are generated from signed SQLCipher and libtomcrypt releases by upgrade.sh and ship as released. CI runs SQLCipher's and rusqlite's SQLCipher tests on them natively, and checks through sqlite-wasm-rs that files written natively and in Node, Chrome and Firefox open on both sides.
The same checks run on SQLCipher's newest signed pre-release, and daily on the heads of its prerelease and beta branches. Nothing from those lines ships, so they report under the SQLCipher previews badge and never hold back the CI badge or a release.
ClusterFuzzLite fuzzes SQLCipher as sqlite-wasm-rs compiles it, under AddressSanitizer, UndefinedBehaviorSanitizer and MemorySanitizer, on the shipped release, SQLCipher's newest signed pre-release and its prerelease branch. A script target drives keys, rekeys, codec settings, attach, backup, export, page damage and injected I/O and allocation faults. It checks that a tampered page never reads back as valid, that no plaintext reaches a keyed file, that IVs and salts never repeat, that operations meant to keep content keep it, and that the rows match what plain SQLite and the OpenSSL provider produce. Two file-image targets hand SQLCipher hostile database files, one without the key and one with it.
The crate is MIT, SQLCipher is BSD-3-Clause, SQLite is public domain, and libtomcrypt is public domain or WTFPL.