From dfb9222ccda659ddeff472a4a21b64b4b6d2e412 Mon Sep 17 00:00:00 2001
From: str4d <str4d@mail.i2p>
Date: Thu, 21 Jan 2016 02:36:21 +0000
Subject: [PATCH] Modify IdenticonBase to use Briar's hashing and to use byte[]
 instead of String

---
 .../identicons/AsymmetricIdenticon.java       | 13 ++++++++++
 .../android/identicons/IdenticonBase.java     | 25 ++++++++-----------
 .../android/identicons/IdenticonDrawable.java |  9 ++++++-
 .../android/identicons/IdenticonView.java     |  8 ++++--
 .../identicons/SymmetricIdenticon.java        | 13 ++++++++++
 5 files changed, 51 insertions(+), 17 deletions(-)

diff --git a/briar-android/src/im/delight/android/identicons/AsymmetricIdenticon.java b/briar-android/src/im/delight/android/identicons/AsymmetricIdenticon.java
index bce32ff9e1..b1d98d9b35 100644
--- a/briar-android/src/im/delight/android/identicons/AsymmetricIdenticon.java
+++ b/briar-android/src/im/delight/android/identicons/AsymmetricIdenticon.java
@@ -20,8 +20,15 @@ import android.content.Context;
 import android.graphics.Color;
 import android.util.AttributeSet;
 
