Notable changes to this project are documented in this file.
4.14.0 - (? 2026 - 4.14.0 changes)
- Updates baseline to SQLite 3.51.3
- Restores and improves upon LibTomCrypto provder
- Minor test improvements
4.13.0 - (January 2026 - 4.13.0 changes)
- Updates baseline to SQLite 3.51.2
- Corrects encoding for
sqlcipher_export()function registration
4.12.0 - (December 2025 - 4.12.0 changes)
- Updates baseline to SQLite 3.51.1
- Adds
PRAGMA cipher_statusso applications can verify a database handle is using encryption - Improves guards against key/rekey/attach misuse
- Adds criteria for
PRAGMA cipher_migratetests - Fixes check for
__has_featuremacro to separate it from use - Fixes CHANGELOG.md markdown formatting, typos, and inline code snippets
- Fixes conditional in SQLCipher pragma handling
- Removes deprecated providers for LibTomCrypt and NSS
- Removes unnecessary shutdown and URI config changes in core tests
- Ensures all test suite database handles are closed before delete
4.11.0 - (October 2025 - 4.11.0 changes)
- Converts log output to UTF-16 when writing to stdout or stderr on Windows
- Fixes scope issues to allow
--disable-amalgamationto work properly - Replaces fortuna seeding mechanism for libtomcrypt with
rng_get_bytes() - Removes CocoaPods support (
SQLCipher.podspec.json) - Fixes includes and macros to support non-amalgamated builds
- Fixes check for
__has_featureto resolve issue with compilers that don't support it - Corrects return value from
sqlcipher_fprintf - Fixes use of provider
free_ctx - Fixes some compiler warnings
4.10.0 - (August 2025 - 4.10.0 changes)
- Updates baseline to SQLite 3.50.4
- Allows compile time override of default log level via
SQLCIPHER_LOG_LEVEL_DEFAULTmacro - Fixes issue building with
-fsanitize=addresson macOS - Fixes detection of CommonCrypto version on macOS
- Improves CommonCrypto version detection on iOS
4.9.0 - (May 2025 - 4.9.0 changes)
- Updates baseline to upstream SQLite 3.49.2
- Removes use of static mutex in
sqlcipher_extra_shutdown()
4.8.0 - (April 2025 - 4.8.0 changes)
- Fixes regression in
PRAGMA cipher_migratewhere an error would be thrown when migrating a current-version database - Adds selective locking in critical sections of the library for shared cache connections (Note: use of shared cache is still strongly discouraged)
- Standardizes initial private heap size to 48KB to ensure
mlockunder constrained limits - Removes changes to windows working set sizes
- Improvements to logging of memory stats and other cleanup
4.7.0 - (March 2025 - 4.7.0 changes)
- Updates baseline to upstream SQLite 3.49.1, including complete upstream SQLite refactoring of build system to use autosetup
- Significantly refactors and optimizes library initialization and cleanup
- Allocates majority of requisite memory at startup to improve memory locking on constrained platforms (i.e. Android and Windows) and reduce fragmentation
- Expands
sqlcipher_providerinterface to includeinitandshutdownfunctions - Adds support for
.recovershell command on corrupt databases with a full plaintext first page - Performs fast random overwrite of freed memory segments for improved security
- Adds basic obfuscation of context key material for improved security
- Generates keyspecs dynamically on demand instead of storing them
- Expands keyspec/raw key format to accept key, HMAC key, and salt
- Improves error handling in
sqlcipher_export()andPRAGMA cipher_migrate - Allows setting custom compile-time default cryptographic provider via the
SQLCIPHER_CRYPTO_CUSTOMmacro - Removes support for end-of-life OpenSSL versions older than 3.0
- BREAKING CHANGE:
SELECTstatements (now also including schema independent queries likeSELECT 1) cannot be executed on encrypted databases prior to setting the database key (behavior inherited from upstream SQLite) - BREAKING CHANGE: Renames
configureflag--enable-tempstore=yesto--with-tempstore=yesfor alignment with SQLite (change required for upstream SQLite autosetup) - BREAKING CHANGE: Renames default executable and library build outputs from
sqlcipherandlibsqlciphertosqlite3andlibsqlite3(for alignment with SQLite) - BREAKING CHANGE: Removes
configureflag--with-crypto-lib(replace with appropriate-DSQLCIPHER_CRYPTO_*CFLAG) - BREAKING CHANGE: Requires defining
SQLITE_EXTRA_INIT=sqlcipher_extra_initandSQLITE_EXTRA_SHUTDOWN=sqlcipher_extra_shutdownat compile time for optimized library initialization and cleanup - BREAKING CHANGE: Enforces thread safe mode (i.e.
SQLITE_THREADSAFEof 1 or 2) and temporary storage (i.e.SQLITE_TEMP_STOREof 2 or 3) settings at compile time
4.6.1 - (August 2024 - 4.6.1 changes)
- Updates baseline to upstream SQLite 3.46.1
- Significant refactor to merge
crypto.h,crypto.c, andcrypto_impl.cinto a singlesqlcipher.csource file for simplicity. - Updates minimum working set size on windows to increase lockable pages
- Adds new
PRAGMA cipher_log_sourcefor filtering log output on higher verbosity levels - Improves log output by including the log level and source prior to message
- Improves error logging in
PRAGMA cipher_migrate - Fixes issue where log level and target would be overwritten if set prior to initialization
- Corrects Podspec license element to use specific BSD 3 Clause
- Fixes default log output to console for macOS
4.6.0 - (May 2024 - 4.6.0 changes)
- Sets default log level to WARN
- Sends default log output to: logcat for Android; Console for iOS and macOS; and stderr for all other platforms
- General improvements to log level assignments, output, and sanitization
- Fixes Apple Privacy Manifest by removing empty NSPrivacyCollectedDataType from PrivacyInfo.xcprivacy
- Moves Swift support defines for podspec user_target_xcconfig so they only apply to the consuming project
4.5.7 - (April 2024 - 4.5.7 changes)
- Updates baseline to upstream SQLite 3.45.3
- Adds "device" logging and profile target using
os_logfor Apple (and logcat on Android) - Fixes issues compiling with
SQLITE_OMIT_LOG - Fixes malformed man page caused by old merge conflict
- Updates podspec for current Xcode versions, improved Swift support, and Privacy Manifest
4.5.6 - (January 2024 - 4.5.6 changes)
- Updates baseline to upstream SQLite 3.44.2
- Improves
PRAGMA cipher_integrity_checkto report expected page size if invalid - Implements
PRAGMA page_sizecompatibility withPRAGMA cipher_page_sizeso both will operate properly on encrypted databases - Updates
LICENSE.mdwith SQLCipher license to avoid ambiguity and remove redundancy
4.5.5 - (August 2023 - 4.5.5 changes)
- Updates baseline to upstream SQLite 3.42.0
- Do not allow key to be changed on a connection after it has been successfully used for an encryption or decryption operation to prevent accidental database corruption
- Raise an error if a rekey operation is attempted on an unencrypted database
- Raise an error when a key or rekey operation is passed an empty key
- Minor improvements to constant time functions
- Miscellaneous code and comment cleanup
4.5.4 - (April 2023 - 4.5.4 changes)
- Updates baseline to upstream SQLite 3.41.2
- Updates minimum Apple SDK versions in podspec for new Xcode compatibility
- Return runtime OpenSSL version from
PRAGMA cipher_provider_version(instead of hardcoded value) - Adds guard against zero block size and crash if cryptographic provider initialization fails
- When an ATTACH occurs creating a new encrypted database as the first operation after keying the main database, the new database will have the same salt value.
4.5.3 - (December 2022 - 4.5.3 changes)
- Updates baseline to upstream SQLite 3.39.4
4.5.2 - (August 2022 - 4.5.2 changes)
- Updates source code baseline to upstream SQLite 3.39.2
- Simplifies OpenSSL version conditional code
- Fixes issue where
PRAGMA cipher_memory_securitycould report OFF when it was actually ON - Fixes unfreed OpenSSL allocation when compiled against version 3
- Fixes support for building against recent versions of BoringSSL
4.5.1 - (March 2022 - 4.5.1 changes)
- Updates source code baseline to upstream SQLite 3.37.2
- Adds
PRAGMA cipher_logandPRAGMA cipher_log_levelfeatures to allow logging of TRACE, DEBUG, INFO, WARN, and ERROR messages to stdout, stderr, file, or logcat - Modifies
PRAGMA cipher_profileto usesqlite3_trace_v2and adds logcat target for Android - Updates OpenSSL provider to use
EVP_MACAPI with version 3+ - Adds new
PRAGMA cipher_test_on,PRAGMA cipher_test_off, andPRAGMA cipher_test_rand(available when compiled with-DSQLCIPHER_TEST) to facilitate simulation of error conditions - Fixes
PRAGMA cipher_integrity_checkto work properly with databases larger that 2GB - Fixes missing
munlockbefore free for context internal buffer (thanks to Fedor Indutny)
4.5.0 - (October 2021 - 4.5.0 changes)
- Updates baseline to upstream SQLite 3.36.0
- Changes the enhanced memory security feature to be DISABLED by default; once enabled by
PRAGMA cipher_memory_security = ON, it can't be turned off for the lifetime of the process - Changes
PRAGMA cipher_migrateto permanently enter an error state if a migration fails - Fixes memory locking/unlocking issue with realloc implementation on hardened runtimes when memory security is enabled
- Fixes
PRAGMA cipher_migrateto clean up the temporary database if a migration fails - Removes logging of non-string pointers when compiling with trace level logging
4.4.3 - (February 2021 - 4.4.3 changes)
- Updates baseline to upstream SQLite 3.34.1
- Fixes
sqlcipher_exporthandling of NULL parameters - Removes randomization of rekey-delete tests to avoid false test failures
- Changes internal usage of
sqlite_mastertosqlite_schema - Omits unused profiling function under certain defines to avoid compiler warnings
4.4.2 - (November 2020 - 4.4.2 changes)
- Improves error handling to resolve potential corruption if an encryption operation failed while operating in WAL mode
- Changes to OpenSSL library cryptographic provider to reduce initialization complexity
- Adjust
cipher_integrity_checkto skip locking page to avoid a spurious error report for very large databases - Miscellaneous code and comment cleanup
4.4.1 - (October 2020 - 4.4.1 changes)
- Updates baseline to upstream SQLite 3.33.0
- Fixes double-free bug in
cipher_default_plaintext_header_size - Changes SQLCipher tests to use suite runner
- Improvement to
cipher_integrity_checktests to minimize false negatives - Deprecates
PRAGMA cipher_store_pass
4.4.0 - (May 2020 - 4.4.0 changes)
- Updates baseline to upstream SQLite 3.31.0
- Adjusts shell to report SQLCipher version alongside SQLite version
- Fixes various build warnings under several compilers
- Removes unused id and status functions from provider interface
4.3.0 - (November 2019 - 4.3.0 changes)
- Updates baseline to upstream SQLite 3.30.1
PRAGMA keynow returns text result value "ok" after execution- Adjusts backup API so that encrypted to encrypted backups are permitted
- Adds NSS crypto provider implementation
- Fixes OpenSSL provider compatibility with BoringSSL
- Separates memory related traces to reduce verbosity of logging
- Fixes output of
PRAGMA cipher_integrity_checkon big endian platforms - Cryptographic provider interface cleanup
- Rework of mutex allocation and management
- Resolves miscellaneous build warnings
- Force error state at database pager level if SQLCipher initialization fails
4.2.0 - (May 2019 - 4.2.0 changes)
- Adds
PRAGMA cipher_integrity_checkto perform independent verification of page HMACs - Updates baseline to upstream SQLite 3.28.0
- Improves
PRAGMA cipher_migrateto handle keys containing non-terminating zero bytes
4.1.0 - (March 2019 - 4.1.0 changes)
- Defer reading salt from header until key derivation is triggered
- Clarify usage of
sqlite3_rekeyfor plaintext databases in header - Normalize attach behavior when key is not yet derived
- Adds
PRAGMA cipher_settingsto query current database codec settings - Adds
PRAGMA cipher_default_settingsto query current default SQLCipher options PRAGMA cipher_hmac_pgnois now deprecatedPRAGMA cipher_hmac_salt_maskis now deprecatedPRAGMA fast_kdf_iteris now deprecated- Improve
sqlcipher_exportroutine and restore all database flags - Clear codec data buffers if a cryptographic provider operation fails
- Disable backup API for encrypted databases (this was previously documented as not-working and non-supported, but will now explicitly error out on initialization)
- Updates baseline to upstream SQLite 3.27.2
4.0.1 - (December 2018 - 4.0.1 changes)
- Based on upstream SQLite 3.26.0 (addresses SQLite “Magellan” issue)
- Adds
PRAGMA cipher_compatibilityandPRAGMA cipher_default_compatibilitywhich automatically configure appropriate compatibility settings for the specified SQLCipher major version number - Filters attach statements with
KEYparameters from readline history - Fixes crash in command line shell with empty input (i.e. ^D)
- Fixes warnings when compiled with strict-prototypes
4.0.0 - (November 2018 - 4.0.0 changes)
- Default page size for databases increased to 4096 bytes (up from 1024) *
- Default PBKDF2 iterations increased to 256,000 (up from 64,000) *
- Default KDF algorithm is now PBKDF2-HMAC-SHA512 (from PBKDF2-HMAC-SHA1) *
- Default HMAC algorithm is now HMAC-SHA512 (from HMAC-SHA1) *
PRAGMA cipheris now disabled and no longer supported (after multi-year deprecation) *PRAGMA rekey_cipheris now disabled and no longer supported *PRAGMA rekey_kdf_iteris now disabled and no longer supported *- By default all memory allocated internally by SQLite is wiped before it is freed
PRAGMA cipher_memory_security: allows full memory wiping to be disabled for performance when the feature is not requiredPRAGMA cipher_kdf_algorithm,PRAGMA cipher_default_kdf_algorithmto control KDF algorithm selection between PBKDF2-HMAC-SHA1, PBKDF2-HMAC-SHA256 and PBKDF2-HMAC-SHA512PRAGMA cipher_hmac_algorithm,PRAGMA cipher_default_hmac_algorithmto control HMAC algorithm selection between HMAC-SHA1, HMAC-SHA256 and PBKDF2-HMAC-SHA512- Based on upstream SQLite 3.25.2
- When compiled with readline support,
PRAGMA keyandPRAGMA rekeylines will no longer be saved to history - Adds second optional parameter to
sqlcipher_exportto specify source database to support bidirectional exports - Fixes compatibility with LibreSSL 2.7.0+
- Fixes compatibility with OpenSSL 1.1.x
- Simplified and improved performance for
PRAGMA cipher_migratewhen migrating older database versions - Refactoring of SQLCipher tests into separate files by test type
PRAGMA cipher_plaintext_header_sizeandPRAGMA cipher_default_plaintext_header_size: allocates a portion of the database header which will not be encrypted to allow identification as a SQLite databasePRAGMA cipher_salt: retrieve or set the salt value for the database- Adds Podspec for using tagged versions of SQLCipher
- Define
SQLCIPHER_PROFILE_USE_FOPENfor WinXP support - Improved error handling for cryptographic providers
- Improved memory handling for
PRAGMAcommands that return values - Improved version reporting to assist with identification of distribution
- Major rewrite and simplification of internal codec and pager extension
- Fixes compilation with
--disable-amalgamation - Removes
sqlcipher.xcodeprojbuild support
3.4.2 - (December 2017 - 3.4.2 changes)
- Added support for building with LibreSSL
- Merge upstream SQLite 3.20.1
- Text strings for
SQLITE_ERRORandSQLITE_NOTADBchanged to match upstream SQLite - Remove static modifier for codec password functions
- Page alignment for
mlock - Fix segfault in
sqlcipher_cipher_ctx_cmpduring rekey operation - Fix
sqlcipher_exportandPRAGMA cipher_migratewhen tracing API in use - Validate codec page size when setting
- Guard OpenSSL initialization and cleanup routines
- Allow additional linker options to be passed via command line for Windows platforms
3.4.1 - (December 2016 - 3.4.1 changes)
- Added support for OpenSSL 1.1.0
- Merged upstream SQLite 3.15.2
3.4.0 - (April 2016 - 3.4.0 changes)
- Added
PRAGMA cipher_provider_version
- Merged upstream SQLite 3.11.0
- Deprecated
PRAGMA ciphercommand
3.3.1 - (July 2015 - 3.3.1 changes)
- Merge upstream SQLite 3.8.10.2
- Fixed segfault when provided an invalid cipher name
- Check for codec context when performing
PRAGMA cipher_store_pass - Remove extraneous null check in
PRAGMA cipher_migrate
3.3.0 - (March 2015 - 3.3.0 changes)
- Added FIPS API calls within the OpenSSL crypto provider
PRAGMA cipher_default_page_size- support for attaching non-default page sizes
- Merged upstream SQLite 3.8.8.3
3.2.0 - (September 2014 - 3.2.0 changes)
- Added
PRAGMA cipher_store_pass
- Merged upstream SQLite 3.8.6
- Renamed
READMEtoREADME.md
3.1.0 - (April 2014 - 3.1.0 changes)
- Added
PRAGMA cipher_profile
- Merged upstream SQLite 3.8.4.3
3.0.1 - (December 2013 - 3.0.1 changes)
- Added
PRAGMA cipher_add_randomto source external entropy
- Fix
PRAGMA cipher_migrateto handle passphrases longer than 64 characters & raw keys - Improvements to the libtomcrypt provider
3.0.0 - (November 2013 - 3.0.0 changes)
- Added
PRAGMA cipher_migrateto migrate older database file formats
- Merged upstream SQLite 3.8.0.2
- Remove usage of
VirtualLock/Unlockon WinRT and Windows Phone - Ignore HMAC read during Btree file copy
- Fix lib naming for pkg-config
- Use _v2 version of
sqlite3_keyandsqlite3_rekey - Update xcodeproj file
- Change KDF iteration length from 4,000 to 64,000