aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2017-10-03 08:13:48 +0000
committerandroid-build-team Robot <android-build-team-robot@google.com>2017-10-03 08:13:48 +0000
commit65ac5feb83da6f5bf2cd1a81c00bf3f9bccc0e2b (patch)
tree50bb0e9b627d8aa75449a6c0338fbd232fa9ce55
parent94820f63f296be8aec8c1eab1a280f45fc5581d9 (diff)
parentb5c3d4d14f7373e0f9f7e6fc5329c41b89c892f3 (diff)
downloadplatform_external_rappor-65ac5feb83da6f5bf2cd1a81c00bf3f9bccc0e2b.tar.gz
platform_external_rappor-65ac5feb83da6f5bf2cd1a81c00bf3f9bccc0e2b.tar.bz2
platform_external_rappor-65ac5feb83da6f5bf2cd1a81c00bf3f9bccc0e2b.zip
Snap for 4373608 from b5c3d4d14f7373e0f9f7e6fc5329c41b89c892f3 to pi-release
Change-Id: I19834d517a71fd025253067f19245ed3753cfb2a
-rw-r--r--Android.mk11
-rw-r--r--README.android4
-rw-r--r--client/java/com/google/android/rappor/Encoder.java (renamed from client/java/com/google/rappor/Encoder.java)38
-rw-r--r--client/java/com/google/android/rappor/HmacDrbg.java (renamed from client/java/com/google/rappor/HmacDrbg.java)2
-rw-r--r--client/javatest/com/google/android/rappor/EncoderTest.java (renamed from client/javatest/com/google/rappor/EncoderTest.java)100
-rw-r--r--client/javatest/com/google/android/rappor/HmacDrbgTest.java (renamed from client/javatest/com/google/rappor/HmacDrbgTest.java)2
6 files changed, 118 insertions, 39 deletions
diff --git a/Android.mk b/Android.mk
index 0a533e0..57589e0 100644
--- a/Android.mk
+++ b/Android.mk
@@ -21,5 +21,14 @@ LOCAL_NO_STANDARD_LIBRARIES := true
LOCAL_JAVA_LANGUAGE_VERSION := 1.7
LOCAL_JAVA_LIBRARIES := core-oj jsr305
LOCAL_SRC_FILES := $(call all-java-files-under, client/java)
+include $(BUILD_STATIC_JAVA_LIBRARY)
-include $(BUILD_JAVA_LIBRARY)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := rappor-tests
+LOCAL_NO_STANDARD_LIBRARIES := true
+LOCAL_JAVA_LANGUAGE_VERSION := 1.7
+LOCAL_STATIC_JAVA_LIBRARIES := hamcrest-library rappor guava junit
+LOCAL_JAVA_LIBRARIES := core-oj jsr305
+LOCAL_SRC_FILES := $(call all-java-files-under, client/javatest)
+include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/README.android b/README.android
index 272665d..30aae43 100644
--- a/README.android
+++ b/README.android
@@ -8,4 +8,6 @@ here:
- Removed all non-java client library files.
- Modified client/java/com/google/rappor/HmacDrbg.java, client/java/com/google/rappor/Encoder.java
- to remove Guava dependency.
+ to remove Guava, javax dependency.
+
+- Moved package from com.google.rappor.* to com.google.android.rappor.* to avoid source conflict with 3rd party library.
diff --git a/client/java/com/google/rappor/Encoder.java b/client/java/com/google/android/rappor/Encoder.java
index 5163f21..a8fb57c 100644
--- a/client/java/com/google/rappor/Encoder.java
+++ b/client/java/com/google/android/rappor/Encoder.java
@@ -1,4 +1,4 @@
-package com.google.rappor;
+package com.google.android.rappor;
// BEGIN android-changed: Removed guava dependency
// import static com.google.common.base.Preconditions.checkArgument;
@@ -12,9 +12,14 @@ import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.BitSet;
+// BEGIN android-changed
+import java.util.Random;
+// END android-changed
-import javax.annotation.Nullable;
-import javax.annotation.concurrent.GuardedBy;
+// BEGIN android-changed: Remove javax
+// import javax.annotation.Nullable;
+// import javax.annotation.concurrent.GuardedBy;
+// END android-changed
/**
* Encodes reports using the RAPPOR differentially-private encoding algorithm.
@@ -163,7 +168,9 @@ public class Encoder {
* <p>This object is stateful; access must be synchronized. The reset method must be
* called before each use.
*/
- @GuardedBy("this")
+// BEGIN android-changed: Remove javax
+// @GuardedBy("this")
+// END android-changed
private final MessageDigest sha256;
/**
@@ -172,13 +179,18 @@ public class Encoder {
* <p>This object is stateful; access must be synchronized. The reset method must be
* called before each use.
*/
- @GuardedBy("this")
+// BEGIN android-changed: Remove javax
+// @GuardedBy("this")
+// END android-changed
private final MessageDigest md5;
/**
* A SecureRandom instance, initialized with a cryptographically secure random seed.
*/
- private final SecureRandom random;
+// BEGIN android-changed
+// private final SecureRandom random;
+ private final Random random;
+// BEGIN android-changed
/**
* Entropy input for constructing HmacDrbg objects.
@@ -248,9 +260,15 @@ public class Encoder {
* string.
*/
public Encoder(
- @Nullable SecureRandom random,
- @Nullable MessageDigest md5,
- @Nullable MessageDigest sha256,
+// BEGIN android-changed: Remove javax
+// @Nullable SecureRandom random,
+// @Nullable MessageDigest md5,
+// @Nullable MessageDigest sha256,
+// SecureRandom random,
+ Random random,
+ MessageDigest md5,
+ MessageDigest sha256,
+// END android-changed
byte[] userSecret,
String encoderId,
int numBits,
@@ -580,7 +598,7 @@ public class Encoder {
}
// BEGIN android-changed: Added guava methods
- private static void checkArgument(boolean expression, @Nullable Object errorMessage) {
+ private static void checkArgument(boolean expression, Object errorMessage) {
if (!expression) {
throw new IllegalArgumentException(String.valueOf(errorMessage));
}
diff --git a/client/java/com/google/rappor/HmacDrbg.java b/client/java/com/google/android/rappor/HmacDrbg.java
index b6f0e4f..db99700 100644
--- a/client/java/com/google/rappor/HmacDrbg.java
+++ b/client/java/com/google/android/rappor/HmacDrbg.java
@@ -1,4 +1,4 @@
-package com.google.rappor;
+package com.google.android.rappor;
// BEGIN android-changed: Removed guava dependency
// import com.google.common.hash.HashFunction;
diff --git a/client/javatest/com/google/rappor/EncoderTest.java b/client/javatest/com/google/android/rappor/EncoderTest.java
index 316f8c2..896322f 100644
--- a/client/javatest/com/google/rappor/EncoderTest.java
+++ b/client/javatest/com/google/android/rappor/EncoderTest.java
@@ -1,4 +1,4 @@
-package com.google.rappor;
+package com.google.android.rappor;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.lessThanOrEqualTo;
@@ -16,7 +16,10 @@ import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
-import java.security.SecureRandom;
+// BEGIN android-changed
+// import java.security.SecureRandom;
+import java.util.Random;
+// END android-changed
/**
* Unit tests for {@link Encoder}.
@@ -703,7 +706,10 @@ public class EncoderTest {
double probabilityQ = 0.85;
long inputValue = 0b11111101L;
- SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
+// BEGIN android-changed
+// SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
+ Random random = new Random();
+// END android-changed
random.setSeed(0x12345678L);
int counts[] = new int[64];
@@ -730,14 +736,24 @@ public class EncoderTest {
}
}
- assertEquals(8481, counts[0]); // input = 1, 99.99% CI = [8358, 8636]
- assertEquals(2477, counts[1]); // input = 0, 99.99% CI = [2332, 2669]
- assertEquals(8486, counts[2]); // input = 1, 99.99% CI = [8358, 8636]
- assertEquals(8495, counts[3]); // input = 1, 99.99% CI = [8358, 8636]
- assertEquals(8563, counts[4]); // input = 1, 99.99% CI = [8358, 8636]
- assertEquals(8560, counts[5]); // input = 1, 99.99% CI = [8358, 8636]
- assertEquals(8481, counts[6]); // input = 1, 99.99% CI = [8358, 8636]
- assertEquals(8491, counts[7]); // input = 1, 99.99% CI = [8358, 8636]
+// BEGIN android-changed
+// assertEquals(8481, counts[0]); // input = 1, 99.99% CI = [8358, 8636]
+// assertEquals(2477, counts[1]); // input = 0, 99.99% CI = [2332, 2669]
+// assertEquals(8486, counts[2]); // input = 1, 99.99% CI = [8358, 8636]
+// assertEquals(8495, counts[3]); // input = 1, 99.99% CI = [8358, 8636]
+// assertEquals(8563, counts[4]); // input = 1, 99.99% CI = [8358, 8636]
+// assertEquals(8560, counts[5]); // input = 1, 99.99% CI = [8358, 8636]
+// assertEquals(8481, counts[6]); // input = 1, 99.99% CI = [8358, 8636]
+// assertEquals(8491, counts[7]); // input = 1, 99.99% CI = [8358, 8636]
+ assertEquals(8492, counts[0]); // input = 1, 99.99% CI = [8358, 8636]
+ assertEquals(2510, counts[1]); // input = 0, 99.99% CI = [2332, 2669]
+ assertEquals(8476, counts[2]); // input = 1, 99.99% CI = [8358, 8636]
+ assertEquals(8509, counts[3]); // input = 1, 99.99% CI = [8358, 8636]
+ assertEquals(8406, counts[4]); // input = 1, 99.99% CI = [8358, 8636]
+ assertEquals(8482, counts[5]); // input = 1, 99.99% CI = [8358, 8636]
+ assertEquals(8498, counts[6]); // input = 1, 99.99% CI = [8358, 8636]
+ assertEquals(8533, counts[7]); // input = 1, 99.99% CI = [8358, 8636]
+// END android-changed
// Check that no high-order bit past numBits ever got set.
for (int iBit = numBits; iBit < 64; iBit++) {
@@ -751,7 +767,10 @@ public class EncoderTest {
long inputValue = 0b11111101L;
long prrValue = 0b01110101L;
- long prrAndIrrValue = 0b01110110L;
+// BEGIN android-changed
+// long prrAndIrrValue = 0b01110110L;
+ long prrAndIrrValue = 0b00111101L;
+// END android-changed
// Verify that PRR is working as expected.
assertEquals(
@@ -772,7 +791,10 @@ public class EncoderTest {
.encodeBits(toBytes(inputValue))));
// Verify that IRR is working as expected.
- SecureRandom random1 = SecureRandom.getInstance("SHA1PRNG");
+// BEGIN android-changed
+// SecureRandom random1 = SecureRandom.getInstance("SHA1PRNG");
+ Random random1 = new Random();
+// END android-changed
random1.setSeed(0x12345678L);
assertEquals(
prrAndIrrValue,
@@ -792,7 +814,10 @@ public class EncoderTest {
.encodeBits(toBytes(prrValue))));
// Test that end-to-end is the result of PRR + IRR.
- SecureRandom random2 = SecureRandom.getInstance("SHA1PRNG");
+// BEGIN android-changed
+// SecureRandom random2 = SecureRandom.getInstance("SHA1PRNG");
+ Random random2 = new Random();
+// END android-changed
random2.setSeed(0x12345678L);
assertEquals(
prrAndIrrValue,
@@ -820,8 +845,12 @@ public class EncoderTest {
// Explicitly spot-check the output for 2^0 and 2^31.
long inputValue0 = 1L;
- long outputValue0 = 590349342L;
- SecureRandom random0 = SecureRandom.getInstance("SHA1PRNG");
+// BEGIN android-changed
+// long outputValue0 = 590349342L;
+// SecureRandom random0 = SecureRandom.getInstance("SHA1PRNG");
+ long outputValue0 = 1117977L;
+ Random random0 = new Random();
+// END android-changed
random0.setSeed(0x12345678L);
assertEquals(
outputValue0,
@@ -841,8 +870,12 @@ public class EncoderTest {
.encodeBits(toBytes(inputValue0))));
long inputValue31 = 1L << 31;
- long outputValue31 = 2746482838L;
- SecureRandom random31 = SecureRandom.getInstance("SHA1PRNG");
+// BEGIN android-changed
+// long outputValue31 = 2746482838L;
+// SecureRandom random31 = SecureRandom.getInstance("SHA1PRNG");
+ long outputValue31 = 9505692L;
+ Random random31 = new Random();
+// END android-changed
random31.setSeed(0x12345678L);
assertEquals(
outputValue31,
@@ -862,7 +895,10 @@ public class EncoderTest {
.encodeBits(toBytes(inputValue31))));
// Check the range 2^1 to 2^30, making sure no values produce exceptions.
- SecureRandom randomRange = SecureRandom.getInstance("SHA1PRNG");
+// BEGIN android-changed
+// SecureRandom randomRange = SecureRandom.getInstance("SHA1PRNG");
+ Random randomRange = new Random();
+// END android-changed
randomRange.setSeed(0x12345678L);
for (int i = 1; i <= 30; i++) {
long inputValue = 1L << (i - 1);
@@ -889,8 +925,12 @@ public class EncoderTest {
// Explicitly spot-check the output for 2^0 and 2^63.
long inputValue0 = 1L;
- long outputValue0 = 867402030798341150L;
- SecureRandom random0 = SecureRandom.getInstance("SHA1PRNG");
+// BEGIN android-changed
+// long outputValue0 = 867402030798341150L;
+// SecureRandom random0 = SecureRandom.getInstance("SHA1PRNG");
+ long outputValue0 = 5802301002133606169L;
+ Random random0 = new Random();
+// END android-changed
random0.setSeed(0x12345678L);
assertEquals(
outputValue0,
@@ -910,8 +950,12 @@ public class EncoderTest {
.encodeBits(toBytes(inputValue0))));
long inputValue63 = 1L << 62;
- long outputValue63 = 5497102447743615126L;
- SecureRandom random63 = SecureRandom.getInstance("SHA1PRNG");
+// BEGIN android-changed
+// long outputValue63 = 5497102447743615126L;
+// SecureRandom random63 = SecureRandom.getInstance("SHA1PRNG");
+ long outputValue63 = 5874921546135456664L;
+ Random random63 = new Random();
+// END android-changed
random63.setSeed(0x12345678L);
assertEquals(
outputValue63,
@@ -931,7 +975,10 @@ public class EncoderTest {
.encodeBits(toBytes(inputValue63))));
// Check the range 2^1 to 2^62, making sure no values produce exceptions.
- SecureRandom randomRange = SecureRandom.getInstance("SHA1PRNG");
+// BEGIN android-changed
+// SecureRandom randomRange = SecureRandom.getInstance("SHA1PRNG");
+ Random randomRange = new Random();
+// END android-changed
randomRange.setSeed(0x12345678L);
for (int i = 1; i <= 62; i++) {
long inputValue = 1L << (i - 1);
@@ -957,7 +1004,10 @@ public class EncoderTest {
byte[] userSecret = makeTestingUserSecret("Bar");
// Check the range 2^1 to 2^4095, making sure no values produce exceptions.
- SecureRandom randomRange = SecureRandom.getInstance("SHA1PRNG");
+// BEGIN android-changed
+// SecureRandom randomRange = SecureRandom.getInstance("SHA1PRNG");
+ Random randomRange = new Random();
+// END android-changed
randomRange.setSeed(0x12345678L);
// Stride is arbitrary, but chosen to be large enough to not cause too many probes (~40) and
// prime to explore well.
diff --git a/client/javatest/com/google/rappor/HmacDrbgTest.java b/client/javatest/com/google/android/rappor/HmacDrbgTest.java
index a14ae7e..e8b0f49 100644
--- a/client/javatest/com/google/rappor/HmacDrbgTest.java
+++ b/client/javatest/com/google/android/rappor/HmacDrbgTest.java
@@ -1,4 +1,4 @@
-package com.google.rappor;
+package com.google.android.rappor;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;