8000 Adjust codec tracing, add rekey by name test. · githubzhaoliang/sqlcipher@045844f · GitHub
[go: up one dir, main page]

Skip to content

Commit 045844f

Browse files
Adjust codec tracing, add rekey by name test.
1 parent 4bc456d commit 045844f

File tree

2 files changed

+34
-9
lines changed

2 files changed

+34
-9
lines changed

src/crypto.c

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -356,11 +356,12 @@ static int sqlcipher_find_db_index(sqlite3 *db, const char *zDb) {
356356
}
357357

358358
int sqlite3_key(sqlite3 *db, const void *pKey, int nKey) {
359+
CODEC_TRACE(("sqlite3_key entered: db=%p pKey=%s nKey=%d\n", db, (char *)pKey, nKey));
359360
return sqlite3_key_v2(db, "main", pKey, nKey);
360361
}
361362

362363
int sqlite3_key_v2(sqlite3 *db, const char *zDb, const void *pKey, int nKey) {
363-
CODEC_TRACE(("sqlite3_key: entered db=%p pKey=%s nKey=%d\n", db, (char *)pKey, nKey));
364+
CODEC_TRACE(("sqlite3_key_v2: entered db=%p zDb=%s pKey=%s nKey=%d\n", db, zDb, (char *)pKey, nKey));
364365
/* attach key if db and pKey are not null and nKey is > 0 */
365366
if(db && pKey && nKey) {
366367
int db_index = sqlcipher_find_db_index(db, zDb);
@@ -370,6 +371,7 @@ int sqlite3_key_v2(sqlite3 *db, const char *zDb, const void *pKey, int nKey) {
370371
}
371372

372373
int sqlite3_rekey(sqlite3 *db, const void *pKey, int nKey) {
374+
CODEC_TRACE(("sqlite3_rekey entered: db=%p pKey=%s nKey=%d\n", db, (char *)pKey, nKey));
373375
return sqlite3_rekey_v2(db, "main", pKey, nKey);
374376
}
375377

@@ -384,11 +386,11 @@ int sqlite3_rekey(sqlite3 *db, const void *pKey, int nKey) {
384386
** 3. If there is a key present, re-encrypt the database with the new key
385387
*/
386388
int sqlite3_rekey_v2(sqlite3 *db, const char *zDb, const void *pKey, int nKey) {
387-
CODEC_TRACE(("sqlite3_rekey: entered db=%p pKey=%s, nKey=%d\n", db, (char *)pKey, nKey));
389+
CODEC_TRACE(("sqlite3_rekey_v2: entered db=%p zDb=%s pKey=%s, nKey=%d\n", db, zDb, (char *)pKey, nKey));
388390
if(db && pKey && nKey) {
389391
int db_index = sqlcipher_find_db_index(db, zDb);
390392
struct Db *pDb = &db->aDb[db_index];
391-
CODEC_TRACE(("sqlite3_rekey: database pDb=%p\n", pDb));
393+
CODEC_TRACE(("sqlite3_rekey_v2: database pDb=%p db_index:%d\n", pDb, db_index));
392394
if(pDb->pBt) {
393395
codec_ctx *ctx;
394396
int rc, page_count;
@@ -400,13 +402,13 @@ int sqlite3_rekey_v2(sqlite3 *db, const char *zDb, const void *pKey, int nKey) {
400402

401403
if(ctx == NULL) {
402404
/* there was no codec attached to this database, so this should do nothing! */
403-
CODEC_TRACE(("sqlite3_rekey: no codec attached to db, exiting\n"));
405+
CODEC_TRACE(("sqlite3_rekey_v2: no codec attached to db, exiting\n"));
404406
return SQLITE_OK;
405407
}
406408

407409
sqlite3_mutex_enter(db->mutex);
408410

409-
codec_set_pass_key(db, 0, pKey, nKey, CIPHER_WRITE_CTX);
411+
codec_set_pass_key(db, db_index, pKey, nKey, CIPHER_WRITE_CTX);
410412

411413
/* do stuff here to rewrite the database
412414
** 1. Create a transaction on the database
@@ -424,21 +426,21 @@ int sqlite3_rekey_v2(sqlite3 *db, const char *zDb, const void *pKey, int nKey) {
424426
if(rc == SQLITE_OK) {
425427
sqlite3PagerUnref(page);
426428
} else {
427-
CODEC_TRACE(("sqlite3_rekey: error %d occurred writing page %d\n", rc, pgno));
429+
CODEC_TRACE(("sqlite3_rekey_v2: error %d occurred writing page %d\n", rc, pgno));
428430
}
429431
} else {
430-
CODEC_TRACE(("sqlite3_rekey: error %d occurred getting page %d\n", rc, pgno));
432+
CODEC_TRACE(("sqlite3_rekey_v2: error %d occurred getting page %d\n", rc, pgno));
431433
}
432434
}
433435
}
434436

435437
/* if commit was successful commit and copy the rekey data to current key, else rollback to release locks */
436438
if(rc == SQLITE_OK) {
437-
CODEC_TRACE(("sqlite3_rekey: committing\n"));
439+
CODEC_TRACE(("sqlite3_rekey_v2: committing\n"));
438440
rc = sqlite3BtreeCommit(pDb->pBt);
439441
sqlcipher_codec_key_copy(ctx, CIPHER_WRITE_CTX);
440442
} else {
441-
CODEC_TRACE(("sqlite3_rekey: rollback\n"));
443+
CODEC_TRACE(("sqlite3_rekey_v2: rollback\n"));
442444
sqlite3BtreeRollback(pDb->pBt, SQLITE_ABORT_ROLLBACK);
443445
}
444446

test/crypto.test

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2061,6 +2061,29 @@ do_test key-database-by-name {
20612061
}
20622062
} {foo bar}
20632063
db close
2064+
file delete -force test.db
2065+
file delete -force new.db
2066+
2067+
do_test rekey-database-by-name {
2068+
sqlite_orig db test.db
2069+
execsql {
2070+
attach database 'new.db' as new;
2071+
pragma new.key = 'foo';
2072+
create table new.t1(a,b);
2073+
insert into new.t1(a,b) values('foo', 'bar');
2074+
pragma new.rekey = 'bar';
2075+
detach database new;
2076+
}
2077+
db close
2078+
2079+
sqlite_orig db new.db
2080+
execsql {
2081+
pragma key = 'bar';
2082+
select * from t1;
2083+
}
2084+
} {foo bar}
2085+
db close
2086+
file delete -force test.db
20642087
file delete -force new.db
20652088

20662089
finish_test

0 commit comments

Comments
 (0)
0