From faa36d417c11cc32a1e97936fd379706d99a0cbb Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Thu, 26 Aug 2021 16:05:41 -0400 Subject: [PATCH] Switch back to mainline SQLCipher. --- app/build.gradle | 2 +- .../database/FlipperSqlCipherAdapter.java | 6 ++-- .../securesms/backup/FullBackupExporter.java | 2 +- .../securesms/backup/FullBackupImporter.java | 2 +- .../securesms/database/DatabaseFactory.java | 6 ++-- .../securesms/database/JobDatabase.java | 22 ++++++++---- .../securesms/database/KeyValueDatabase.java | 22 ++++++++---- .../database/LocalMetricsDatabase.kt | 16 +++++---- .../securesms/database/LogDatabase.kt | 16 +++++---- .../securesms/database/MegaphoneDatabase.java | 20 ++++++++--- .../securesms/database/MessageDatabase.java | 2 +- .../securesms/database/MmsDatabase.java | 2 +- .../securesms/database/MmsSmsDatabase.java | 2 +- .../database/PendingRetryReceiptDatabase.java | 2 +- .../securesms/database/RecipientDatabase.java | 2 +- .../securesms/database/SQLiteDatabase.java | 18 +++++----- .../securesms/database/SessionDatabase.java | 2 +- .../securesms/database/SignalDatabase.java | 4 +-- .../securesms/database/SmsDatabase.java | 2 +- .../securesms/database/SmsMigrator.java | 2 +- .../database/SqlCipherDatabaseHook.java | 22 ++++++------ .../database/SqlCipherErrorHandler.java | 4 +-- .../helpers/PreKeyMigrationHelper.java | 2 +- .../helpers/RecipientIdCleanupHelper.java | 2 +- .../helpers/RecipientIdMigrationHelper.java | 2 +- .../helpers/SQLCipherMigrationHelper.java | 2 +- .../database/helpers/SQLCipherOpenHelper.java | 35 ++++++++++--------- .../helpers/SessionStoreMigrationHelper.java | 2 +- .../newdevice/NewDeviceServerTask.java | 2 +- .../securesms/jobs/StorageSyncJob.java | 2 +- .../recipients/LiveRecipientCache.java | 2 +- .../fragments/RestoreBackupFragment.java | 2 +- .../thoughtcrime/securesms/util/SqlUtil.java | 2 +- .../securesms/MockAppDataInitializer.java | 2 +- app/witness-verifications.gradle | 6 ++-- 35 files changed, 141 insertions(+), 100 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index b24fddcc6..e3741850e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -509,7 +509,7 @@ dependencies { implementation 'com.codewaves.stickyheadergrid:stickyheadergrid:0.9.4' implementation 'com.github.dmytrodanylyk.circular-progress-button:library:1.1.3-S2' - implementation 'org.signal:android-database-sqlcipher:4.4.3-S1' + implementation "net.zetetic:android-database-sqlcipher:4.4.3" implementation "androidx.sqlite:sqlite:2.1.0" implementation ('com.googlecode.ez-vcard:ez-vcard:0.9.11') { diff --git a/app/src/flipper/java/org/thoughtcrime/securesms/database/FlipperSqlCipherAdapter.java b/app/src/flipper/java/org/thoughtcrime/securesms/database/FlipperSqlCipherAdapter.java index df7819053..43a6bc8e4 100644 --- a/app/src/flipper/java/org/thoughtcrime/securesms/database/FlipperSqlCipherAdapter.java +++ b/app/src/flipper/java/org/thoughtcrime/securesms/database/FlipperSqlCipherAdapter.java @@ -11,9 +11,9 @@ import androidx.annotation.Nullable; import com.facebook.flipper.plugins.databases.DatabaseDescriptor; import com.facebook.flipper.plugins.databases.DatabaseDriver; -import net.zetetic.database.DatabaseUtils; -import net.zetetic.database.sqlcipher.SQLiteDatabase; -import net.zetetic.database.sqlcipher.SQLiteStatement; +import net.sqlcipher.DatabaseUtils; +import net.sqlcipher.database.SQLiteDatabase; +import net.sqlcipher.database.SQLiteStatement; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper; diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupExporter.java b/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupExporter.java index a7fec0f3e..81ad11f5c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupExporter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupExporter.java @@ -13,7 +13,7 @@ import androidx.documentfile.provider.DocumentFile; import com.annimon.stream.function.Predicate; import com.google.protobuf.ByteString; -import net.zetetic.database.sqlcipher.SQLiteDatabase; +import net.sqlcipher.database.SQLiteDatabase; import org.greenrobot.eventbus.EventBus; import org.signal.core.util.Conversions; diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupImporter.java b/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupImporter.java index 6c219e537..9fb8b43ef 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupImporter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupImporter.java @@ -11,7 +11,7 @@ import android.util.Pair; import androidx.annotation.NonNull; -import net.zetetic.database.sqlcipher.SQLiteDatabase; +import net.sqlcipher.database.SQLiteDatabase; import org.greenrobot.eventbus.EventBus; import org.signal.core.util.Conversions; diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/DatabaseFactory.java b/app/src/main/java/org/thoughtcrime/securesms/database/DatabaseFactory.java index c171f9abb..e5fb75a63 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/DatabaseFactory.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/DatabaseFactory.java @@ -20,7 +20,7 @@ import android.content.Context; import androidx.annotation.NonNull; -import net.zetetic.database.sqlcipher.SQLiteDatabase; +import net.sqlcipher.database.SQLiteDatabase; import org.thoughtcrime.securesms.contacts.ContactsDatabase; import org.thoughtcrime.securesms.crypto.AttachmentSecret; @@ -214,7 +214,7 @@ public class DatabaseFactory { return getInstance(context).groupCallRingDatabase; } - public static net.zetetic.database.sqlcipher.SQLiteDatabase getBackupDatabase(Context context) { + public static net.sqlcipher.database.SQLiteDatabase getBackupDatabase(Context context) { return getInstance(context).databaseHelper.getRawReadableDatabase(); } @@ -304,7 +304,7 @@ public class DatabaseFactory { databaseHelper.getSignalWritableDatabase(); } - public net.zetetic.database.sqlcipher.SQLiteDatabase getRawDatabase() { + public net.sqlcipher.database.SQLiteDatabase getRawDatabase() { return databaseHelper.getRawWritableDatabase(); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/JobDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/JobDatabase.java index cfd1924bf..42783dc32 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/JobDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/JobDatabase.java @@ -9,9 +9,9 @@ import androidx.annotation.NonNull; import com.annimon.stream.Stream; -import net.zetetic.database.sqlcipher.SQLiteDatabaseHook; -import net.zetetic.database.sqlcipher.SQLiteOpenHelper; -import net.zetetic.database.sqlcipher.SQLiteDatabase; +import net.sqlcipher.database.SQLiteDatabaseHook; +import net.sqlcipher.database.SQLiteOpenHelper; +import net.sqlcipher.database.SQLiteDatabase; import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.logging.Log; @@ -89,7 +89,8 @@ public class JobDatabase extends SQLiteOpenHelper implements SignalDatabase { private static volatile JobDatabase instance; - private final Application application; + private final Application application; + private final DatabaseSecret databaseSecret; public static @NonNull JobDatabase getInstance(@NonNull Application context) { if (instance == null) { @@ -104,9 +105,10 @@ public class JobDatabase extends SQLiteOpenHelper implements SignalDatabase { } public JobDatabase(@NonNull Application application, @NonNull DatabaseSecret databaseSecret) { - super(application, DATABASE_NAME, databaseSecret.asString(), null, DATABASE_VERSION, 0, new SqlCipherErrorHandler(DATABASE_NAME), new SqlCipherDatabaseHook()); + super(application, DATABASE_NAME, null, DATABASE_VERSION, new SqlCipherDatabaseHook(), new SqlCipherErrorHandler(DATABASE_NAME)); - this.application = application; + this.application = application; + this.databaseSecret = databaseSecret; } @Override @@ -428,4 +430,12 @@ public class JobDatabase extends SQLiteOpenHelper implements SignalDatabase { } } } + + private SQLiteDatabase getReadableDatabase() { + return super.getReadableDatabase(databaseSecret.asString()); + } + + private SQLiteDatabase getWritableDatabase() { + return super.getWritableDatabase(databaseSecret.asString()); + } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/KeyValueDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/KeyValueDatabase.java index c5dfa5e6d..c347501d9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/KeyValueDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/KeyValueDatabase.java @@ -6,9 +6,9 @@ import android.database.Cursor; import androidx.annotation.NonNull; -import net.zetetic.database.sqlcipher.SQLiteDatabase; -import net.zetetic.database.sqlcipher.SQLiteDatabaseHook; -import net.zetetic.database.sqlcipher.SQLiteOpenHelper; +import net.sqlcipher.database.SQLiteDatabase; +import net.sqlcipher.database.SQLiteDatabaseHook; +import net.sqlcipher.database.SQLiteOpenHelper; import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.logging.Log; @@ -47,7 +47,8 @@ public class KeyValueDatabase extends SQLiteOpenHelper implements SignalDatabase private static volatile KeyValueDatabase instance; - private final Application application; + private final Application application; + private final DatabaseSecret databaseSecret; public static @NonNull KeyValueDatabase getInstance(@NonNull Application context) { if (instance == null) { @@ -62,9 +63,10 @@ public class KeyValueDatabase extends SQLiteOpenHelper implements SignalDatabase } private KeyValueDatabase(@NonNull Application application, @NonNull DatabaseSecret databaseSecret) { - super(application, DATABASE_NAME, databaseSecret.asString(), null, DATABASE_VERSION, 0,new SqlCipherErrorHandler(DATABASE_NAME), new SqlCipherDatabaseHook()); + super(application, DATABASE_NAME, null, DATABASE_VERSION, new SqlCipherDatabaseHook(), new SqlCipherErrorHandler(DATABASE_NAME)); - this.application = application; + this.application = application; + this.databaseSecret = databaseSecret; } @Override @@ -221,6 +223,14 @@ public class KeyValueDatabase extends SQLiteOpenHelper implements SignalDatabase } } + private SQLiteDatabase getReadableDatabase() { + return super.getReadableDatabase(databaseSecret.asString()); + } + + private SQLiteDatabase getWritableDatabase() { + return super.getWritableDatabase(databaseSecret.asString()); + } + private enum Type { BLOB(0), BOOLEAN(1), FLOAT(2), INTEGER(3), LONG(4), STRING(5); diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/LocalMetricsDatabase.kt b/app/src/main/java/org/thoughtcrime/securesms/database/LocalMetricsDatabase.kt index 46f69efd0..c3a13aac8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/LocalMetricsDatabase.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/LocalMetricsDatabase.kt @@ -3,8 +3,8 @@ package org.thoughtcrime.securesms.database import android.annotation.SuppressLint import android.app.Application import android.content.ContentValues -import net.zetetic.database.sqlcipher.SQLiteDatabase -import net.zetetic.database.sqlcipher.SQLiteOpenHelper +import net.sqlcipher.database.SQLiteDatabase +import net.sqlcipher.database.SQLiteOpenHelper import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.crypto.DatabaseSecret import org.thoughtcrime.securesms.crypto.DatabaseSecretProvider @@ -29,12 +29,10 @@ class LocalMetricsDatabase private constructor( ) : SQLiteOpenHelper( application, DATABASE_NAME, - databaseSecret.asString(), null, DATABASE_VERSION, - 0, - SqlCipherErrorHandler(DATABASE_NAME), - SqlCipherDatabaseHook() + SqlCipherDatabaseHook(), + SqlCipherErrorHandler(DATABASE_NAME) ), SignalDatabase { @@ -240,6 +238,12 @@ class LocalMetricsDatabase private constructor( } } + private val readableDatabase: SQLiteDatabase + get() = getReadableDatabase(databaseSecret.asString()) + + private val writableDatabase: SQLiteDatabase + get() = getWritableDatabase(databaseSecret.asString()) + data class EventMetrics( val name: String, val count: Long, diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/LogDatabase.kt b/app/src/main/java/org/thoughtcrime/securesms/database/LogDatabase.kt index 8e1c9595c..5ec85b0e0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/LogDatabase.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/LogDatabase.kt @@ -4,8 +4,8 @@ import android.annotation.SuppressLint import android.app.Application import android.content.ContentValues import android.database.Cursor -import net.zetetic.database.sqlcipher.SQLiteDatabase -import net.zetetic.database.sqlcipher.SQLiteOpenHelper +import net.sqlcipher.database.SQLiteDatabase +import net.sqlcipher.database.SQLiteOpenHelper import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.crypto.DatabaseSecret import org.thoughtcrime.securesms.crypto.DatabaseSecretProvider @@ -32,12 +32,10 @@ class LogDatabase private constructor( ) : SQLiteOpenHelper( application, DATABASE_NAME, - databaseSecret.asString(), null, DATABASE_VERSION, - 0, - SqlCipherErrorHandler(DATABASE_NAME), - SqlCipherDatabaseHook() + SqlCipherDatabaseHook(), + SqlCipherErrorHandler(DATABASE_NAME) ), SignalDatabase { @@ -229,6 +227,12 @@ class LogDatabase private constructor( } } + private val readableDatabase: SQLiteDatabase + get() = getReadableDatabase(databaseSecret.asString()) + + private val writableDatabase: SQLiteDatabase + get() = getWritableDatabase(databaseSecret.asString()) + interface Reader : Iterator, Closeable class CursorReader(private val cursor: Cursor) : Reader { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MegaphoneDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/MegaphoneDatabase.java index 02e0eb1ac..a7b4f2ba8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MegaphoneDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MegaphoneDatabase.java @@ -6,8 +6,8 @@ import android.database.Cursor; import androidx.annotation.NonNull; -import net.zetetic.database.sqlcipher.SQLiteDatabase; -import net.zetetic.database.sqlcipher.SQLiteOpenHelper; +import net.sqlcipher.database.SQLiteDatabase; +import net.sqlcipher.database.SQLiteOpenHelper; import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.logging.Log; @@ -50,7 +50,8 @@ public class MegaphoneDatabase extends SQLiteOpenHelper implements SignalDatabas private static volatile MegaphoneDatabase instance; - private final Application application; + private final Application application; + private final DatabaseSecret databaseSecret; public static @NonNull MegaphoneDatabase getInstance(@NonNull Application context) { if (instance == null) { @@ -65,9 +66,10 @@ public class MegaphoneDatabase extends SQLiteOpenHelper implements SignalDatabas } public MegaphoneDatabase(@NonNull Application application, @NonNull DatabaseSecret databaseSecret) { - super(application, DATABASE_NAME, databaseSecret.asString(), null, DATABASE_VERSION, 0, new SqlCipherErrorHandler(DATABASE_NAME), new SqlCipherDatabaseHook()); + super(application, DATABASE_NAME, null, DATABASE_VERSION, new SqlCipherDatabaseHook(), new SqlCipherErrorHandler(DATABASE_NAME)); - this.application = application; + this.application = application; + this.databaseSecret = databaseSecret; } @Override @@ -218,4 +220,12 @@ public class MegaphoneDatabase extends SQLiteOpenHelper implements SignalDatabas } } } + + private SQLiteDatabase getReadableDatabase() { + return super.getReadableDatabase(databaseSecret.asString()); + } + + private SQLiteDatabase getWritableDatabase() { + return super.getWritableDatabase(databaseSecret.asString()); + } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MessageDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/MessageDatabase.java index 05a551818..7b1a4dcd0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MessageDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MessageDatabase.java @@ -12,7 +12,7 @@ import com.annimon.stream.Stream; import com.google.android.mms.pdu_alt.NotificationInd; import com.google.protobuf.InvalidProtocolBufferException; -import net.zetetic.database.sqlcipher.SQLiteStatement; +import net.sqlcipher.database.SQLiteStatement; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.database.documents.Document; diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.java index 3bed9f992..b7f5e0ee4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.java @@ -29,7 +29,7 @@ import com.annimon.stream.Stream; import com.google.android.mms.pdu_alt.NotificationInd; import com.google.android.mms.pdu_alt.PduHeaders; -import net.zetetic.database.sqlcipher.SQLiteStatement; +import net.sqlcipher.database.SQLiteStatement; import org.json.JSONArray; import org.json.JSONException; diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MmsSmsDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/MmsSmsDatabase.java index 7990e0cf9..2e46bbb88 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MmsSmsDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MmsSmsDatabase.java @@ -24,7 +24,7 @@ import androidx.annotation.Nullable; import com.annimon.stream.Stream; -import net.zetetic.database.sqlcipher.SQLiteQueryBuilder; +import net.sqlcipher.database.SQLiteQueryBuilder; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.database.MessageDatabase.SyncMessageId; diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/PendingRetryReceiptDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/PendingRetryReceiptDatabase.java index 7ecbf1414..4a04d6abc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/PendingRetryReceiptDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/PendingRetryReceiptDatabase.java @@ -6,7 +6,7 @@ import android.database.Cursor; import androidx.annotation.NonNull; -import net.zetetic.database.sqlcipher.SQLiteDatabase; +import net.sqlcipher.database.SQLiteDatabase; import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper; import org.thoughtcrime.securesms.database.model.PendingRetryReceiptModel; diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.java index e6809a630..ceb2db628 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.java @@ -14,7 +14,7 @@ import com.annimon.stream.Stream; import com.google.protobuf.ByteString; import com.google.protobuf.InvalidProtocolBufferException; -import net.zetetic.database.sqlcipher.SQLiteConstraintException; +import net.sqlcipher.database.SQLiteConstraintException; import org.jetbrains.annotations.NotNull; import org.signal.core.util.logging.Log; diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/SQLiteDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/SQLiteDatabase.java index 943e1f510..5a6719b1a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/SQLiteDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/SQLiteDatabase.java @@ -4,9 +4,9 @@ package org.thoughtcrime.securesms.database; import android.content.ContentValues; import android.database.Cursor; -import net.zetetic.database.SQLException; -import net.zetetic.database.sqlcipher.SQLiteStatement; -import net.zetetic.database.sqlcipher.SQLiteTransactionListener; +import net.sqlcipher.SQLException; +import net.sqlcipher.database.SQLiteStatement; +import net.sqlcipher.database.SQLiteTransactionListener; import org.signal.core.util.tracing.Tracer; @@ -15,7 +15,7 @@ import java.util.Locale; import java.util.Map; /** - * This is a wrapper around {@link net.zetetic.database.sqlcipher.SQLiteDatabase}. There's difficulties + * This is a wrapper around {@link net.sqlcipher.database.SQLiteDatabase}. There's difficulties * making a subclass, so instead we just match the interface. Callers should just need to change * their import statements. */ @@ -34,10 +34,10 @@ public class SQLiteDatabase { private static final String NAME_LOCK = "LOCK"; - private final net.zetetic.database.sqlcipher.SQLiteDatabase wrapped; + private final net.sqlcipher.database.SQLiteDatabase wrapped; private final Tracer tracer; - public SQLiteDatabase(net.zetetic.database.sqlcipher.SQLiteDatabase wrapped) { + public SQLiteDatabase(net.sqlcipher.database.SQLiteDatabase wrapped) { this.wrapped = wrapped; this.tracer = Tracer.getInstance(); } @@ -98,7 +98,7 @@ public class SQLiteDatabase { return result; } - public net.zetetic.database.sqlcipher.SQLiteDatabase getSqlCipherDatabase() { + public net.sqlcipher.database.SQLiteDatabase getSqlCipherDatabase() { return wrapped; } @@ -129,7 +129,7 @@ public class SQLiteDatabase { return traceSql("query(9)", table, selection, false, () -> wrapped.query(distinct, table, columns, selection, selectionArgs, groupBy, having, orderBy, limit)); } - public Cursor queryWithFactory(net.zetetic.database.sqlcipher.SQLiteDatabase.CursorFactory cursorFactory, boolean distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit) { + public Cursor queryWithFactory(net.sqlcipher.database.SQLiteDatabase.CursorFactory cursorFactory, boolean distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit) { return traceSql("queryWithFactory()", table, selection, false, () -> wrapped.queryWithFactory(cursorFactory, distinct, table, columns, selection, selectionArgs, groupBy, having, orderBy, limit)); } @@ -149,7 +149,7 @@ public class SQLiteDatabase { return traceSql("rawQuery(2b)", sql, false,() -> wrapped.rawQuery(sql, args)); } - public Cursor rawQueryWithFactory(net.zetetic.database.sqlcipher.SQLiteDatabase.CursorFactory cursorFactory, String sql, String[] selectionArgs, String editTable) { + public Cursor rawQueryWithFactory(net.sqlcipher.database.SQLiteDatabase.CursorFactory cursorFactory, String sql, String[] selectionArgs, String editTable) { return traceSql("rawQueryWithFactory()", sql, false, () -> wrapped.rawQueryWithFactory(cursorFactory, sql, selectionArgs, editTable)); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/SessionDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/SessionDatabase.java index b753b5303..27bb999a3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/SessionDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/SessionDatabase.java @@ -7,7 +7,7 @@ import android.database.Cursor; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import net.zetetic.database.sqlcipher.SQLiteStatement; +import net.sqlcipher.database.SQLiteStatement; import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper; diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/SignalDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/SignalDatabase.java index ed278cbba..cdddadc1c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/SignalDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/SignalDatabase.java @@ -1,10 +1,10 @@ package org.thoughtcrime.securesms.database; -import net.zetetic.database.sqlcipher.SQLiteDatabase; +import net.sqlcipher.database.SQLiteDatabase; /** * Simple interface for common methods across our various - * {@link net.zetetic.database.sqlcipher.SQLiteOpenHelper}s. + * {@link net.sqlcipher.database.SQLiteOpenHelper}s. */ public interface SignalDatabase { SQLiteDatabase getSqlCipherDatabase(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/SmsDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/SmsDatabase.java index 70c35b148..bfdd3a5b8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/SmsDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/SmsDatabase.java @@ -28,7 +28,7 @@ import androidx.annotation.Nullable; import com.annimon.stream.Stream; import com.google.android.mms.pdu_alt.NotificationInd; -import net.zetetic.database.sqlcipher.SQLiteStatement; +import net.sqlcipher.database.SQLiteStatement; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatch; diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/SmsMigrator.java b/app/src/main/java/org/thoughtcrime/securesms/database/SmsMigrator.java index 49f48f818..0c2665601 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/SmsMigrator.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/SmsMigrator.java @@ -25,7 +25,7 @@ import androidx.annotation.Nullable; import com.annimon.stream.Stream; -import net.zetetic.database.sqlcipher.SQLiteStatement; +import net.sqlcipher.database.SQLiteStatement; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.groups.GroupId; diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/SqlCipherDatabaseHook.java b/app/src/main/java/org/thoughtcrime/securesms/database/SqlCipherDatabaseHook.java index 26b395cc1..a60319e84 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/SqlCipherDatabaseHook.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/SqlCipherDatabaseHook.java @@ -1,7 +1,7 @@ package org.thoughtcrime.securesms.database; -import net.zetetic.database.sqlcipher.SQLiteConnection; -import net.zetetic.database.sqlcipher.SQLiteDatabaseHook; +import net.sqlcipher.database.SQLiteDatabase; +import net.sqlcipher.database.SQLiteDatabaseHook; /** * Standard hook for setting common SQLCipher PRAGMAs. @@ -9,16 +9,18 @@ import net.zetetic.database.sqlcipher.SQLiteDatabaseHook; public class SqlCipherDatabaseHook implements SQLiteDatabaseHook { @Override - public void preKey(SQLiteConnection connection) { - connection.execute("PRAGMA cipher_default_kdf_iter = 1;", null, null); - connection.execute("PRAGMA cipher_default_page_size = 4096;", null, null); + public void preKey(SQLiteDatabase db) { + db.rawExecSQL("PRAGMA cipher_default_kdf_iter = 1;"); + db.rawExecSQL("PRAGMA cipher_default_page_size = 4096;"); } @Override - public void postKey(SQLiteConnection connection) { - connection.execute("PRAGMA cipher_compatibility = 3;", null, null); - connection.execute("PRAGMA cipher_memory_security = OFF;", null, null); - connection.execute("PRAGMA kdf_iter = '1';", null, null); - connection.execute("PRAGMA cipher_page_size = 4096;", null, null); + public void postKey(SQLiteDatabase db) { + db.rawExecSQL("PRAGMA cipher_compatibility = 3;"); + db.rawExecSQL("PRAGMA cipher_memory_security = OFF;"); + db.rawExecSQL("PRAGMA kdf_iter = '1';"); + db.rawExecSQL("PRAGMA cipher_page_size = 4096;"); + db.enableWriteAheadLogging(); + db.setForeignKeyConstraintsEnabled(true); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/SqlCipherErrorHandler.java b/app/src/main/java/org/thoughtcrime/securesms/database/SqlCipherErrorHandler.java index cca6351c9..0555f3e5c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/SqlCipherErrorHandler.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/SqlCipherErrorHandler.java @@ -4,8 +4,8 @@ import android.database.Cursor; import androidx.annotation.NonNull; -import net.zetetic.database.DatabaseErrorHandler; -import net.zetetic.database.sqlcipher.SQLiteDatabase; +import net.sqlcipher.DatabaseErrorHandler; +import net.sqlcipher.database.SQLiteDatabase; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.util.CursorUtil; diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/PreKeyMigrationHelper.java b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/PreKeyMigrationHelper.java index cbe125e5b..9e01aa77a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/PreKeyMigrationHelper.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/PreKeyMigrationHelper.java @@ -8,7 +8,7 @@ import androidx.annotation.NonNull; import com.fasterxml.jackson.annotation.JsonProperty; -import net.zetetic.database.sqlcipher.SQLiteDatabase; +import net.sqlcipher.database.SQLiteDatabase; import org.signal.core.util.Conversions; import org.signal.core.util.logging.Log; diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/RecipientIdCleanupHelper.java b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/RecipientIdCleanupHelper.java index f70c41879..a3efc678d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/RecipientIdCleanupHelper.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/RecipientIdCleanupHelper.java @@ -5,7 +5,7 @@ import android.text.TextUtils; import androidx.annotation.NonNull; -import net.zetetic.database.sqlcipher.SQLiteDatabase; +import net.sqlcipher.database.SQLiteDatabase; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.util.DelimiterUtil; diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/RecipientIdMigrationHelper.java b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/RecipientIdMigrationHelper.java index 339ac045d..f1bf305e5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/RecipientIdMigrationHelper.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/RecipientIdMigrationHelper.java @@ -7,7 +7,7 @@ import android.text.TextUtils; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import net.zetetic.database.sqlcipher.SQLiteDatabase; +import net.sqlcipher.database.SQLiteDatabase; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.groups.GroupId; diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SQLCipherMigrationHelper.java b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SQLCipherMigrationHelper.java index b74d0505a..7ee5dee17 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SQLCipherMigrationHelper.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SQLCipherMigrationHelper.java @@ -12,7 +12,7 @@ import androidx.annotation.Nullable; import com.annimon.stream.function.BiFunction; -import net.zetetic.database.sqlcipher.SQLiteDatabase; +import net.sqlcipher.database.SQLiteDatabase; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.R; diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SQLCipherOpenHelper.java b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SQLCipherOpenHelper.java index c054639ba..0ee6b7ca9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SQLCipherOpenHelper.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SQLCipherOpenHelper.java @@ -18,8 +18,8 @@ import com.annimon.stream.Stream; import com.bumptech.glide.Glide; import com.google.protobuf.InvalidProtocolBufferException; -import net.zetetic.database.sqlcipher.SQLiteDatabase; -import net.zetetic.database.sqlcipher.SQLiteOpenHelper; +import net.sqlcipher.database.SQLiteDatabase; +import net.sqlcipher.database.SQLiteOpenHelper; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.color.MaterialColor; @@ -31,6 +31,7 @@ import org.thoughtcrime.securesms.crypto.DatabaseSecret; import org.thoughtcrime.securesms.crypto.MasterSecret; import org.thoughtcrime.securesms.database.AttachmentDatabase; import org.thoughtcrime.securesms.database.ChatColorsDatabase; +import org.thoughtcrime.securesms.database.DatabaseFactory; import org.thoughtcrime.securesms.database.DraftDatabase; import org.thoughtcrime.securesms.database.EmojiSearchDatabase; import org.thoughtcrime.securesms.database.GroupCallRingDatabase; @@ -219,12 +220,14 @@ public class SQLCipherOpenHelper extends SQLiteOpenHelper implements SignalDatab private static final int DATABASE_VERSION = 116; private static final String DATABASE_NAME = "signal.db"; - private final Context context; + private final Context context; + private final DatabaseSecret databaseSecret; public SQLCipherOpenHelper(@NonNull Context context, @NonNull DatabaseSecret databaseSecret) { - super(context, DATABASE_NAME, databaseSecret.asString(), null, DATABASE_VERSION, 0, new SqlCipherErrorHandler(DATABASE_NAME), new SqlCipherDatabaseHook()); + super(context, DATABASE_NAME, null, DATABASE_VERSION, new SqlCipherDatabaseHook(), new SqlCipherErrorHandler(DATABASE_NAME)); - this.context = context.getApplicationContext(); + this.context = context.getApplicationContext(); + this.databaseSecret = databaseSecret; } @Override @@ -2049,35 +2052,33 @@ public class SQLCipherOpenHelper extends SQLiteOpenHelper implements SignalDatab Log.i(TAG, "Upgrade complete. Took " + (System.currentTimeMillis() - startTime) + " ms."); } - @Override - public net.zetetic.database.sqlcipher.SQLiteDatabase getReadableDatabase() { + public net.sqlcipher.database.SQLiteDatabase getReadableDatabase() { throw new UnsupportedOperationException("Call getSignalReadableDatabase() instead!"); } - @Override - public net.zetetic.database.sqlcipher.SQLiteDatabase getWritableDatabase() { + public net.sqlcipher.database.SQLiteDatabase getWritableDatabase() { throw new UnsupportedOperationException("Call getSignalReadableDatabase() instead!"); } - public net.zetetic.database.sqlcipher.SQLiteDatabase getRawReadableDatabase() { - return super.getReadableDatabase(); + public net.sqlcipher.database.SQLiteDatabase getRawReadableDatabase() { + return super.getReadableDatabase(databaseSecret.asString()); } - public net.zetetic.database.sqlcipher.SQLiteDatabase getRawWritableDatabase() { - return super.getWritableDatabase(); + public net.sqlcipher.database.SQLiteDatabase getRawWritableDatabase() { + return super.getWritableDatabase(databaseSecret.asString()); } public org.thoughtcrime.securesms.database.SQLiteDatabase getSignalReadableDatabase() { - return new org.thoughtcrime.securesms.database.SQLiteDatabase(super.getReadableDatabase()); + return new org.thoughtcrime.securesms.database.SQLiteDatabase(super.getReadableDatabase(databaseSecret.asString())); } public org.thoughtcrime.securesms.database.SQLiteDatabase getSignalWritableDatabase() { - return new org.thoughtcrime.securesms.database.SQLiteDatabase(super.getWritableDatabase()); + return new org.thoughtcrime.securesms.database.SQLiteDatabase(super.getWritableDatabase(databaseSecret.asString())); } @Override - public @NonNull net.zetetic.database.sqlcipher.SQLiteDatabase getSqlCipherDatabase() { - return super.getWritableDatabase(); + public @NonNull net.sqlcipher.database.SQLiteDatabase getSqlCipherDatabase() { + return super.getWritableDatabase(databaseSecret.asString()); } public void markCurrent(SQLiteDatabase db) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SessionStoreMigrationHelper.java b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SessionStoreMigrationHelper.java index ca91f9b59..09b4db389 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SessionStoreMigrationHelper.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SessionStoreMigrationHelper.java @@ -4,7 +4,7 @@ package org.thoughtcrime.securesms.database.helpers; import android.content.ContentValues; import android.content.Context; -import net.zetetic.database.sqlcipher.SQLiteDatabase; +import net.sqlcipher.database.SQLiteDatabase; import org.signal.core.util.Conversions; import org.signal.core.util.logging.Log; diff --git a/app/src/main/java/org/thoughtcrime/securesms/devicetransfer/newdevice/NewDeviceServerTask.java b/app/src/main/java/org/thoughtcrime/securesms/devicetransfer/newdevice/NewDeviceServerTask.java index 4220cc87d..bfb882954 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/devicetransfer/newdevice/NewDeviceServerTask.java +++ b/app/src/main/java/org/thoughtcrime/securesms/devicetransfer/newdevice/NewDeviceServerTask.java @@ -4,7 +4,7 @@ import android.content.Context; import androidx.annotation.NonNull; -import net.zetetic.database.sqlcipher.SQLiteDatabase; +import net.sqlcipher.database.SQLiteDatabase; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/StorageSyncJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/StorageSyncJob.java index ee22ef846..a85ee9e3b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/StorageSyncJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/StorageSyncJob.java @@ -6,7 +6,7 @@ import androidx.annotation.NonNull; import com.annimon.stream.Stream; -import net.zetetic.database.sqlcipher.SQLiteDatabase; +import net.sqlcipher.database.SQLiteDatabase; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.database.DatabaseFactory; diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/LiveRecipientCache.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/LiveRecipientCache.java index a934a48ab..50618ff77 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/LiveRecipientCache.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/LiveRecipientCache.java @@ -7,7 +7,7 @@ import android.database.Cursor; import androidx.annotation.AnyThread; import androidx.annotation.NonNull; -import net.zetetic.database.sqlcipher.SQLiteDatabase; +import net.sqlcipher.database.SQLiteDatabase; import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.logging.Log; diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/RestoreBackupFragment.java b/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/RestoreBackupFragment.java index b701b3002..ef2dc17bc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/RestoreBackupFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/RestoreBackupFragment.java @@ -31,7 +31,7 @@ import androidx.navigation.Navigation; import com.dd.CircularProgressButton; -import net.zetetic.database.sqlcipher.SQLiteDatabase; +import net.sqlcipher.database.SQLiteDatabase; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/SqlUtil.java b/app/src/main/java/org/thoughtcrime/securesms/util/SqlUtil.java index 1525ca84a..6d01caaaa 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/SqlUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/SqlUtil.java @@ -7,7 +7,7 @@ import androidx.annotation.NonNull; import com.annimon.stream.Stream; -import net.zetetic.database.sqlcipher.SQLiteDatabase; +import net.sqlcipher.database.SQLiteDatabase; import org.thoughtcrime.securesms.recipients.RecipientId; import org.whispersystems.libsignal.util.guava.Preconditions; diff --git a/app/src/mock/java/org/thoughtcrime/securesms/MockAppDataInitializer.java b/app/src/mock/java/org/thoughtcrime/securesms/MockAppDataInitializer.java index e253cbbce..7efe7fc9c 100644 --- a/app/src/mock/java/org/thoughtcrime/securesms/MockAppDataInitializer.java +++ b/app/src/mock/java/org/thoughtcrime/securesms/MockAppDataInitializer.java @@ -5,7 +5,7 @@ import android.content.Context; import androidx.annotation.NonNull; -import net.zetetic.database.sqlcipher.SQLiteDatabase; +import net.sqlcipher.database.SQLiteDatabase; import org.signal.core.util.StreamUtil; import org.thoughtcrime.securesms.crypto.IdentityKeyUtil; diff --git a/app/witness-verifications.gradle b/app/witness-verifications.gradle index 511fe5efe..783097066 100644 --- a/app/witness-verifications.gradle +++ b/app/witness-verifications.gradle @@ -495,6 +495,9 @@ dependencyVerification { ['mobi.upod:time-duration-picker:1.1.3', 'db469ce0f48dd96b892eac424ed76870e54bf00fe0a28cdcddfbe5f2a226a0e1'], + ['net.zetetic:android-database-sqlcipher:4.4.3', + '64cf472e3f6c3300fd7307aebb74dfff4eeb3805f138045c83362c7687e4af61'], + ['org.apache.httpcomponents:httpclient-android:4.3.5', '6f56466a9bd0d42934b90bfbfe9977a8b654c058bf44a12bdc2877c4e1f033f1'], @@ -552,9 +555,6 @@ dependencyVerification { ['org.signal:aesgcmprovider:0.0.3', '6eb4422e8a618b3b76cb2096a3619d251f9e27989dc68307a1e5414c3710f2d1'], - ['org.signal:android-database-sqlcipher:4.4.3-S1', - '71080a72aa671856b769375f7be625625dc7f46605263113a5817de9dbc8b610'], - ['org.signal:argon2:13.1', '0f686ccff0d4842bfcc74d92e8dc780a5f159b9376e37a1189fabbcdac458bef'],