@@ -369,7 +369,6 @@ int sqlcipher_codec_pragma(sqlite3* db, int iDb, Parse *pParse, const char *zLef
369369 } else if (sqlite3StrICmp (zRight , SQLCIPHER_HMAC_SHA512_LABEL ) == 0 ) {
370370 rc = sqlcipher_set_default_hmac_algorithm (SQLCIPHER_HMAC_SHA512 );
371371 }
372- if (rc != SQLITE_OK ) sqlcipher_codec_ctx_set_error (ctx , SQLITE_ERROR );
373372 } else {
374373 int algorithm = sqlcipher_get_default_hmac_algorithm ();
375374 if (algorithm == SQLCIPHER_HMAC_SHA1 ) {
@@ -415,7 +414,6 @@ int sqlcipher_codec_pragma(sqlite3* db, int iDb, Parse *pParse, const char *zLef
415414 } else if (sqlite3StrICmp (zRight , SQLCIPHER_PBKDF2_HMAC_SHA512_LABEL ) == 0 ) {
416415 rc = sqlcipher_set_default_kdf_algorithm (SQLCIPHER_PBKDF2_HMAC_SHA512 );
417416 }
418- if (rc != SQLITE_OK ) sqlcipher_codec_ctx_set_error (ctx , SQLITE_ERROR );
419417 } else {
420418 int algorithm = sqlcipher_get_default_kdf_algorithm ();
421419 if (algorithm == SQLCIPHER_PBKDF2_HMAC_SHA1 ) {
@@ -427,6 +425,108 @@ int sqlcipher_codec_pragma(sqlite3* db, int iDb, Parse *pParse, const char *zLef
427425 }
428426 }
429427 }else
428+ if ( sqlite3StrICmp (zLeft ,"cipher_compatibility" )== 0 ){
429+ if (ctx ) {
430+ if (zRight ) {
431+ int version = atoi (zRight );
432+
433+ switch (version ) {
434+ case 1 :
435+ rc = sqlcipher_codec_ctx_set_pagesize (ctx , 1024 );
436+ if (rc != SQLITE_OK ) sqlcipher_codec_ctx_set_error (ctx , SQLITE_ERROR );
437+ rc = sqlcipher_codec_ctx_set_hmac_algorithm (ctx , SQLCIPHER_HMAC_SHA1 );
438+ if (rc != SQLITE_OK ) sqlcipher_codec_ctx_set_error (ctx , SQLITE_ERROR );
439+ rc = sqlcipher_codec_ctx_set_kdf_algorithm (ctx , SQLCIPHER_PBKDF2_HMAC_SHA1 );
440+ if (rc != SQLITE_OK ) sqlcipher_codec_ctx_set_error (ctx , SQLITE_ERROR );
441+ rc = sqlcipher_codec_ctx_set_kdf_iter (ctx , 4000 );
442+ if (rc != SQLITE_OK ) sqlcipher_codec_ctx_set_error (ctx , SQLITE_ERROR );
443+ rc = sqlcipher_codec_ctx_set_use_hmac (ctx , 0 );
444+ if (rc != SQLITE_OK ) sqlcipher_codec_ctx_set_error (ctx , SQLITE_ERROR );
445+ break ;
446+
447+ case 2 :
448+ rc = sqlcipher_codec_ctx_set_pagesize (ctx , 1024 );
449+ if (rc != SQLITE_OK ) sqlcipher_codec_ctx_set_error (ctx , SQLITE_ERROR );
450+ rc = sqlcipher_codec_ctx_set_hmac_algorithm (ctx , SQLCIPHER_HMAC_SHA1 );
451+ if (rc != SQLITE_OK ) sqlcipher_codec_ctx_set_error (ctx , SQLITE_ERROR );
452+ rc = sqlcipher_codec_ctx_set_kdf_algorithm (ctx , SQLCIPHER_PBKDF2_HMAC_SHA1 );
453+ if (rc != SQLITE_OK ) sqlcipher_codec_ctx_set_error (ctx , SQLITE_ERROR );
454+ rc = sqlcipher_codec_ctx_set_kdf_iter (ctx , 4000 );
455+ if (rc != SQLITE_OK ) sqlcipher_codec_ctx_set_error (ctx , SQLITE_ERROR );
456+ rc = sqlcipher_codec_ctx_set_use_hmac (ctx , 1 );
457+ if (rc != SQLITE_OK ) sqlcipher_codec_ctx_set_error (ctx , SQLITE_ERROR );
458+ break ;
459+
460+ case 3 :
461+ rc = sqlcipher_codec_ctx_set_pagesize (ctx , 1024 );
462+ if (rc != SQLITE_OK ) sqlcipher_codec_ctx_set_error (ctx , SQLITE_ERROR );
463+ rc = sqlcipher_codec_ctx_set_hmac_algorithm (ctx , SQLCIPHER_HMAC_SHA1 );
464+ if (rc != SQLITE_OK ) sqlcipher_codec_ctx_set_error (ctx , SQLITE_ERROR );
465+ rc = sqlcipher_codec_ctx_set_kdf_algorithm (ctx , SQLCIPHER_PBKDF2_HMAC_SHA1 );
466+ if (rc != SQLITE_OK ) sqlcipher_codec_ctx_set_error (ctx , SQLITE_ERROR );
467+ rc = sqlcipher_codec_ctx_set_kdf_iter (ctx , 64000 );
468+ if (rc != SQLITE_OK ) sqlcipher_codec_ctx_set_error (ctx , SQLITE_ERROR );
469+ rc = sqlcipher_codec_ctx_set_use_hmac (ctx , 1 );
470+ if (rc != SQLITE_OK ) sqlcipher_codec_ctx_set_error (ctx , SQLITE_ERROR );
471+ break ;
472+
473+ default :
474+ rc = sqlcipher_codec_ctx_set_pagesize (ctx , 4096 );
475+ if (rc != SQLITE_OK ) sqlcipher_codec_ctx_set_error (ctx , SQLITE_ERROR );
476+ rc = sqlcipher_codec_ctx_set_hmac_algorithm (ctx , SQLCIPHER_HMAC_SHA512 );
477+ if (rc != SQLITE_OK ) sqlcipher_codec_ctx_set_error (ctx , SQLITE_ERROR );
478+ rc = sqlcipher_codec_ctx_set_kdf_algorithm (ctx , SQLCIPHER_PBKDF2_HMAC_SHA512 );
479+ if (rc != SQLITE_OK ) sqlcipher_codec_ctx_set_error (ctx , SQLITE_ERROR );
480+ rc = sqlcipher_codec_ctx_set_kdf_iter (ctx , 256000 );
481+ if (rc != SQLITE_OK ) sqlcipher_codec_ctx_set_error (ctx , SQLITE_ERROR );
482+ rc = sqlcipher_codec_ctx_set_use_hmac (ctx , 1 );
483+ if (rc != SQLITE_OK ) sqlcipher_codec_ctx_set_error (ctx , SQLITE_ERROR );
484+ break ;
485+ }
486+
487+ rc = codec_set_btree_to_codec_pagesize (db , pDb , ctx );
488+ if (rc != SQLITE_OK ) sqlcipher_codec_ctx_set_error (ctx , SQLITE_ERROR );
489+ }
490+ }
491+ }else
492+ if ( sqlite3StrICmp (zLeft ,"cipher_default_compatibility" )== 0 ){
493+ if (zRight ) {
494+ int version = atoi (zRight );
495+ switch (version ) {
496+ case 1 :
497+ sqlcipher_set_default_pagesize (1024 );
498+ sqlcipher_set_default_hmac_algorithm (SQLCIPHER_HMAC_SHA1 );
499+ sqlcipher_set_default_kdf_algorithm (SQLCIPHER_PBKDF2_HMAC_SHA1 );
500+ sqlcipher_set_default_kdf_iter (4000 );
501+ sqlcipher_set_default_use_hmac (0 );
502+ break ;
503+
504+ case 2 :
505+ sqlcipher_set_default_pagesize (1024 );
506+ sqlcipher_set_default_hmac_algorithm (SQLCIPHER_HMAC_SHA1 );
507+ sqlcipher_set_default_kdf_algorithm (SQLCIPHER_PBKDF2_HMAC_SHA1 );
508+ sqlcipher_set_default_kdf_iter (4000 );
509+ sqlcipher_set_default_use_hmac (1 );
510+ break ;
511+
512+ case 3 :
513+ sqlcipher_set_default_pagesize (1024 );
514+ sqlcipher_set_default_hmac_algorithm (SQLCIPHER_HMAC_SHA1 );
515+ sqlcipher_set_default_kdf_algorithm (SQLCIPHER_PBKDF2_HMAC_SHA1 );
516+ sqlcipher_set_default_kdf_iter (64000 );
517+ sqlcipher_set_default_use_hmac (1 );
518+ break ;
519+
520+ default :
521+ sqlcipher_set_default_pagesize (4096 );
522+ sqlcipher_set_default_hmac_algorithm (SQLCIPHER_HMAC_SHA512 );
523+ sqlcipher_set_default_kdf_algorithm (SQLCIPHER_PBKDF2_HMAC_SHA512 );
524+ sqlcipher_set_default_kdf_iter (256000 );
525+ sqlcipher_set_default_use_hmac (1 );
526+ break ;
527+ }
528+ }
529+ }else
430530 if ( sqlite3StrICmp (zLeft ,"cipher_memory_security" )== 0 ){
431531 if ( zRight ) {
432532 sqlcipher_set_mem_security (sqlite3GetBoolean (zRight ,1 ));
0 commit comments