Loading core/api/current.txt +3 −0 Original line number Diff line number Diff line Loading @@ -13322,9 +13322,12 @@ package android.content.pm { public final class SigningInfo implements android.os.Parcelable { ctor public SigningInfo(); ctor @FlaggedApi("android.content.pm.archiving") public SigningInfo(@IntRange(from=0) int, @Nullable java.util.Collection<android.content.pm.Signature>, @Nullable java.util.Collection<java.security.PublicKey>, @Nullable java.util.Collection<android.content.pm.Signature>); ctor public SigningInfo(android.content.pm.SigningInfo); method public int describeContents(); method public android.content.pm.Signature[] getApkContentsSigners(); method @FlaggedApi("android.content.pm.archiving") @NonNull public java.util.Collection<java.security.PublicKey> getPublicKeys(); method @FlaggedApi("android.content.pm.archiving") @IntRange(from=0) public int getSchemeVersion(); method public android.content.pm.Signature[] getSigningCertificateHistory(); method public boolean hasMultipleSigners(); method public boolean hasPastSigningCertificates(); core/java/android/content/pm/SigningInfo.java +64 −0 Original line number Diff line number Diff line Loading @@ -16,9 +16,16 @@ package android.content.pm; import android.annotation.FlaggedApi; import android.annotation.IntRange; import android.annotation.NonNull; import android.annotation.Nullable; import android.os.Parcel; import android.os.Parcelable; import android.util.ArraySet; import java.security.PublicKey; import java.util.Collection; /** * Information pertaining to the signing certificates used to sign a package. Loading @@ -32,6 +39,43 @@ public final class SigningInfo implements Parcelable { mSigningDetails = SigningDetails.UNKNOWN; } /** * Creates a new instance of information used to sign the APK. * * @param schemeVersion version of signing schema. * @param apkContentsSigners signing certificates. * @param publicKeys for the signing certificates. * @param signingCertificateHistory All signing certificates the package has proven it is * authorized to use. * * @see * <a href="https://source.android.com/docs/security/features/apksigning#schemes">APK signing * schemas</a> */ @FlaggedApi(Flags.FLAG_ARCHIVING) public SigningInfo(@IntRange(from = 0) int schemeVersion, @Nullable Collection<Signature> apkContentsSigners, @Nullable Collection<PublicKey> publicKeys, @Nullable Collection<Signature> signingCertificateHistory) { if (schemeVersion <= 0 || apkContentsSigners == null) { mSigningDetails = SigningDetails.UNKNOWN; return; } Signature[] signatures = apkContentsSigners != null && !apkContentsSigners.isEmpty() ? apkContentsSigners.toArray(new Signature[apkContentsSigners.size()]) : null; Signature[] pastSignatures = signingCertificateHistory != null && !signingCertificateHistory.isEmpty() ? signingCertificateHistory.toArray(new Signature[signingCertificateHistory.size()]) : null; if (Signature.areExactArraysMatch(signatures, pastSignatures)) { pastSignatures = null; } ArraySet<PublicKey> keys = publicKeys != null && !publicKeys.isEmpty() ? new ArraySet<>(publicKeys) : null; mSigningDetails = new SigningDetails(signatures, schemeVersion, keys, pastSignatures); } /** * @hide only packagemanager should be populating this */ Loading Loading @@ -116,6 +160,26 @@ public final class SigningInfo implements Parcelable { return mSigningDetails.getSignatures(); } /** * Returns the version of signing schema used to sign the APK. * * @see * <a href="https://source.android.com/docs/security/features/apksigning#schemes">APK signing * schemas</a> */ @FlaggedApi(Flags.FLAG_ARCHIVING) public @IntRange(from = 0) int getSchemeVersion() { return mSigningDetails.getSignatureSchemeVersion(); } /** * Returns the public keys for the signing certificates. */ @FlaggedApi(Flags.FLAG_ARCHIVING) public @NonNull Collection<PublicKey> getPublicKeys() { return mSigningDetails.getPublicKeys(); } @Override public int describeContents() { return 0; Loading Loading
core/api/current.txt +3 −0 Original line number Diff line number Diff line Loading @@ -13322,9 +13322,12 @@ package android.content.pm { public final class SigningInfo implements android.os.Parcelable { ctor public SigningInfo(); ctor @FlaggedApi("android.content.pm.archiving") public SigningInfo(@IntRange(from=0) int, @Nullable java.util.Collection<android.content.pm.Signature>, @Nullable java.util.Collection<java.security.PublicKey>, @Nullable java.util.Collection<android.content.pm.Signature>); ctor public SigningInfo(android.content.pm.SigningInfo); method public int describeContents(); method public android.content.pm.Signature[] getApkContentsSigners(); method @FlaggedApi("android.content.pm.archiving") @NonNull public java.util.Collection<java.security.PublicKey> getPublicKeys(); method @FlaggedApi("android.content.pm.archiving") @IntRange(from=0) public int getSchemeVersion(); method public android.content.pm.Signature[] getSigningCertificateHistory(); method public boolean hasMultipleSigners(); method public boolean hasPastSigningCertificates();
core/java/android/content/pm/SigningInfo.java +64 −0 Original line number Diff line number Diff line Loading @@ -16,9 +16,16 @@ package android.content.pm; import android.annotation.FlaggedApi; import android.annotation.IntRange; import android.annotation.NonNull; import android.annotation.Nullable; import android.os.Parcel; import android.os.Parcelable; import android.util.ArraySet; import java.security.PublicKey; import java.util.Collection; /** * Information pertaining to the signing certificates used to sign a package. Loading @@ -32,6 +39,43 @@ public final class SigningInfo implements Parcelable { mSigningDetails = SigningDetails.UNKNOWN; } /** * Creates a new instance of information used to sign the APK. * * @param schemeVersion version of signing schema. * @param apkContentsSigners signing certificates. * @param publicKeys for the signing certificates. * @param signingCertificateHistory All signing certificates the package has proven it is * authorized to use. * * @see * <a href="https://source.android.com/docs/security/features/apksigning#schemes">APK signing * schemas</a> */ @FlaggedApi(Flags.FLAG_ARCHIVING) public SigningInfo(@IntRange(from = 0) int schemeVersion, @Nullable Collection<Signature> apkContentsSigners, @Nullable Collection<PublicKey> publicKeys, @Nullable Collection<Signature> signingCertificateHistory) { if (schemeVersion <= 0 || apkContentsSigners == null) { mSigningDetails = SigningDetails.UNKNOWN; return; } Signature[] signatures = apkContentsSigners != null && !apkContentsSigners.isEmpty() ? apkContentsSigners.toArray(new Signature[apkContentsSigners.size()]) : null; Signature[] pastSignatures = signingCertificateHistory != null && !signingCertificateHistory.isEmpty() ? signingCertificateHistory.toArray(new Signature[signingCertificateHistory.size()]) : null; if (Signature.areExactArraysMatch(signatures, pastSignatures)) { pastSignatures = null; } ArraySet<PublicKey> keys = publicKeys != null && !publicKeys.isEmpty() ? new ArraySet<>(publicKeys) : null; mSigningDetails = new SigningDetails(signatures, schemeVersion, keys, pastSignatures); } /** * @hide only packagemanager should be populating this */ Loading Loading @@ -116,6 +160,26 @@ public final class SigningInfo implements Parcelable { return mSigningDetails.getSignatures(); } /** * Returns the version of signing schema used to sign the APK. * * @see * <a href="https://source.android.com/docs/security/features/apksigning#schemes">APK signing * schemas</a> */ @FlaggedApi(Flags.FLAG_ARCHIVING) public @IntRange(from = 0) int getSchemeVersion() { return mSigningDetails.getSignatureSchemeVersion(); } /** * Returns the public keys for the signing certificates. */ @FlaggedApi(Flags.FLAG_ARCHIVING) public @NonNull Collection<PublicKey> getPublicKeys() { return mSigningDetails.getPublicKeys(); } @Override public int describeContents() { return 0; Loading