Loading telephony/java/com/android/telephony/Rlog.java +76 −0 Original line number Diff line number Diff line Loading @@ -15,6 +15,10 @@ */ package com.android.telephony; import android.net.Uri; import android.os.Build; import android.telecom.PhoneAccount; import android.telephony.PhoneNumberUtils; import android.text.TextUtils; import android.util.Base64; import android.util.Log; Loading Loading @@ -127,6 +131,78 @@ public final class Rlog { return "[" + secureHash(val.getBytes()) + "]"; } /** * Generates an obfuscated string for a calling handle in {@link Uri} format, or a raw phone * phone number in {@link String} format. * @param pii The information to obfuscate. * @return The obfuscated string. */ public static String piiHandle(Object pii) { StringBuilder sb = new StringBuilder(); if (pii instanceof Uri) { Uri uri = (Uri) pii; String scheme = uri.getScheme(); if (!TextUtils.isEmpty(scheme)) { sb.append(scheme).append(":"); } String textToObfuscate = uri.getSchemeSpecificPart(); if (PhoneAccount.SCHEME_TEL.equals(scheme)) { obfuscatePhoneNumber(sb, textToObfuscate); } else if (PhoneAccount.SCHEME_SIP.equals(scheme)) { for (int i = 0; i < textToObfuscate.length(); i++) { char c = textToObfuscate.charAt(i); if (c != '@' && c != '.') { c = '*'; } sb.append(c); } } else { sb.append("***"); } } else if (pii instanceof String) { String number = (String) pii; obfuscatePhoneNumber(sb, number); } return sb.toString(); } /** * Obfuscates a phone number, allowing NUM_DIALABLE_DIGITS_TO_LOG digits to be exposed for the * phone number. * @param sb String buffer to write obfuscated number to. * @param phoneNumber The number to obfuscate. */ private static void obfuscatePhoneNumber(StringBuilder sb, String phoneNumber) { int numDigitsToLog = USER_BUILD ? 0 : 2; int numDigitsToObfuscate = getDialableCount(phoneNumber) - numDigitsToLog; for (int i = 0; i < phoneNumber.length(); i++) { char c = phoneNumber.charAt(i); boolean isDialable = PhoneNumberUtils.isDialable(c); if (isDialable) { numDigitsToObfuscate--; } sb.append(isDialable && numDigitsToObfuscate >= 0 ? "*" : c); } } /** * Determines the number of dialable characters in a string. * @param toCount The string to count dialable characters in. * @return The count of dialable characters. */ private static int getDialableCount(String toCount) { int numDialable = 0; for (char c : toCount.toCharArray()) { if (PhoneNumberUtils.isDialable(c)) { numDialable++; } } return numDialable; } /** * Returns a secure hash (using the SHA1 algorithm) of the provided input. * Loading Loading
telephony/java/com/android/telephony/Rlog.java +76 −0 Original line number Diff line number Diff line Loading @@ -15,6 +15,10 @@ */ package com.android.telephony; import android.net.Uri; import android.os.Build; import android.telecom.PhoneAccount; import android.telephony.PhoneNumberUtils; import android.text.TextUtils; import android.util.Base64; import android.util.Log; Loading Loading @@ -127,6 +131,78 @@ public final class Rlog { return "[" + secureHash(val.getBytes()) + "]"; } /** * Generates an obfuscated string for a calling handle in {@link Uri} format, or a raw phone * phone number in {@link String} format. * @param pii The information to obfuscate. * @return The obfuscated string. */ public static String piiHandle(Object pii) { StringBuilder sb = new StringBuilder(); if (pii instanceof Uri) { Uri uri = (Uri) pii; String scheme = uri.getScheme(); if (!TextUtils.isEmpty(scheme)) { sb.append(scheme).append(":"); } String textToObfuscate = uri.getSchemeSpecificPart(); if (PhoneAccount.SCHEME_TEL.equals(scheme)) { obfuscatePhoneNumber(sb, textToObfuscate); } else if (PhoneAccount.SCHEME_SIP.equals(scheme)) { for (int i = 0; i < textToObfuscate.length(); i++) { char c = textToObfuscate.charAt(i); if (c != '@' && c != '.') { c = '*'; } sb.append(c); } } else { sb.append("***"); } } else if (pii instanceof String) { String number = (String) pii; obfuscatePhoneNumber(sb, number); } return sb.toString(); } /** * Obfuscates a phone number, allowing NUM_DIALABLE_DIGITS_TO_LOG digits to be exposed for the * phone number. * @param sb String buffer to write obfuscated number to. * @param phoneNumber The number to obfuscate. */ private static void obfuscatePhoneNumber(StringBuilder sb, String phoneNumber) { int numDigitsToLog = USER_BUILD ? 0 : 2; int numDigitsToObfuscate = getDialableCount(phoneNumber) - numDigitsToLog; for (int i = 0; i < phoneNumber.length(); i++) { char c = phoneNumber.charAt(i); boolean isDialable = PhoneNumberUtils.isDialable(c); if (isDialable) { numDigitsToObfuscate--; } sb.append(isDialable && numDigitsToObfuscate >= 0 ? "*" : c); } } /** * Determines the number of dialable characters in a string. * @param toCount The string to count dialable characters in. * @return The count of dialable characters. */ private static int getDialableCount(String toCount) { int numDialable = 0; for (char c : toCount.toCharArray()) { if (PhoneNumberUtils.isDialable(c)) { numDialable++; } } return numDialable; } /** * Returns a secure hash (using the SHA1 algorithm) of the provided input. * Loading