Loading core/java/android/content/pm/SigningInfo.java +4 −2 Original line number Diff line number Diff line Loading @@ -190,9 +190,11 @@ public final class SigningInfo implements Parcelable { mSigningDetails.writeToParcel(dest, parcelableFlags); } /* @hide */ /** * @hide */ @NonNull SigningDetails getSigningDetails() { public SigningDetails getSigningDetails() { return mSigningDetails; } Loading services/core/java/com/android/server/pm/ComputerEngine.java +2 −0 Original line number Diff line number Diff line Loading @@ -60,6 +60,7 @@ import static com.android.server.pm.PackageManagerService.TAG; import static com.android.server.pm.PackageManagerServiceUtils.compareSignatureArrays; import static com.android.server.pm.PackageManagerServiceUtils.compareSignatures; import static com.android.server.pm.PackageManagerServiceUtils.isSystemOrRootOrShell; import static com.android.server.pm.parsing.PackageInfoUtils.getDeprecatedSignatures; import static com.android.server.pm.resolution.ComponentResolver.RESOLVE_PRIORITY_SORTER; import android.Manifest; Loading Loading @@ -1531,6 +1532,7 @@ public class ComputerEngine implements Computer { pi.applicationInfo = PackageInfoUtils.generateDelegateApplicationInfo( ai, flags, state, userId); pi.signingInfo = ps.getSigningInfo(); pi.signatures = getDeprecatedSignatures(pi.signingInfo.getSigningDetails(), flags); if (DEBUG_PACKAGE_INFO) { Log.v(TAG, "ps.pkg is n/a for [" Loading services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java +25 −15 Original line number Diff line number Diff line Loading @@ -238,21 +238,7 @@ public class PackageInfoUtils { } final SigningDetails signingDetails = pkg.getSigningDetails(); // deprecated method of getting signing certificates if ((flags & PackageManager.GET_SIGNATURES) != 0) { if (signingDetails.hasPastSigningCertificates()) { // Package has included signing certificate rotation information. Return the oldest // cert so that programmatic checks keep working even if unaware of key rotation. info.signatures = new Signature[1]; info.signatures[0] = signingDetails.getPastSigningCertificates()[0]; } else if (signingDetails.hasSignatures()) { // otherwise keep old behavior int numberOfSigs = signingDetails.getSignatures().length; info.signatures = new Signature[numberOfSigs]; System.arraycopy(signingDetails.getSignatures(), 0, info.signatures, 0, numberOfSigs); } } info.signatures = getDeprecatedSignatures(signingDetails, flags); // replacement for GET_SIGNATURES if ((flags & PackageManager.GET_SIGNING_CERTIFICATES) != 0) { Loading Loading @@ -358,6 +344,30 @@ public class PackageInfoUtils { return info; } /** * Retrieve the deprecated {@link PackageInfo.signatures} field of signing certificates */ public static Signature[] getDeprecatedSignatures(SigningDetails signingDetails, long flags) { if ((flags & PackageManager.GET_SIGNATURES) == 0) { return null; } if (signingDetails.hasPastSigningCertificates()) { // Package has included signing certificate rotation information. Return the oldest // cert so that programmatic checks keep working even if unaware of key rotation. Signature[] signatures = new Signature[1]; signatures[0] = signingDetails.getPastSigningCertificates()[0]; return signatures; } else if (signingDetails.hasSignatures()) { // otherwise keep old behavior int numberOfSigs = signingDetails.getSignatures().length; Signature[] signatures = new Signature[numberOfSigs]; System.arraycopy(signingDetails.getSignatures(), 0, signatures, 0, numberOfSigs); return signatures; } return null; } private static void updateApplicationInfo(ApplicationInfo ai, long flags, PackageUserState state) { if ((flags & PackageManager.GET_META_DATA) == 0) { Loading Loading
core/java/android/content/pm/SigningInfo.java +4 −2 Original line number Diff line number Diff line Loading @@ -190,9 +190,11 @@ public final class SigningInfo implements Parcelable { mSigningDetails.writeToParcel(dest, parcelableFlags); } /* @hide */ /** * @hide */ @NonNull SigningDetails getSigningDetails() { public SigningDetails getSigningDetails() { return mSigningDetails; } Loading
services/core/java/com/android/server/pm/ComputerEngine.java +2 −0 Original line number Diff line number Diff line Loading @@ -60,6 +60,7 @@ import static com.android.server.pm.PackageManagerService.TAG; import static com.android.server.pm.PackageManagerServiceUtils.compareSignatureArrays; import static com.android.server.pm.PackageManagerServiceUtils.compareSignatures; import static com.android.server.pm.PackageManagerServiceUtils.isSystemOrRootOrShell; import static com.android.server.pm.parsing.PackageInfoUtils.getDeprecatedSignatures; import static com.android.server.pm.resolution.ComponentResolver.RESOLVE_PRIORITY_SORTER; import android.Manifest; Loading Loading @@ -1531,6 +1532,7 @@ public class ComputerEngine implements Computer { pi.applicationInfo = PackageInfoUtils.generateDelegateApplicationInfo( ai, flags, state, userId); pi.signingInfo = ps.getSigningInfo(); pi.signatures = getDeprecatedSignatures(pi.signingInfo.getSigningDetails(), flags); if (DEBUG_PACKAGE_INFO) { Log.v(TAG, "ps.pkg is n/a for [" Loading
services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java +25 −15 Original line number Diff line number Diff line Loading @@ -238,21 +238,7 @@ public class PackageInfoUtils { } final SigningDetails signingDetails = pkg.getSigningDetails(); // deprecated method of getting signing certificates if ((flags & PackageManager.GET_SIGNATURES) != 0) { if (signingDetails.hasPastSigningCertificates()) { // Package has included signing certificate rotation information. Return the oldest // cert so that programmatic checks keep working even if unaware of key rotation. info.signatures = new Signature[1]; info.signatures[0] = signingDetails.getPastSigningCertificates()[0]; } else if (signingDetails.hasSignatures()) { // otherwise keep old behavior int numberOfSigs = signingDetails.getSignatures().length; info.signatures = new Signature[numberOfSigs]; System.arraycopy(signingDetails.getSignatures(), 0, info.signatures, 0, numberOfSigs); } } info.signatures = getDeprecatedSignatures(signingDetails, flags); // replacement for GET_SIGNATURES if ((flags & PackageManager.GET_SIGNING_CERTIFICATES) != 0) { Loading Loading @@ -358,6 +344,30 @@ public class PackageInfoUtils { return info; } /** * Retrieve the deprecated {@link PackageInfo.signatures} field of signing certificates */ public static Signature[] getDeprecatedSignatures(SigningDetails signingDetails, long flags) { if ((flags & PackageManager.GET_SIGNATURES) == 0) { return null; } if (signingDetails.hasPastSigningCertificates()) { // Package has included signing certificate rotation information. Return the oldest // cert so that programmatic checks keep working even if unaware of key rotation. Signature[] signatures = new Signature[1]; signatures[0] = signingDetails.getPastSigningCertificates()[0]; return signatures; } else if (signingDetails.hasSignatures()) { // otherwise keep old behavior int numberOfSigs = signingDetails.getSignatures().length; Signature[] signatures = new Signature[numberOfSigs]; System.arraycopy(signingDetails.getSignatures(), 0, signatures, 0, numberOfSigs); return signatures; } return null; } private static void updateApplicationInfo(ApplicationInfo ai, long flags, PackageUserState state) { if ((flags & PackageManager.GET_META_DATA) == 0) { Loading