From 7286fd9b06ec582bfd4ed83dd81a461564806250 Mon Sep 17 00:00:00 2001 From: Moxie Marlinspike Date: Thu, 19 Jan 2017 19:06:46 -0800 Subject: [PATCH] Don't use SHA1 for stable IDs // FREEBIE --- .../securesms/ConversationAdapter.java | 44 ++++++------------- .../securesms/database/MmsSmsDatabase.java | 6 +-- 2 files changed, 16 insertions(+), 34 deletions(-) diff --git a/src/org/thoughtcrime/securesms/ConversationAdapter.java b/src/org/thoughtcrime/securesms/ConversationAdapter.java index 523e03b883..e98bbb2849 100644 --- a/src/org/thoughtcrime/securesms/ConversationAdapter.java +++ b/src/org/thoughtcrime/securesms/ConversationAdapter.java @@ -29,7 +29,6 @@ import android.view.View.OnClickListener; import android.view.View.OnLongClickListener; import android.view.ViewGroup; -import org.thoughtcrime.redphone.util.Conversions; import org.thoughtcrime.securesms.crypto.MasterSecret; import org.thoughtcrime.securesms.database.CursorRecyclerViewAdapter; import org.thoughtcrime.securesms.database.DatabaseFactory; @@ -42,8 +41,6 @@ import org.thoughtcrime.securesms.util.LRUCache; import org.thoughtcrime.securesms.util.ViewUtil; import java.lang.ref.SoftReference; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; import java.util.Collections; import java.util.HashSet; import java.util.Locale; @@ -78,7 +75,6 @@ public class ConversationAdapter private final @NonNull Recipients recipients; private final @NonNull MmsSmsDatabase db; private final @NonNull LayoutInflater inflater; - private final @NonNull MessageDigest digest; protected static class ViewHolder extends RecyclerView.ViewHolder { public ViewHolder(final @NonNull V itemView) { @@ -100,17 +96,12 @@ public class ConversationAdapter @VisibleForTesting ConversationAdapter(Context context, Cursor cursor) { super(context, cursor); - try { - this.masterSecret = null; - this.locale = null; - this.clickListener = null; - this.recipients = null; - this.inflater = null; - this.db = null; - this.digest = MessageDigest.getInstance("SHA1"); - } catch (NoSuchAlgorithmException nsae) { - throw new AssertionError("SHA1 isn't supported!"); - } + this.masterSecret = null; + this.locale = null; + this.clickListener = null; + this.recipients = null; + this.inflater = null; + this.db = null; } public ConversationAdapter(@NonNull Context context, @@ -121,19 +112,14 @@ public class ConversationAdapter @NonNull Recipients recipients) { super(context, cursor); - try { - this.masterSecret = masterSecret; - this.locale = locale; - this.clickListener = clickListener; - this.recipients = recipients; - this.inflater = LayoutInflater.from(context); - this.db = DatabaseFactory.getMmsSmsDatabase(context); - this.digest = MessageDigest.getInstance("SHA1"); + this.masterSecret = masterSecret; + this.locale = locale; + this.clickListener = clickListener; + this.recipients = recipients; + this.inflater = LayoutInflater.from(context); + this.db = DatabaseFactory.getMmsSmsDatabase(context); - setHasStableIds(true); - } catch (NoSuchAlgorithmException nsae) { - throw new AssertionError("SHA1 isn't supported!"); - } + setHasStableIds(true); } @Override @@ -208,9 +194,7 @@ public class ConversationAdapter @Override public long getItemId(@NonNull Cursor cursor) { - final String unique = cursor.getString(cursor.getColumnIndexOrThrow(MmsSmsColumns.UNIQUE_ROW_ID)); - final byte[] bytes = digest.digest(unique.getBytes()); - return Conversions.byteArrayToLong(bytes); + return cursor.getLong(cursor.getColumnIndexOrThrow(MmsSmsColumns.UNIQUE_ROW_ID)); } private MessageRecord getMessageRecord(long messageId, Cursor cursor, String type) { diff --git a/src/org/thoughtcrime/securesms/database/MmsSmsDatabase.java b/src/org/thoughtcrime/securesms/database/MmsSmsDatabase.java index 106fd94093..1616ecf0e2 100644 --- a/src/org/thoughtcrime/securesms/database/MmsSmsDatabase.java +++ b/src/org/thoughtcrime/securesms/database/MmsSmsDatabase.java @@ -138,8 +138,7 @@ public class MmsSmsDatabase extends Database { String[] mmsProjection = {MmsDatabase.DATE_SENT + " AS " + MmsSmsColumns.NORMALIZED_DATE_SENT, MmsDatabase.DATE_RECEIVED + " AS " + MmsSmsColumns.NORMALIZED_DATE_RECEIVED, MmsDatabase.TABLE_NAME + "." + MmsDatabase.ID + " AS " + MmsSmsColumns.ID, - "'MMS::' || " + MmsDatabase.TABLE_NAME + "." + MmsDatabase.ID - + " || '::' || " + MmsDatabase.DATE_SENT + "CAST('2' || " + MmsDatabase.TABLE_NAME + "." + MmsDatabase.ID + " || " + MmsDatabase.DATE_SENT + " AS INTEGER)" + " AS " + MmsSmsColumns.UNIQUE_ROW_ID, AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.ROW_ID + " AS " + AttachmentDatabase.ATTACHMENT_ID_ALIAS, SmsDatabase.BODY, MmsSmsColumns.READ, MmsSmsColumns.THREAD_ID, @@ -164,8 +163,7 @@ public class MmsSmsDatabase extends Database { String[] smsProjection = {SmsDatabase.DATE_SENT + " AS " + MmsSmsColumns.NORMALIZED_DATE_SENT, SmsDatabase.DATE_RECEIVED + " AS " + MmsSmsColumns.NORMALIZED_DATE_RECEIVED, MmsSmsColumns.ID, - "'SMS::' || " + MmsSmsColumns.ID - + " || '::' || " + SmsDatabase.DATE_SENT + "CAST('1' || " + MmsSmsColumns.ID + " || " + SmsDatabase.DATE_SENT + " AS INTEGER)" + " AS " + MmsSmsColumns.UNIQUE_ROW_ID, "NULL AS " + AttachmentDatabase.ATTACHMENT_ID_ALIAS, SmsDatabase.BODY, MmsSmsColumns.READ, MmsSmsColumns.THREAD_ID,