diff options
author | Kenny Root <kroot@google.com> | 2013-08-20 11:33:59 -0700 |
---|---|---|
committer | Kenny Root <kroot@google.com> | 2013-09-05 10:35:45 -0700 |
commit | 30d79c45623d59428a3a2fee5d2f4e447ce4ba8e (patch) | |
tree | e0f49083f53d7506d3e183b9c9cbd8c97cce0a3e /luni/src | |
parent | c82a204d28ce840fcbb671ec4309ac8e490f194e (diff) | |
download | libcore-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.java | 29 |
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"); + } } |