Index: chrome/android/java/src/org/chromium/chrome/browser/WebappAuthenticator.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/WebappAuthenticator.java b/chrome/android/java/src/org/chromium/chrome/browser/WebappAuthenticator.java |
index f71fa671af9a248a3922d71804a68bebeea65b90..26ce9a33ea8cbeeac8ade29faca8d97b77e9c6fa 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/WebappAuthenticator.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/WebappAuthenticator.java |
@@ -8,6 +8,8 @@ import android.content.Context; |
import android.os.AsyncTask; |
import android.util.Log; |
+import org.chromium.base.SecureRandomInitializer; |
+ |
import java.io.File; |
import java.io.FileInputStream; |
import java.io.FileOutputStream; |
@@ -191,20 +193,7 @@ public class WebappAuthenticator { |
public SecretKey call() throws Exception { |
KeyGenerator generator = KeyGenerator.getInstance(MAC_ALGORITHM_NAME); |
SecureRandom random = SecureRandom.getInstance("SHA1PRNG"); |
- |
- // Versions of SecureRandom from Android <= 4.3 do not seed themselves as |
- // securely as possible. This workaround should suffice until the fixed version |
- // is deployed to all users. getRandomBytes, which reads from /dev/urandom, |
- // which is as good as the platform can get. |
- // |
- // TODO(palmer): Consider getting rid of this once the updated platform has |
- // shipped to everyone. Alternately, leave this in as a defense against other |
- // bugs in SecureRandom. |
- byte[] seed = getRandomBytes(MAC_KEY_BYTE_COUNT); |
- if (seed == null) { |
- return null; |
- } |
- random.setSeed(seed); |
+ SecureRandomInitializer.initialize(random); |
generator.init(MAC_KEY_BYTE_COUNT * 8, random); |
return generator.generateKey(); |
} |
@@ -213,29 +202,6 @@ public class WebappAuthenticator { |
} |
} |
- private static byte[] getRandomBytes(int count) { |
- FileInputStream fis = null; |
- try { |
- fis = new FileInputStream("/dev/urandom"); |
- byte[] bytes = new byte[count]; |
- if (bytes.length != fis.read(bytes)) { |
- return null; |
- } |
- return bytes; |
- } catch (Throwable t) { |
- // This causes the ultimate caller, i.e. getMac, to fail. |
- return null; |
- } finally { |
- try { |
- if (fis != null) { |
- fis.close(); |
- } |
- } catch (IOException e) { |
- // Nothing we can do. |
- } |
- } |
- } |
- |
/** |
* @return A Mac, or null if it is not possible to instantiate one. |
*/ |