summaryrefslogtreecommitdiff
path: root/core/java
diff options
context:
space:
mode:
authorJong Wook Kim <jongwook@google.com>2018-02-07 05:32:01 +0000
committerandroid-build-merger <android-build-merger@google.com>2018-02-07 05:32:01 +0000
commitb6b2957b8eb176bca763af2201fb17ca1bba7d61 (patch)
tree4552e2bcb3e69d618c9143aa284ac3c17ad3cc69 /core/java
parenta36539cf51245ef460be8a7df915373e1aae0c07 (diff)
parent775861bb12941dfb32ac94f3fe195fad27f99363 (diff)
Merge "MacAddress: Use SecureRandom and add a 46 bit randomized MAC generator" am: 9f16828767
am: 775861bb12 Change-Id: I6dba4e244c660d29f107e471250d39e9caafb17e
Diffstat (limited to 'core/java')
-rw-r--r--core/java/android/net/MacAddress.java29
1 files changed, 24 insertions, 5 deletions
diff --git a/core/java/android/net/MacAddress.java b/core/java/android/net/MacAddress.java
index 287bdc88dd3e..74d64704c8d2 100644
--- a/core/java/android/net/MacAddress.java
+++ b/core/java/android/net/MacAddress.java
@@ -26,6 +26,7 @@ import com.android.internal.util.Preconditions;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
+import java.security.SecureRandom;
import java.util.Arrays;
import java.util.Random;
@@ -329,16 +330,34 @@ public final class MacAddress implements Parcelable {
/**
* Returns a generated MAC address whose 24 least significant bits constituting the
- * NIC part of the address are randomly selected.
+ * NIC part of the address are randomly selected and has Google OUI base.
*
* The locally assigned bit is always set to 1. The multicast bit is always set to 0.
*
- * @return a random locally assigned MacAddress.
+ * @return a random locally assigned, unicast MacAddress with Google OUI.
+ *
+ * @hide
+ */
+ public static @NonNull MacAddress createRandomUnicastAddressWithGoogleBase() {
+ return createRandomUnicastAddress(BASE_GOOGLE_MAC, new SecureRandom());
+ }
+
+ /**
+ * Returns a generated MAC address whose 46 bits, excluding the locally assigned bit and the
+ * unicast bit, are randomly selected.
+ *
+ * The locally assigned bit is always set to 1. The multicast bit is always set to 0.
+ *
+ * @return a random locally assigned, unicast MacAddress.
*
* @hide
*/
public static @NonNull MacAddress createRandomUnicastAddress() {
- return createRandomUnicastAddress(BASE_GOOGLE_MAC, new Random());
+ SecureRandom r = new SecureRandom();
+ long addr = r.nextLong() & VALID_LONG_MASK;
+ addr |= LOCALLY_ASSIGNED_MASK;
+ addr &= ~MULTICAST_MASK;
+ return new MacAddress(addr);
}
/**
@@ -355,8 +374,8 @@ public final class MacAddress implements Parcelable {
*/
public static @NonNull MacAddress createRandomUnicastAddress(MacAddress base, Random r) {
long addr = (base.mAddr & OUI_MASK) | (NIC_MASK & r.nextLong());
- addr = addr | LOCALLY_ASSIGNED_MASK;
- addr = addr & ~MULTICAST_MASK;
+ addr |= LOCALLY_ASSIGNED_MASK;
+ addr &= ~MULTICAST_MASK;
return new MacAddress(addr);
}