move pragma handling logic into crypto.c
This commit is contained in:
parent
70ef31ff5d
commit
96a7738587
33
src/crypto.c
33
src/crypto.c
@ -163,6 +163,39 @@ int codec_set_pass_key(sqlite3* db, int nDb, const void *zKey, int nKey, int for
|
||||
return SQLITE_ERROR;
|
||||
}
|
||||
|
||||
int codec_pragma(sqlite3* db, int iDb, Parse *pParse, const char *zLeft, const char *zRight) {
|
||||
if( sqlite3StrICmp(zLeft, "cipher_version")==0 && !zRight ){
|
||||
codec_vdbe_return_static_string(pParse, "cipher_version", codec_get_cipher_version());
|
||||
}else
|
||||
if( sqlite3StrICmp(zLeft, "cipher")==0 && zRight ){
|
||||
codec_set_cipher_name(db, iDb, zRight, 2); // change cipher for both
|
||||
}else
|
||||
if( sqlite3StrICmp(zLeft, "rekey_cipher")==0 && zRight ){
|
||||
codec_set_cipher_name(db, iDb, zRight, 1); // change write cipher only
|
||||
}else
|
||||
if( sqlite3StrICmp(zLeft, "kdf_iter")==0 && zRight ){
|
||||
codec_set_kdf_iter(db, iDb, atoi(zRight), 2); // change of RW PBKDF2 iteration
|
||||
}else
|
||||
if( sqlite3StrICmp(zLeft, "fast_kdf_iter")==0 && zRight ){
|
||||
codec_set_fast_kdf_iter(db, iDb, atoi(zRight), 2); // change of RW PBKDF2 iteration
|
||||
}else
|
||||
if( sqlite3StrICmp(zLeft, "rekey_kdf_iter")==0 && zRight ){
|
||||
codec_set_kdf_iter(db, iDb, atoi(zRight), 1); // change # if W iterations
|
||||
}else
|
||||
if( sqlite3StrICmp(zLeft,"cipher_page_size")==0 ){
|
||||
codec_set_page_size(db, iDb, atoi(zRight)); // change page size
|
||||
}else
|
||||
if( sqlite3StrICmp(zLeft,"cipher_default_use_hmac")==0 ){
|
||||
codec_set_default_use_hmac(sqlite3GetBoolean(zRight,1));
|
||||
}else
|
||||
if( sqlite3StrICmp(zLeft,"cipher_use_hmac")==0 ){
|
||||
codec_set_use_hmac(db, iDb, sqlite3GetBoolean(zRight,1));
|
||||
}else {
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* sqlite3Codec can be called in multiple modes.
|
||||
* encrypt mode - expected to return a pointer to the
|
||||
|
||||
@ -159,6 +159,8 @@ void sqlcipher_codec_ctx_set_error(codec_ctx *, int);
|
||||
int sqlcipher_codec_ctx_set_pass(codec_ctx *, const void *, int, int);
|
||||
void sqlcipher_codec_get_pass(codec_ctx *, void **zKey, int *nKey);
|
||||
|
||||
int codec_pragma(sqlite3* db, int iDb, Parse *pParse, const char *zLeft, const char *zRight);
|
||||
|
||||
int sqlcipher_codec_ctx_set_pagesize(codec_ctx *, int);
|
||||
int sqlcipher_codec_ctx_get_pagesize(codec_ctx *);
|
||||
int sqlcipher_codec_ctx_get_reservesize(codec_ctx *);
|
||||
|
||||
52
src/pragma.c
52
src/pragma.c
@ -317,6 +317,12 @@ void sqlite3Pragma(
|
||||
sqlite3 *db = pParse->db; /* The database connection */
|
||||
Db *pDb; /* The specific database being pragmaed */
|
||||
Vdbe *v = pParse->pVdbe = sqlite3VdbeCreate(db); /* Prepared statement */
|
||||
/** BEGIN CRYPTO **/
|
||||
#ifdef SQLITE_HAS_CODEC
|
||||
extern int codec_pragma(sqlite3*, int, Parse *, const char *, const char *);
|
||||
#endif
|
||||
/** END CRYPTO **/
|
||||
|
||||
|
||||
if( v==0 ) return;
|
||||
sqlite3VdbeRunOnlyOnce(v);
|
||||
@ -376,6 +382,13 @@ void sqlite3Pragma(
|
||||
pParse->rc = rc;
|
||||
}else
|
||||
|
||||
/** BEGIN CRYPTO **/
|
||||
#ifdef SQLITE_HAS_CODEC
|
||||
if(codec_pragma(db, iDb, pParse, zLeft, zRight)) {
|
||||
/* codec_pragma executes internal */
|
||||
}else
|
||||
#endif
|
||||
/** END CRYPTO **/
|
||||
|
||||
#if !defined(SQLITE_OMIT_PAGER_PRAGMAS) && !defined(SQLITE_OMIT_DEPRECATED)
|
||||
/*
|
||||
@ -1534,45 +1547,6 @@ void sqlite3Pragma(
|
||||
sqlite3_rekey(db, zKey, i/2);
|
||||
}
|
||||
}else
|
||||
/** BEGIN CRYPTO **/
|
||||
if( sqlite3StrICmp(zLeft, "cipher_version")==0 && !zRight ){
|
||||
extern void codec_vdbe_return_static_string(Parse *pParse, const char *zLabel, const char *value);
|
||||
extern const char* codec_get_cipher_version();
|
||||
codec_vdbe_return_static_string(pParse, "cipher_version", codec_get_cipher_version());
|
||||
}else
|
||||
if( sqlite3StrICmp(zLeft, "cipher")==0 && zRight ){
|
||||
extern int codec_set_cipher_name(sqlite3*, int, const char *, int);
|
||||
codec_set_cipher_name(db, iDb, zRight, 2); // change cipher for both
|
||||
}else
|
||||
if( sqlite3StrICmp(zLeft, "rekey_cipher")==0 && zRight ){
|
||||
extern int codec_set_cipher_name(sqlite3*, int, const char *, int);
|
||||
codec_set_cipher_name(db, iDb, zRight, 1); // change write cipher only
|
||||
}else
|
||||
if( sqlite3StrICmp(zLeft, "kdf_iter")==0 && zRight ){
|
||||
extern int codec_set_kdf_iter(sqlite3*, int, int, int);
|
||||
codec_set_kdf_iter(db, iDb, atoi(zRight), 2); // change of RW PBKDF2 iteration
|
||||
}else
|
||||
if( sqlite3StrICmp(zLeft, "fast_kdf_iter")==0 && zRight ){
|
||||
extern int codec_set_fast_kdf_iter(sqlite3*, int, int, int);
|
||||
codec_set_fast_kdf_iter(db, iDb, atoi(zRight), 2); // change of RW PBKDF2 iteration
|
||||
}else
|
||||
if( sqlite3StrICmp(zLeft, "rekey_kdf_iter")==0 && zRight ){
|
||||
extern int codec_set_kdf_iter(sqlite3*, int, int, int);
|
||||
codec_set_kdf_iter(db, iDb, atoi(zRight), 1); // change # if W iterations
|
||||
}else
|
||||
if( sqlite3StrICmp(zLeft,"cipher_page_size")==0 ){
|
||||
extern int codec_set_page_size(sqlite3*, int, int);
|
||||
codec_set_page_size(db, iDb, atoi(zRight)); // change page size
|
||||
}else
|
||||
if( sqlite3StrICmp(zLeft,"cipher_default_use_hmac")==0 ){
|
||||
extern void codec_set_default_use_hmac(int);
|
||||
codec_set_default_use_hmac(sqlite3GetBoolean(zRight,1));
|
||||
}else
|
||||
if( sqlite3StrICmp(zLeft,"cipher_use_hmac")==0 ){
|
||||
extern int codec_set_use_hmac(sqlite3*, int, int);
|
||||
codec_set_use_hmac(db, iDb, sqlite3GetBoolean(zRight,1));
|
||||
}else
|
||||
/** END CRYPTO **/
|
||||
#endif
|
||||
#if defined(SQLITE_HAS_CODEC) || defined(SQLITE_ENABLE_CEROD)
|
||||
if( sqlite3StrICmp(zLeft, "activate_extensions")==0 ){
|
||||
|
||||
Loading…
Reference in New Issue
Block a user