clarifying comments about codec error handling
[sqlcipher.git] / CHANGELOG.md
blob37db27bb933bcebd1116c86938a35c19b043af86
1 # SQLCipher Change Log
2 All notable changes to this project will be documented in this file.
4 ## [4.5.0] - (October 2021 - [4.5.0 changes])
5 - Updates baseline to upstream SQLite 3.36.0
6 - 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
7 - Changes PRAGMA cipher_migrate to permanently enter an error state if a migration fails
8 - Fixes memory locking/unlocking issue with realloc implementation on hardened runtimes when memory security is enabled
9 - Fixes cipher_migrate to cleanup the temporary database if a migration fails
10 - Removes logging of non-string pointers when compiling with trace level logging
12 ## [4.4.3] - (February 2021 - [4.4.3 changes])
13 - Updates baseline to ustream SQLite 3.34.1
14 - Fixes sqlcipher_export handling of NULL parameters
15 - Removes randomization of rekey-delete tests to avoid false test failures
16 - Changes internal usage of sqlite_master to sqlite_schema
17 - Omits unusued profiling function under certain defines to avoid compiler warnings
19 ## [4.4.2] - (November 2020 - [4.4.2 changes])
20 - Improve error handling to resolve potential corruption if an encryption operation failed while operating in WAL mode
21 - Changes to OpenSSL library cryptographic provider to reduce initialization complexity
22 - Adjust cipher_integrity_check to skip locking page to avoid a spurious error report for very large databases
23 - Miscellaneous code and comment cleanup
25 ## [4.4.1] - (October 2020 - [4.4.1 changes])
26 - Updates baseline to upstream SQLite 3.33.0
27 - Fixes double-free bug in cipher_default_plaintext_header_size
28 - Changes SQLCipher tests to use suite runner
29 - Improvement to cipher_integrity_check tests to minimize false negatives
30 - Deprecates PRAGMA cipher_store_pass
32 ## [4.4.0] - (May 2020 - [4.4.0 changes])
33 - Updates baseline to upstream SQLite 3.31.0
34 - Adjusts shell to report SQLCipher version alongside SQLite version
35 - Fixes various build warnings under several compilers
36 - Removes unused id and status functions from provider interface
38 ## [4.3.0] - (November 2019 - [4.3.0 changes])
39 - Updates baseline to upstream SQLite 3.30.1
40 - PRAGMA key now returns text result value "ok" after execution
41 - Adjusts backup API so that encrypted to encrypted backups are permitted
42 - Adds NSS crypto provider implementation
43 - Fixes OpenSSL provider compatibility with BoringSSL
44 - Separates memory related traces to reduce verbosity of logging
45 - Fixes output of PRAGMA cipher_integrity_check on big endian platforms
46 - Cryptograpic provider interface cleanup
47 - Rework of mutex allocation and management
48 - Resolves miscellaneous build warnings
49 - Force error state at database pager level if SQLCipher initialization fails
51 ## [4.2.0] - (May 2019 - [4.2.0 changes])
52 - Adds PRAGMA cipher_integrity_check to perform independent verification of page HMACs
53 - Updates baseline to upstream SQLite 3.28.0
54 - Improves PRAGMA cipher_migrate to handle keys containing non-terminating zero bytes
56 ## [4.1.0] - (March 2019 - [4.1.0 changes])
57 - Defer reading salt from header until key derivation is triggered
58 - Clarify usage of sqlite3_rekey for plaintext databases in header
59 - Normalize attach behavior when key is not yet derived
60 - Adds PRAGMA cipher_settings to query current database codec settings
61 - Adds PRAGMA cipher_default_settings to query current default SQLCipher options
62 - PRAGMA cipher_hmac_pgno is now deprecated
63 - PRAGMA cipher_hmac_salt_mask is now deprecated
64 - PRAGMA fast_kdf_iter is now deprecated
65 - Improve sqlcipher_export routine and restore all database flags
66 - Clear codec data buffers if a crypographic provider operation fails
67 - Disable backup API for encrypted databases (this was previously documented as not-working and non-supported, but will now explicitly error out on initialization)
68 - Updates baseline to upstream SQLite 3.27.2
70 ## [4.0.1] - (December 2018 - [4.0.1 changes])
71 - Based on upstream SQLite 3.26.0 (addresses SQLite “Magellan” issue)
72 - Adds PRAGMA cipher_compatibility and cipher_default_compatibility which take automatcially configure appropriate compatibility settings for the specified SQLCipher major version number
73 - Filters attach statements with KEY parameters from readline history
74 - Fixes crash in command line shell with empty input (i.e. ^D)
75 - Fixes warnings when compiled with strict-prototypes
77 ## [4.0.0] - (November 2018 - [4.0.0 changes])
78 ### Changed
79 - Default page size for databases increased to 4096 bytes (up from 1024) *
80 - Default PBKDF2 iterations increased to 256,000 (up from 64,000) *
81 - Default KDF algorithm is now PBKDF2-HMAC-SHA512 (from PBKDF2-HMAC-SHA1) *
82 - Default HMAC algorithm is now HMAC-SHA512 (from HMAC-SHA1) *
83 - PRAGMA cipher is now disabled and no longer supported (after multi-year deprecation) *
84 - PRAGMA rekey_cipher is now disabled and no longer supported *
85 - PRAGMA rekey_kdf_iter is now disabled and no longer supported *
86 - By default all memory allocated internally by SQLite before the memory is wiped before it is freed 
87 - PRAGMA cipher_memory_security: allows full memory wiping to be disabled for performance when the feature is not required
88 - PRAGMA cipher_kdf_algorithm, cipher_default_kdf_algorithm to control KDF algorithm selection between PBKDF2-HMAC-SHA1, PBKDF2-HMAC-SHA256 and PBKDF2-HMAC-SHA512
89 - PRAGMA cipher_hmac_algorithm, cipher_default_hmac_algorithm to control HMAC algorithm selection between HMAC-SHA1, HMAC-SHA256 and PBKDF2-HMAC-SHA512
90 - Based on upstream SQLite 3.25.2
91 - When compiled with readline support, PRAGMA key and rekey lines will no longer be
92   saved to history
93 - Adds second optional parameter to sqlcipher_export to specify source database to
94   support bidirectional exports
95 - Fixes compatibility with LibreSSL 2.7.0+
96 - Fixes compatibility with OpenSSL 1.1.x
97 - Simplified and improved performance for PRAGMA cipher_migrate when migrating older database versions
98 - Refactoring of SQLCipher tests into separate files by test type
99 - PRAGMA cipher_plaintext_header_size and cipher_default_plaintext_header_size: allocates a portion of the database header which will not be encrypted to allow identification as a SQLite database
100 - PRAGMA cipher_salt: retrieve or set the salt value for the database
101 - Adds Podspec for using tagged versions of SQLCipher
102 - Define SQLCIPHER_PROFILE_USE_FOPEN for WinXP support
103 - Improved error handling for cryptographic providers
104 - Improved memory handling for PRAGMA commands that return values
105 - Improved version reporting to assist with identification of distribution
106 - Major rewrite and simplification of internal codec and pager extension
107 - Fixes compilation with --disable-amalgamation
108 - Removes sqlcipher.xcodeproj build support
110 ## [3.4.2] - (December 2017 - [3.4.2 changes])
111 ### Added
112 - Added support for building with LibreSSL
114 ### Changed
115 - Merge upstream SQLite 3.20.1
116 - Text strings for `SQLITE_ERROR` and `SQLITE_NOTADB` changed to match upstream SQLite
117 - Remove static modifier for codec password functions
118 - Page alignment for `mlock`
119 - Fix segfault in `sqlcipher_cipher_ctx_cmp` during rekey operation
120 - Fix `sqlcipher_export` and `cipher_migrate` when tracing API in use
121 - Validate codec page size when setting
122 - Guard OpenSSL initialization and cleanup routines
123 - Allow additional linker options to be passed via command line for Windows platforms
125 ## [3.4.1] - (December 2016 - [3.4.1 changes])
126 ### Added
127 - Added support for OpenSSL 1.1.0
129 ### Changed
130 - Merged upstream SQLite 3.15.2
132 ## [3.4.0] - (April 2016 - [3.4.0 changes])
133 ### Added
134 - Added `PRAGMA cipher_provider_version`
136 ### Changed
137 - Merged upstream SQLite 3.11.0
139 ### Deprecated
140 - Deprecated `PRAGMA cipher` command
142 ## [3.3.1] - (July 2015 - [3.3.1 changes])
143 ### Changed
144 - Merge upstream SQLite 3.8.10.2
145 - Fixed segfault when provided an invalid cipher name
146 - Check for codec context when performing `PRAGMA cipher_store_pass`
147 - Remove extraneous null check in `PRAGMA cipher_migrate`
149 ## [3.3.0] - (March 2015 - [3.3.0 changes])
150 ### Added
151 - Added FIPS API calls within the OpenSSL crypto provider
152 - `PRAGMA cipher_default_page_size` - support for attaching non-default page sizes
154 ### Changed
155 - Merged upstream SQLite 3.8.8.3
157 ## [3.2.0] - (September 2014 - [3.2.0 changes])
158 ### Added
159 - Added `PRAGMA cipher_store_pass`
161 ### Changed
162 - Merged upstream SQLite 3.8.6
163 - Renmed README to README.md
165 ## [3.1.0] - (April 2014 - [3.1.0 changes])
166 ### Added
167 - Added `PRAGMA cipher_profile`
169 ### Changed
170 - Merged upstream SQLite 3.8.4.3
172 ## [3.0.1] - (December 2013 - [3.0.1 changes])
173 ### Added
174 - Added `PRAGMA cipher_add_random` to source external entropy
176 ### Changed
177 - Fix `PRAGMA cipher_migrate` to handle passphrases longer than 64 characters & raw keys
178 - Improvements to the libtomcrypt provider
180 ## [3.0.0] - (November 2013 - [3.0.0 changes])
181 ### Added
182 - Added `PRAGMA cipher_migrate` to migrate older database file formats
184 ### Changed
185 - Merged upstream SQLite 3.8.0.2
186 - Remove usage of VirtualLock/Unlock on WinRT and Windows Phone
187 - Ignore HMAC read during Btree file copy
188 - Fix lib naming for pkg-config
189 - Use _v2 version of `sqlite3_key` and `sqlite3_rekey`
190 - Update xcodeproj file
192 ### Security
193 - Change KDF iteration length from 4,000 to 64,000
195 [unreleased]: https://github.com/sqlcipher/sqlcipher/compare/v4.5.0...prerelease
196 [4.5.0]: https://github.com/sqlcipher/sqlcipher/tree/v4.5.0
197 [4.5.0 changes]: https://github.com/sqlcipher/sqlcipher/compare/v4.4.3...v4.5.0
198 [4.4.3]: https://github.com/sqlcipher/sqlcipher/tree/v4.4.3
199 [4.4.3 changes]: https://github.com/sqlcipher/sqlcipher/compare/v4.4.2...v4.4.3
200 [4.4.2]: https://github.com/sqlcipher/sqlcipher/tree/v4.4.2
201 [4.4.2 changes]: https://github.com/sqlcipher/sqlcipher/compare/v4.4.1...v4.4.2
202 [4.4.1]: https://github.com/sqlcipher/sqlcipher/tree/v4.4.1
203 [4.4.1 changes]: https://github.com/sqlcipher/sqlcipher/compare/v4.4.0...v4.4.1
204 [4.4.0]: https://github.com/sqlcipher/sqlcipher/tree/v4.4.0
205 [4.4.0 changes]: https://github.com/sqlcipher/sqlcipher/compare/v4.3.0...v4.4.0
206 [4.3.0]: https://github.com/sqlcipher/sqlcipher/tree/v4.3.0
207 [4.3.0 changes]: https://github.com/sqlcipher/sqlcipher/compare/v4.2.0...v4.3.0
208 [4.2.0]: https://github.com/sqlcipher/sqlcipher/tree/v4.2.0
209 [4.2.0 changes]: https://github.com/sqlcipher/sqlcipher/compare/v4.1.0...v4.2.0
210 [4.1.0]: https://github.com/sqlcipher/sqlcipher/tree/v4.1.0
211 [4.1.0 changes]: https://github.com/sqlcipher/sqlcipher/compare/v4.0.1...v4.1.0
212 [4.0.1]: https://github.com/sqlcipher/sqlcipher/tree/v4.0.1
213 [4.0.1 changes]: https://github.com/sqlcipher/sqlcipher/compare/v4.0.0...v4.0.1
214 [4.0.0]: https://github.com/sqlcipher/sqlcipher/tree/v4.0.0
215 [4.0.0 changes]: https://github.com/sqlcipher/sqlcipher/compare/v3.4.2...v4.0.0
216 [3.4.2]: https://github.com/sqlcipher/sqlcipher/tree/v3.4.2
217 [3.4.2 changes]: https://github.com/sqlcipher/sqlcipher/compare/v3.4.1...v3.4.2
218 [3.4.1]: https://github.com/sqlcipher/sqlcipher/tree/v3.4.1
219 [3.4.1 changes]: https://github.com/sqlcipher/sqlcipher/compare/v3.4.0...v3.4.1
220 [3.4.0]: https://github.com/sqlcipher/sqlcipher/tree/v3.4.0
221 [3.4.0 changes]: https://github.com/sqlcipher/sqlcipher/compare/v3.3.1...v3.4.0
222 [3.3.1]: https://github.com/sqlcipher/sqlcipher/tree/v3.3.1
223 [3.3.1 changes]: https://github.com/sqlcipher/sqlcipher/compare/v3.3.0...v3.3.1
224 [3.3.0]: https://github.com/sqlcipher/sqlcipher/tree/v3.3.0
225 [3.3.0 changes]: https://github.com/sqlcipher/sqlcipher/compare/v3.2.0...v3.3.0
226 [3.2.0]: https://github.com/sqlcipher/sqlcipher/tree/v3.2.0
227 [3.2.0 changes]: https://github.com/sqlcipher/sqlcipher/compare/v3.1.0...v3.2.0
228 [3.1.0]: https://github.com/sqlcipher/sqlcipher/tree/v3.1.0
229 [3.1.0 changes]: https://github.com/sqlcipher/sqlcipher/compare/v3.0.1...v3.1.0
230 [3.0.1]: https://github.com/sqlcipher/sqlcipher/tree/v3.0.1
231 [3.0.1 changes]: https://github.com/sqlcipher/sqlcipher/compare/v3.0.0...v3.0.1
232 [3.0.0]: https://github.com/sqlcipher/sqlcipher/tree/v3.0.0
233 [3.0.0 changes]: https://github.com/sqlcipher/sqlcipher/compare/v2.2.0...v3.0.0
234 [2.2.0]: https://github.com/sqlcipher/sqlcipher/tree/v2.2.0
235 [2.2.0 changes]: https://github.com/sqlcipher/sqlcipher/compare/v2.1.1...v2.2.0
236 [2.1.1]: https://github.com/sqlcipher/sqlcipher/tree/v2.1.1
237 [2.1.1 changes]: https://github.com/sqlcipher/sqlcipher/compare/v2.1.0...v2.1.1
238 [2.1.0]: https://github.com/sqlcipher/sqlcipher/tree/v2.1.0
239 [2.1.0 changes]: https://github.com/sqlcipher/sqlcipher/compare/v2.0.6...v2.1.0
240 [2.0.6]: https://github.com/sqlcipher/sqlcipher/tree/v2.0.6
241 [2.0.6 changes]: https://github.com/sqlcipher/sqlcipher/compare/v2.0.5...v2.0.6
242 [2.0.5]: https://github.com/sqlcipher/sqlcipher/tree/v2.0.5
243 [2.0.5 changes]: https://github.com/sqlcipher/sqlcipher/compare/v2.0.3...v2.0.5
244 [2.0.3]: https://github.com/sqlcipher/sqlcipher/tree/v2.0.3
245 [2.0.3 changes]: https://github.com/sqlcipher/sqlcipher/compare/v2.0.0...v2.0.3
246 [2.0.0]: https://github.com/sqlcipher/sqlcipher/tree/v2.0.0
247 [2.0.0 changes]: https://github.com/sqlcipher/sqlcipher/compare/v1.1.10...v2.0.0
248 [1.1.10]: https://github.com/sqlcipher/sqlcipher/tree/v1.1.10
249 [1.1.10 changes]: https://github.com/sqlcipher/sqlcipher/compare/v1.1.9...v1.1.10
250 [1.1.9]: https://github.com/sqlcipher/sqlcipher/tree/v1.1.9
251 [1.1.9 changes]: https://github.com/sqlcipher/sqlcipher/compare/v1.1.8...v1.1.9
252 [1.1.8]: https://github.com/sqlcipher/sqlcipher/tree/v1.1.8
253 [1.1.8 changes]: https://github.com/sqlcipher/sqlcipher/compare/v1.1.7...v1.1.8
254 [1.1.7]: https://github.com/sqlcipher/sqlcipher/tree/v1.1.7
255 [1.1.7 changes]: https://github.com/sqlcipher/sqlcipher/compare/v1.1.6...v1.1.7
256 [1.1.6]: https://github.com/sqlcipher/sqlcipher/tree/v1.1.6
257 [1.1.6 changes]: https://github.com/sqlcipher/sqlcipher/compare/v1.1.5...v1.1.6
258 [1.1.5]: https://github.com/sqlcipher/sqlcipher/tree/v1.1.5
259 [1.1.5 changes]: https://github.com/sqlcipher/sqlcipher/compare/v1.1.4...v1.1.5
260 [1.1.4]: https://github.com/sqlcipher/sqlcipher/tree/v1.1.4
261 [1.1.4 changes]: https://github.com/sqlcipher/sqlcipher/compare/v1.1.3...v1.1.4
262 [1.1.3]: https://github.com/sqlcipher/sqlcipher/tree/v1.1.3
263 [1.1.3 changes]: https://github.com/sqlcipher/sqlcipher/compare/v1.1.2...v1.1.3
264 [1.1.2]: https://github.com/sqlcipher/sqlcipher/tree/v1.1.2
265 [1.1.2 changes]: https://github.com/sqlcipher/sqlcipher/compare/v1.1.1...v1.1.1
266 [1.1.1]: https://github.com/sqlcipher/sqlcipher/tree/v1.1.1
267 [1.1.1 changes]: https://github.com/sqlcipher/sqlcipher/compare/v1.1.0...v1.1.1
268 [1.1.0]: https://github.com/sqlcipher/sqlcipher/tree/v1.1.0
269 [1.1.0 changes]: https://github.com/sqlcipher/sqlcipher/compare/617ed01...v1.1.0