+import org.briarproject.api.crypto.CryptoComponent;
+
+import javax.inject.Inject;
+
+import roboguice.RoboGuice;
+
 public class AsymmetricIdenticon extends IdenticonView {
 
+    @Inject private CryptoComponent mCrypto;
     private IdenticonBase mDelegate;
 
     public AsymmetricIdenticon(Context context) {
@@ -45,7 +52,13 @@ public class AsymmetricIdenticon extends IdenticonView {
     }
 
     private void initDelegate() {
+        RoboGuice.injectMembers(getContext(), this);
         mDelegate = new IdenticonBase() {
+            @Override
+            protected CryptoComponent getCrypto() {
+                return mCrypto;
+            }
+
             @Override
             protected int getRowCount() {
                 return 4;
diff --git a/briar-android/src/im/delight/android/identicons/IdenticonBase.java b/briar-android/src/im/delight/android/identicons/IdenticonBase.java
index a1a5d5dd30..8a7153ed99 100644
--- a/briar-android/src/im/delight/android/identicons/IdenticonBase.java
+++ b/briar-android/src/im/delight/android/identicons/IdenticonBase.java
@@ -4,15 +4,13 @@ import android.graphics.Canvas;
 import android.graphics.Color;
 import android.graphics.Paint;
 
-import java.security.MessageDigest;
+import org.briarproject.api.crypto.CryptoComponent;
 
 /**
  * Created by saiimons on 05/10/14.
  */
 public abstract class IdenticonBase {
-    private static final String HASH_ALGORITHM = "SHA-256";
-
-
+    private final CryptoComponent mCrypto;
     private final int mRowCount;
     private final int mColumnCount;
     private final Paint mPaint;
@@ -23,6 +21,7 @@ public abstract class IdenticonBase {
     private volatile boolean mReady;
 
     public IdenticonBase() {
+        mCrypto = getCrypto();
         mRowCount = getRowCount();
         mColumnCount = getColumnCount();
         mPaint = new Paint();
@@ -32,20 +31,16 @@ public abstract class IdenticonBase {
         mPaint.setDither(true);
     }
 
-    public static byte[] getHash(String input) {
+    public byte[] getHash(byte[] input) {
         byte[] mHash;
         // if the input was null
         if (input == null) {
             // we can't create a hash value and have nothing to show (draw to the view)
             mHash = null;
-        }
-        // if the input was a proper string (non-null)
-        else {
-            // generate a hash from the string to get unique but deterministic byte values
+        } else {
+            // generate a hash from the input to get unique but deterministic byte values
             try {
-                final MessageDigest digest = java.security.MessageDigest.getInstance(HASH_ALGORITHM);
-                digest.update(input == null ? new byte[0] : input.getBytes());
-                mHash = digest.digest();
+                mHash = mCrypto.hash(input);
             } catch (Exception e) {
                 mHash = null;
             }
@@ -68,9 +63,9 @@ public abstract class IdenticonBase {
         }
     }
 
-    public void show(String input) {
+    public void show(byte[] input) {
         if(input != null) {
-            mHash = IdenticonBase.getHash(input);
+            mHash = getHash(input);
         } else {
             mHash = null;
         }
@@ -89,6 +84,8 @@ public abstract class IdenticonBase {
         }
     }
 
+    abstract protected CryptoComponent getCrypto();
+
     abstract protected int getRowCount();
 
     abstract protected int getColumnCount();
diff --git a/briar-android/src/im/delight/android/identicons/IdenticonDrawable.java b/briar-android/src/im/delight/android/identicons/IdenticonDrawable.java
index 19a5094b91..4a5032428f 100644
--- a/briar-android/src/im/delight/android/identicons/IdenticonDrawable.java
+++ b/briar-android/src/im/delight/android/identicons/IdenticonDrawable.java
@@ -7,6 +7,8 @@ import android.graphics.Rect;
 import android.graphics.drawable.Drawable;
 import android.util.Log;
 
+import org.briarproject.api.crypto.CryptoComponent;
+
 /**
  * Created by saiimons on 05/10/14.
  */
@@ -15,9 +17,14 @@ public class IdenticonDrawable extends Drawable {
 
     private static final int CENTER_COLUMN_INDEX = 3;
 
-    public IdenticonDrawable(String toShow) {
+    public IdenticonDrawable(final CryptoComponent crypto, byte[] toShow) {
         super();
         mDelegate = new IdenticonBase() {
+            @Override
+            protected CryptoComponent getCrypto() {
+                return crypto;
+            }
+
             @Override
             protected int getRowCount() {
                 return 5;
diff --git a/briar-android/src/im/delight/android/identicons/IdenticonView.java b/briar-android/src/im/delight/android/identicons/IdenticonView.java
index 061ba953cb..32a4f863c0 100644
--- a/briar-android/src/im/delight/android/identicons/IdenticonView.java
+++ b/briar-android/src/im/delight/android/identicons/IdenticonView.java
@@ -49,11 +49,15 @@ abstract public class IdenticonView extends View {
         }
     }
 
-    public void show(String input) {
+    public void show(byte[] input) {
         getDelegate().show(input);
         invalidate();
     }
 
+    public void show(String input) {
+        show(input.getBytes());
+    }
+
     public void show(int input) {
         show(String.valueOf(input));
     }
@@ -71,7 +75,7 @@ abstract public class IdenticonView extends View {
     }
 
     public void show(byte input) {
-        show(String.valueOf(input));
+        show(new byte[] { input });
     }
 
     public void show(char input) {
diff --git a/briar-android/src/im/delight/android/identicons/SymmetricIdenticon.java b/briar-android/src/im/delight/android/identicons/SymmetricIdenticon.java
index 170ed77ef5..9a267a2f95 100644
--- a/briar-android/src/im/delight/android/identicons/SymmetricIdenticon.java
+++ b/briar-android/src/im/delight/android/identicons/SymmetricIdenticon.java
@@ -20,10 +20,17 @@ import android.content.Context;
 import android.graphics.Color;
 import android.util.AttributeSet;
 
+import org.briarproject.api.crypto.CryptoComponent;
+
+import javax.inject.Inject;
+
+import roboguice.RoboGuice;
+
 public class SymmetricIdenticon extends IdenticonView {
 
     private static final int CENTER_COLUMN_INDEX = 3;
 
+    @Inject private CryptoComponent mCrypto;
     private IdenticonBase mDelegate;
 
     public SymmetricIdenticon(Context context) {
@@ -42,7 +49,13 @@ public class SymmetricIdenticon extends IdenticonView {
     }
 
     private void initDelegate() {
+        RoboGuice.injectMembers(getContext(), this);
         mDelegate = new IdenticonBase() {
+            @Override
+            protected CryptoComponent getCrypto() {
+                return mCrypto;
+            }
+
             @Override
             protected int getRowCount() {
                 return 5;
-- 
GitLab