From d891f01d96cbaa3b1329c3d476084f3fedb30a89 Mon Sep 17 00:00:00 2001 From: Mark Rathjen Date: Thu, 19 Jan 2017 04:10:37 +0000 Subject: Roll forward SSAID Migration to be Per App/User Unique Values. SSAID is currently shared across all applications for each user on the device, giving developers the ability to track users across multiple applications. Using SSAID for tracking is an abuse of the original intention of the SSAID and has inherent privacy concerns. This change will make the SSAID unique per application, per user on a device. To not affect applications installed prior to this change they will retain the legacy SSAID value until uninstalled and reinstalled again. Across subsequent installations the application will receive the same SSAID as long as the package name and signature remain consistent. Tested manually the following cases: - App retains the legacy sssaid after OTA. - App gets a new ssaid upon post-OTA installation. - App retrieves same ssaid across post-OTA unistall/reinstalls. - Different Apps receive different ssaids. - Factory reset removes ssaid data and generates a different ssaid after App install. - System retains legacy ssaid. Bug: 34395671 Test: CTS tests passed, Manual testing passed This reverts commit be43257005d086ff7d93c15dae22ac40bc0d545e. Change-Id: Ibf20e7949304c30d65bb8aa24cdbbe6e104b1002 --- core/java/android/util/ByteStringUtils.java | 82 +++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 core/java/android/util/ByteStringUtils.java (limited to 'core/java/android/util/ByteStringUtils.java') diff --git a/core/java/android/util/ByteStringUtils.java b/core/java/android/util/ByteStringUtils.java new file mode 100644 index 000000000000..7103e6da0625 --- /dev/null +++ b/core/java/android/util/ByteStringUtils.java @@ -0,0 +1,82 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.util; + +/** + * A utility class for common byte array to hex string operations and vise versa. + * + * @hide + */ +public final class ByteStringUtils { + private final static char[] HEX_ARRAY = "0123456789ABCDEF".toCharArray(); + + private ByteStringUtils() { + /* hide constructor */ + } + + /** + * Returns the hex encoded string representation of bytes. + * @param bytes Byte array to encode. + * @return Hex encoded string representation of bytes. + */ + public static String toString(byte[] bytes) { + if (bytes == null || bytes.length == 0 || bytes.length % 2 != 0) { + return null; + } + + final int byteLength = bytes.length; + final int charCount = 2 * byteLength; + final char[] chars = new char[charCount]; + + for (int i = 0; i < byteLength; i++) { + final int byteHex = bytes[i] & 0xFF; + chars[i * 2] = HEX_ARRAY[byteHex >>> 4]; + chars[i * 2 + 1] = HEX_ARRAY[byteHex & 0x0F]; + } + return new String(chars); + } + + /** + * Returns the decoded byte array representation of str. + * @param str Hex encoded string to decode. + * @return Decoded byte array representation of str. + */ + public static byte[] toByteArray(String str) { + if (str == null || str.length() == 0 || str.length() % 2 != 0) { + return null; + } + + final char[] chars = str.toCharArray(); + final int charLength = chars.length; + final byte[] bytes = new byte[charLength / 2]; + + for (int i = 0; i < bytes.length; i++) { + bytes[i] = + (byte)(((getIndex(chars[i * 2]) << 4) & 0xF0) | (getIndex(chars[i * 2 + 1]) & 0x0F)); + } + return bytes; + } + + private static int getIndex(char c) { + for (int i = 0; i < HEX_ARRAY.length; i++) { + if (HEX_ARRAY[i] == c) { + return i; + } + } + return -1; + } +} -- cgit v1.2.3