sqlcipher compatibility changes for upstream 3.6.17

This commit is contained in:
Stephen Lombardo 2009-08-11 16:49:37 -04:00
parent 1a81194b38
commit 84e17044df
4 changed files with 30 additions and 16 deletions

View File

@ -47,6 +47,8 @@
#define CODEC_TRACE(X) #define CODEC_TRACE(X)
#endif #endif
void sqlite3FreeCodecArg(void *pCodecArg);
typedef struct { typedef struct {
int derive_key; int derive_key;
EVP_CIPHER *evp_cipher; EVP_CIPHER *evp_cipher;
@ -441,7 +443,7 @@ int sqlite3CodecAttach(sqlite3* db, int nDb, const void *zKey, int nKey) {
RAND_pseudo_bytes(ctx->kdf_salt, FILE_HEADER_SZ); RAND_pseudo_bytes(ctx->kdf_salt, FILE_HEADER_SZ);
} }
sqlite3PagerSetCodec(sqlite3BtreePager(pDb->pBt), sqlite3Codec, (void *) ctx); sqlite3pager_sqlite3PagerSetCodec(sqlite3BtreePager(pDb->pBt), sqlite3Codec, NULL, sqlite3FreeCodecArg, (void *) ctx);
codec_set_cipher_name(db, nDb, CIPHER, 0); codec_set_cipher_name(db, nDb, CIPHER, 0);
codec_set_kdf_iter(db, nDb, PBKDF2_ITER, 0); codec_set_kdf_iter(db, nDb, PBKDF2_ITER, 0);
@ -454,11 +456,10 @@ int sqlite3CodecAttach(sqlite3* db, int nDb, const void *zKey, int nKey) {
return SQLITE_ERROR; return SQLITE_ERROR;
} }
int sqlite3FreeCodecArg(void *pCodecArg) { void sqlite3FreeCodecArg(void *pCodecArg) {
codec_ctx *ctx = (codec_ctx *) pCodecArg; codec_ctx *ctx = (codec_ctx *) pCodecArg;
if(pCodecArg == NULL) return SQLITE_ERROR; if(pCodecArg == NULL) return;
codec_ctx_free(&ctx); // wipe and free allocated memory for the context codec_ctx_free(&ctx); // wipe and free allocated memory for the context
return SQLITE_OK;
} }
void sqlite3_activate_see(const char* in) { void sqlite3_activate_see(const char* in) {

View File

@ -51,6 +51,13 @@
void sqlite3pager_get_codec(Pager *pPager, void **ctx); void sqlite3pager_get_codec(Pager *pPager, void **ctx);
int sqlite3pager_is_mj_pgno(Pager *pPager, Pgno pgno); int sqlite3pager_is_mj_pgno(Pager *pPager, Pgno pgno);
sqlite3_file *sqlite3Pager_get_fd(Pager *pPager); sqlite3_file *sqlite3Pager_get_fd(Pager *pPager);
void sqlite3pager_sqlite3PagerSetCodec(
Pager *pPager,
void *(*xCodec)(void*,void*,Pgno,int),
void (*xCodecSizeChng)(void*,int,int),
void (*xCodecFree)(void*),
void *pCodec
);
#endif #endif
#endif #endif

View File

@ -2645,16 +2645,6 @@ int sqlite3PagerClose(Pager *pPager){
IOTRACE(("CLOSE %p\n", pPager)) IOTRACE(("CLOSE %p\n", pPager))
sqlite3OsClose(pPager->fd); sqlite3OsClose(pPager->fd);
/* BEGIN CRYPTO */
#ifdef SQLITE_HAS_CODEC
extern int sqlite3FreeCodecArg(void *);
if(pPager->pCodecArg) sqlite3FreeCodecArg(pPager->pCodecArg);
#endif
/* END CRYPTO */
sqlite3PageFree(pPager->pTmpSpace);
sqlite3PcacheClose(pPager->pPCache);
#ifdef SQLITE_HAS_CODEC #ifdef SQLITE_HAS_CODEC
if( pPager->xCodecFree ) pPager->xCodecFree(pPager->pCodec); if( pPager->xCodecFree ) pPager->xCodecFree(pPager->pCodec);
#endif #endif
@ -5339,7 +5329,7 @@ sqlite3_backup **sqlite3PagerBackupPtr(Pager *pPager){
/* BEGIN CRYPTO */ /* BEGIN CRYPTO */
#ifdef SQLITE_HAS_CODEC #ifdef SQLITE_HAS_CODEC
void sqlite3pager_get_codec(Pager *pPager, void **ctx) { void sqlite3pager_get_codec(Pager *pPager, void **ctx) {
*ctx = pPager->pCodecArg; *ctx = pPager->pCodec;
} }
int sqlite3pager_is_mj_pgno(Pager *pPager, Pgno pgno) { int sqlite3pager_is_mj_pgno(Pager *pPager, Pgno pgno) {
@ -5350,6 +5340,17 @@ sqlite3_file *sqlite3Pager_get_fd(Pager *pPager) {
return (isOpen(pPager->fd)) ? pPager->fd : NULL; return (isOpen(pPager->fd)) ? pPager->fd : NULL;
} }
void sqlite3pager_sqlite3PagerSetCodec(
Pager *pPager,
void *(*xCodec)(void*,void*,Pgno,int),
void (*xCodecSizeChng)(void*,int,int),
void (*xCodecFree)(void*),
void *pCodec
){
sqlite3PagerSetCodec(pPager, xCodec, xCodecSizeChng, xCodecFree, pCodec);
}
#endif #endif
/* END CRYPTO */ /* END CRYPTO */

View File

@ -220,6 +220,10 @@ do_test codec-1.9 {
BEGIN; BEGIN;
CREATE TABLE t2(a,b); CREATE TABLE t2(a,b);
} db } db
for {set i 1} {$i<=3000} {incr i} {
execsql "CREATE TABLE longtablename$i (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa TEXT, bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb TEXT);" db
}
for {set i 1} {$i<=25000} {incr i} { for {set i 1} {$i<=25000} {incr i} {
set r [expr {int(rand()*500000)}] set r [expr {int(rand()*500000)}]
@ -237,9 +241,10 @@ do_test codec-1.9 {
execsql { execsql {
PRAGMA key = 'testkey'; PRAGMA key = 'testkey';
SELECT count(*) FROM t2; SELECT count(*) FROM t2;
SELECT count(*) FROM sqlite_master;
} db } db
} {25000} } {25000 3001}
db close db close
file delete -force test.db file delete -force test.db