From 5e3cfee412b3b4c8c005728e40005dba650d7085 Mon Sep 17 00:00:00 2001 From: Cody Kesting Date: Thu, 19 Mar 2020 13:07:19 -0700 Subject: [PATCH] Make UiccAccessRule certificate utils accessible. UiccAccessRule includes functionality for getting Signatures from a PackageInfo and hashing a cert. Instead of duplicating this code in CarrierPrivilegesTracker, make it visible with @hide. Bug: 147391402 Test: atest FrameworksTelephonyTests Change-Id: I4f95ab512e94cd851a6928d8eb7918d5a04bfa60 Merged-In: I4f95ab512e94cd851a6928d8eb7918d5a04bfa60 (cherry picked from commit a010445028c4492e124b1aa71e57eae2506cfd47) --- .../android/telephony/UiccAccessRule.java | 39 ++++++++++++------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/telephony/java/android/telephony/UiccAccessRule.java b/telephony/java/android/telephony/UiccAccessRule.java index 3e948fc75d001..12bb36647f8f7 100644 --- a/telephony/java/android/telephony/UiccAccessRule.java +++ b/telephony/java/android/telephony/UiccAccessRule.java @@ -36,6 +36,8 @@ import java.io.IOException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Arrays; +import java.util.Collections; +import java.util.List; import java.util.Objects; /** @@ -177,17 +179,8 @@ public final class UiccAccessRule implements Parcelable { * {@link TelephonyManager#CARRIER_PRIVILEGE_STATUS_NO_ACCESS}. */ public int getCarrierPrivilegeStatus(PackageInfo packageInfo) { - Signature[] signatures = packageInfo.signatures; - SigningInfo sInfo = packageInfo.signingInfo; - - if (sInfo != null) { - signatures = sInfo.getSigningCertificateHistory(); - if (sInfo.hasMultipleSigners()) { - signatures = sInfo.getApkContentsSigners(); - } - } - - if (signatures == null || signatures.length == 0) { + List signatures = getSignatures(packageInfo); + if (signatures.isEmpty()) { throw new IllegalArgumentException( "Must use GET_SIGNING_CERTIFICATES when looking up package info"); } @@ -263,9 +256,29 @@ public final class UiccAccessRule implements Parcelable { } /** - * Converts a Signature into a Certificate hash usable for comparison. + * Gets all of the Signatures from the given PackageInfo. + * @hide */ - private static byte[] getCertHash(Signature signature, String algo) { + @NonNull + public static List getSignatures(PackageInfo packageInfo) { + Signature[] signatures = packageInfo.signatures; + SigningInfo signingInfo = packageInfo.signingInfo; + + if (signingInfo != null) { + signatures = signingInfo.getSigningCertificateHistory(); + if (signingInfo.hasMultipleSigners()) { + signatures = signingInfo.getApkContentsSigners(); + } + } + + return (signatures == null) ? Collections.EMPTY_LIST : Arrays.asList(signatures); + } + + /** + * Converts a Signature into a Certificate hash usable for comparison. + * @hide + */ + public static byte[] getCertHash(Signature signature, String algo) { try { MessageDigest md = MessageDigest.getInstance(algo); return md.digest(signature.toByteArray());