Chromium Code Reviews| Index: remoting/android/java/src/org/chromium/chromoting/SecureRandomInitializer.java |
| diff --git a/remoting/android/java/src/org/chromium/chromoting/SecureRandomInitializer.java b/remoting/android/java/src/org/chromium/chromoting/SecureRandomInitializer.java |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..cf731ed31054de66a661a015a008c036a8abe013 |
| --- /dev/null |
| +++ b/remoting/android/java/src/org/chromium/chromoting/SecureRandomInitializer.java |
| @@ -0,0 +1,41 @@ |
| +// Copyright 2014 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +package org.chromium.chromoting; |
|
palmer
2014/08/18 17:47:52
Is there some more general place we can put this s
Lambros
2014/08/18 20:31:31
Probably base/android, to be accessible to our app
|
| + |
| +import java.io.FileInputStream; |
| +import java.io.IOException; |
| +import java.security.SecureRandom; |
| + |
| +/** |
| + * This class contains code to initialize a SecureRandom generator securely on Android platforms |
| + * <= 4.3. See |
| + * {@link http://android-developers.blogspot.com/2013/08/some-securerandom-thoughts.html}. |
| + */ |
| +public class SecureRandomInitializer { |
| + private static final int NUM_RANDOM_BYTES = 16; |
| + |
| + /** |
| + * Safely initializes the random number generator, by seeding it with data from /dev/urandom. |
| + */ |
| + public static void initialize(SecureRandom generator) throws IOException { |
| + FileInputStream fis = null; |
|
palmer
2014/08/18 17:47:52
Nit: Reference types are always initialized to nul
Lambros
2014/08/18 20:31:31
Acknowledged.
|
| + try { |
| + fis = new FileInputStream("/dev/urandom"); |
| + byte[] bytes = new byte[NUM_RANDOM_BYTES]; |
|
palmer
2014/08/18 17:47:52
Nit: You could optimize a bit by making the array
Lambros
2014/08/18 20:31:31
Acknowledged.
|
| + if (bytes.length != fis.read(bytes)) { |
| + throw new IOException("Failed to get enough random data."); |
| + } |
| + generator.setSeed(bytes); |
| + } finally { |
| + try { |
| + if (fis != null) { |
| + fis.close(); |
| + } |
| + } catch (IOException e) { |
| + // Ignore exception closing the device. |
| + } |
| + } |
| + } |
| +} |