Skip to content

Commit c35213d

Browse files
Using the SQLiteDatabaseHook to allow for a test that changes the cipher used on the database
1 parent 59c04b6 commit c35213d

File tree

6 files changed

+65
-3
lines changed

6 files changed

+65
-3
lines changed

libs/sqlcipher.jar

465 Bytes
Binary file not shown.

src/main/java/net/zetetic/ZeteticApplication.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,13 @@ public Activity getCurrentActivity(){
3030
return activity;
3131
}
3232

33-
public SQLiteDatabase createDatabase(){
33+
public void prepareDatabaseEnvironment(){
3434
File databaseFile = getDatabasePath(DATABASE_NAME);
3535
databaseFile.mkdirs();
3636
databaseFile.delete();
37+
}
38+
39+
public SQLiteDatabase createDatabase(File databaseFile){
3740
return SQLiteDatabase.openOrCreateDatabase(databaseFile, DATABASE_PASSWORD, null);
3841
}
3942
}

src/main/java/net/zetetic/ZeteticContentProvider.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
import net.sqlcipher.database.SQLiteDatabase;
88
import net.sqlcipher.database.SQLiteQueryBuilder;
99

10+
import java.io.File;
11+
1012
public class ZeteticContentProvider extends ContentProvider {
1113

1214
public static final Uri CONTENT_URI =
@@ -27,7 +29,8 @@ public boolean onCreate() {
2729
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
2830

2931
SQLiteDatabase.loadLibs(ZeteticApplication.getInstance());
30-
database = ZeteticApplication.getInstance().createDatabase();
32+
File databasePath = ZeteticApplication.getInstance().getDatabasePath(ZeteticApplication.DATABASE_NAME);
33+
database = ZeteticApplication.getInstance().createDatabase(databasePath);
3134

3235
createDatabaseWithData(database);
3336
SQLiteQueryBuilder builder = new SQLiteQueryBuilder();
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package net.zetetic.tests;
2+
3+
import android.database.Cursor;
4+
import net.sqlcipher.database.SQLiteDatabase;
5+
import net.sqlcipher.database.SQLiteDatabaseHook;
6+
import net.zetetic.ZeteticApplication;
7+
8+
import java.io.File;
9+
10+
public class AES128CipherTest extends SQLCipherTest {
11+
@Override
12+
public boolean execute(SQLiteDatabase database) {
13+
14+
String actual = "";
15+
String value = "hey";
16+
database.execSQL("create table t1(a)");
17+
database.execSQL("insert into t1(a) values (?)", new Object[]{value});
18+
Cursor result = database.rawQuery("select * from t1", new String[]{});
19+
if(result != null){
20+
result.moveToFirst();
21+
actual = result.getString(0);
22+
result.close();
23+
}
24+
return actual.equals(value);
25+
}
26+
27+
@Override
28+
public String getName() {
29+
return "AES-128 Bit Cipher Test";
30+
}
31+
32+
@Override
33+
protected SQLiteDatabase createDatabase(File databasePath) {
34+
35+
String password = ZeteticApplication.DATABASE_PASSWORD;
36+
return SQLiteDatabase.openOrCreateDatabase(databasePath, password, null, new SQLiteDatabaseHook() {
37+
38+
@Override
39+
public void preKey(SQLiteDatabase database) {}
40+
41+
@Override
42+
public void postKey(SQLiteDatabase database) {
43+
database.execSQL("PRAGMA cipher = 'aes-128-cbc'");
44+
}
45+
});
46+
}
47+
}

src/main/java/net/zetetic/tests/SQLCipherTest.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import net.sqlcipher.database.SQLiteDatabase;
55
import net.zetetic.ZeteticApplication;
66

7+
import java.io.File;
8+
79
public abstract class SQLCipherTest {
810

911
public abstract boolean execute(SQLiteDatabase database);
@@ -12,7 +14,9 @@ public abstract class SQLCipherTest {
1214
private SQLiteDatabase database;
1315

1416
protected void internalSetUp() {
15-
database = ZeteticApplication.getInstance().createDatabase();
17+
ZeteticApplication.getInstance().prepareDatabaseEnvironment();
18+
File databasePath = ZeteticApplication.getInstance().getDatabasePath(ZeteticApplication.DATABASE_NAME);
19+
database = createDatabase(databasePath);
1620
setUp();
1721
}
1822

@@ -34,6 +38,10 @@ private void internalTearDown(){
3438
SQLiteDatabase.releaseMemory();
3539
tearDown();
3640
}
41+
42+
protected SQLiteDatabase createDatabase(File databasePath){
43+
return ZeteticApplication.getInstance().createDatabase(databasePath);
44+
}
3745

3846
protected void setUp(){};
3947
protected void tearDown(){};

src/main/java/net/zetetic/tests/TestSuiteRunner.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ private List<SQLCipherTest> getTestsToRun(){
4848
tests.add(new CanThrowSQLiteExceptionTest());
4949
tests.add(new RawExecSQLTest());
5050
tests.add(new RawExecSQLExceptionTest());
51+
tests.add(new AES128CipherTest());
5152
return tests;
5253
}
5354
}

0 commit comments

Comments
 (0)