summaryrefslogtreecommitdiffstats
path: root/luni/src
diff options
context:
space:
mode:
authorKenny Root <kroot@google.com>2013-08-20 11:33:59 -0700
committerKenny Root <kroot@google.com>2013-09-05 10:35:45 -0700
commit30d79c45623d59428a3a2fee5d2f4e447ce4ba8e (patch)
treee0f49083f53d7506d3e183b9c9cbd8c97cce0a3e /luni/src
parentc82a204d28ce840fcbb671ec4309ac8e490f194e (diff)
downloadlibcore-30d79c45623d59428a3a2fee5d2f4e447ce4ba8e.zip
libcore-30d79c45623d59428a3a2fee5d2f4e447ce4ba8e.tar.gz
libcore-30d79c45623d59428a3a2fee5d2f4e447ce4ba8e.tar.bz2
Test fallback SHA1PRNG uses full width seeds
(cherry picked from commit 82575d5df1d80691a9bc96ec1af2c6c32e3426f8) Bug: 6642616 Change-Id: I922316853eca6fc80c4c5e329864f3a93fc0af4f
Diffstat (limited to 'luni/src')
-rw-r--r--luni/src/test/java/org/apache/harmony/security/tests/provider/crypto/SHA1PRNG_SecureRandomTest.java29
1 files changed, 29 insertions, 0 deletions
diff --git a/luni/src/test/java/org/apache/harmony/security/tests/provider/crypto/SHA1PRNG_SecureRandomTest.java b/luni/src/test/java/org/apache/harmony/security/tests/provider/crypto/SHA1PRNG_SecureRandomTest.java
index ffdbe92..0db5ee1 100644
--- a/luni/src/test/java/org/apache/harmony/security/tests/provider/crypto/SHA1PRNG_SecureRandomTest.java
+++ b/luni/src/test/java/org/apache/harmony/security/tests/provider/crypto/SHA1PRNG_SecureRandomTest.java
@@ -17,6 +17,8 @@
package org.apache.harmony.security.tests.provider.crypto;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.SecureRandom;
@@ -400,4 +402,31 @@ public class SHA1PRNG_SecureRandomTest extends TestCase {
assertFalse("sequences are equal i=" + i, b);
}
}
+
+ public void testSeedIsFullLength() throws Exception {
+ Class<?> srClass = Class.forName(
+ "org.apache.harmony.security.provider.crypto.SHA1PRNG_SecureRandomImpl");
+ Field seedField = srClass.getDeclaredField("seed");
+ seedField.setAccessible(true);
+
+ Method nextBytesMethod = srClass.getDeclaredMethod("engineNextBytes", byte[].class);
+ nextBytesMethod.setAccessible(true);
+
+ byte[] bytes = new byte[1];
+
+ // Iterate 8 times to make sure the probability of a false positive is
+ // extremely rare.
+ for (int i = 0; i < 8; i++) {
+ Object sr = srClass.newInstance();
+ nextBytesMethod.invoke(sr, bytes);
+ int[] seed = (int[]) seedField.get(sr);
+
+ // If the first integer is not zero, it is fixed.
+ if (seed[0] != 0) {
+ return; // Success
+ }
+ }
+
+ fail("Fallback SHA1PRNG_SecureRandomImpl should not clobber seed internally");
+ }
}