Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fcf8c8e8 authored by Alex Buynytskyy's avatar Alex Buynytskyy Committed by Android (Google) Code Review
Browse files

Merge "Public API to allow creation of SigningInfo." into main

parents 11423679 23d97b2e
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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();
+64 −0
Original line number Diff line number Diff line
@@ -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.
@@ -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
     */
@@ -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;