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

Commit ecb0793d authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Installer digests for Incremental installations."

parents a37d82dc b39d13ed
Loading
Loading
Loading
Loading
+5 −3
Original line number Original line Diff line number Diff line
@@ -11451,6 +11451,7 @@ package android.content.pm {
    method public int describeContents();
    method public int describeContents();
    method public int getKind();
    method public int getKind();
    method @Nullable public java.security.cert.Certificate getSourceCertificate() throws java.security.cert.CertificateException;
    method @Nullable public java.security.cert.Certificate getSourceCertificate() throws java.security.cert.CertificateException;
    method @Nullable public String getSourcePackageName();
    method @Nullable public String getSplitName();
    method @Nullable public String getSplitName();
    method @NonNull public byte[] getValue();
    method @NonNull public byte[] getValue();
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    method public void writeToParcel(@NonNull android.os.Parcel, int);
@@ -11559,6 +11560,7 @@ package android.content.pm {
  }
  }
  public final class Checksum implements android.os.Parcelable {
  public final class Checksum implements android.os.Parcelable {
    ctor public Checksum(int, @NonNull byte[]);
    method public int describeContents();
    method public int describeContents();
    method public int getKind();
    method public int getKind();
    method @NonNull public byte[] getValue();
    method @NonNull public byte[] getValue();
@@ -11566,9 +11568,9 @@ package android.content.pm {
    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.Checksum> CREATOR;
    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.Checksum> CREATOR;
    field public static final int PARTIAL_MERKLE_ROOT_1M_SHA256 = 32; // 0x20
    field public static final int PARTIAL_MERKLE_ROOT_1M_SHA256 = 32; // 0x20
    field public static final int PARTIAL_MERKLE_ROOT_1M_SHA512 = 64; // 0x40
    field public static final int PARTIAL_MERKLE_ROOT_1M_SHA512 = 64; // 0x40
    field public static final int WHOLE_MD5 = 2; // 0x2
    field @Deprecated public static final int WHOLE_MD5 = 2; // 0x2
    field public static final int WHOLE_MERKLE_ROOT_4K_SHA256 = 1; // 0x1
    field public static final int WHOLE_MERKLE_ROOT_4K_SHA256 = 1; // 0x1
    field public static final int WHOLE_SHA1 = 4; // 0x4
    field @Deprecated public static final int WHOLE_SHA1 = 4; // 0x4
    field public static final int WHOLE_SHA256 = 8; // 0x8
    field public static final int WHOLE_SHA256 = 8; // 0x8
    field public static final int WHOLE_SHA512 = 16; // 0x10
    field public static final int WHOLE_SHA512 = 16; // 0x10
  }
  }
@@ -11864,7 +11866,7 @@ package android.content.pm {
  public static class PackageInstaller.Session implements java.io.Closeable {
  public static class PackageInstaller.Session implements java.io.Closeable {
    method public void abandon();
    method public void abandon();
    method public void addChecksums(@NonNull String, @NonNull java.util.List<android.content.pm.Checksum>) throws java.io.IOException;
    method @Deprecated public void addChecksums(@NonNull String, @NonNull java.util.List<android.content.pm.Checksum>) throws java.io.IOException;
    method public void addChildSessionId(int);
    method public void addChildSessionId(int);
    method public void close();
    method public void close();
    method public void commit(@NonNull android.content.IntentSender);
    method public void commit(@NonNull android.content.IntentSender);
+30 −10
Original line number Original line Diff line number Diff line
@@ -50,7 +50,11 @@ public final class ApkChecksum implements Parcelable {
     */
     */
    private final @NonNull Checksum mChecksum;
    private final @NonNull Checksum mChecksum;
    /**
    /**
     * For Installer-provided checksums, certificate of the Installer/AppStore.
     * For Installer-provided checksums, package name of the Installer.
     */
    private final @Nullable String mSourcePackageName;
    /**
     * For Installer-provided checksums, certificate of the Installer.
     */
     */
    private final @Nullable byte[] mSourceCertificate;
    private final @Nullable byte[] mSourceCertificate;


@@ -61,7 +65,7 @@ public final class ApkChecksum implements Parcelable {
     */
     */
    public ApkChecksum(@Nullable String splitName, @Checksum.Kind int kind,
    public ApkChecksum(@Nullable String splitName, @Checksum.Kind int kind,
            @NonNull byte[] value) {
            @NonNull byte[] value) {
        this(splitName, new Checksum(kind, value), (byte[]) null);
        this(splitName, new Checksum(kind, value), (String) null, (byte[]) null);
    }
    }


    /**
    /**
@@ -69,10 +73,10 @@ public final class ApkChecksum implements Parcelable {
     *
     *
     * @hide
     * @hide
     */
     */
    public ApkChecksum(@Nullable String splitName, @Checksum.Kind int kind,
    public ApkChecksum(@Nullable String splitName, @Checksum.Kind int kind, @NonNull byte[] value,
            @NonNull byte[] value, @Nullable Certificate sourceCertificate)
            @Nullable String sourcePackageName, @Nullable Certificate sourceCertificate)
            throws CertificateEncodingException {
            throws CertificateEncodingException {
        this(splitName, new Checksum(kind, value),
        this(splitName, new Checksum(kind, value), sourcePackageName,
                (sourceCertificate != null) ? sourceCertificate.getEncoded() : null);
                (sourceCertificate != null) ? sourceCertificate.getEncoded() : null);
    }
    }


@@ -136,19 +140,23 @@ public final class ApkChecksum implements Parcelable {
     *   Checksum for which split. Null indicates base.apk.
     *   Checksum for which split. Null indicates base.apk.
     * @param checksum
     * @param checksum
     *   Checksum.
     *   Checksum.
     * @param sourcePackageName
     *   For Installer-provided checksums, package name of the Installer.
     * @param sourceCertificate
     * @param sourceCertificate
     *   For Installer-provided checksums, certificate of the Installer/AppStore.
     *   For Installer-provided checksums, certificate of the Installer.
     * @hide
     * @hide
     */
     */
    @DataClass.Generated.Member
    @DataClass.Generated.Member
    public ApkChecksum(
    public ApkChecksum(
            @Nullable String splitName,
            @Nullable String splitName,
            @NonNull Checksum checksum,
            @NonNull Checksum checksum,
            @Nullable String sourcePackageName,
            @Nullable byte[] sourceCertificate) {
            @Nullable byte[] sourceCertificate) {
        this.mSplitName = splitName;
        this.mSplitName = splitName;
        this.mChecksum = checksum;
        this.mChecksum = checksum;
        com.android.internal.util.AnnotationValidations.validate(
        com.android.internal.util.AnnotationValidations.validate(
                NonNull.class, null, mChecksum);
                NonNull.class, null, mChecksum);
        this.mSourcePackageName = sourcePackageName;
        this.mSourceCertificate = sourceCertificate;
        this.mSourceCertificate = sourceCertificate;


        // onConstructed(); // You can define this method to get a callback
        // onConstructed(); // You can define this method to get a callback
@@ -162,6 +170,14 @@ public final class ApkChecksum implements Parcelable {
        return mSplitName;
        return mSplitName;
    }
    }


    /**
     * For Installer-provided checksums, package name of the Installer.
     */
    @DataClass.Generated.Member
    public @Nullable String getSourcePackageName() {
        return mSourcePackageName;
    }

    @Override
    @Override
    @DataClass.Generated.Member
    @DataClass.Generated.Member
    public void writeToParcel(@NonNull Parcel dest, int flags) {
    public void writeToParcel(@NonNull Parcel dest, int flags) {
@@ -170,10 +186,12 @@ public final class ApkChecksum implements Parcelable {


        byte flg = 0;
        byte flg = 0;
        if (mSplitName != null) flg |= 0x1;
        if (mSplitName != null) flg |= 0x1;
        if (mSourceCertificate != null) flg |= 0x4;
        if (mSourcePackageName != null) flg |= 0x4;
        if (mSourceCertificate != null) flg |= 0x8;
        dest.writeByte(flg);
        dest.writeByte(flg);
        if (mSplitName != null) dest.writeString(mSplitName);
        if (mSplitName != null) dest.writeString(mSplitName);
        dest.writeTypedObject(mChecksum, flags);
        dest.writeTypedObject(mChecksum, flags);
        if (mSourcePackageName != null) dest.writeString(mSourcePackageName);
        if (mSourceCertificate != null) dest.writeByteArray(mSourceCertificate);
        if (mSourceCertificate != null) dest.writeByteArray(mSourceCertificate);
    }
    }


@@ -191,12 +209,14 @@ public final class ApkChecksum implements Parcelable {
        byte flg = in.readByte();
        byte flg = in.readByte();
        String splitName = (flg & 0x1) == 0 ? null : in.readString();
        String splitName = (flg & 0x1) == 0 ? null : in.readString();
        Checksum checksum = (Checksum) in.readTypedObject(Checksum.CREATOR);
        Checksum checksum = (Checksum) in.readTypedObject(Checksum.CREATOR);
        byte[] sourceCertificate = (flg & 0x4) == 0 ? null : in.createByteArray();
        String sourcePackageName = (flg & 0x4) == 0 ? null : in.readString();
        byte[] sourceCertificate = (flg & 0x8) == 0 ? null : in.createByteArray();


        this.mSplitName = splitName;
        this.mSplitName = splitName;
        this.mChecksum = checksum;
        this.mChecksum = checksum;
        com.android.internal.util.AnnotationValidations.validate(
        com.android.internal.util.AnnotationValidations.validate(
                NonNull.class, null, mChecksum);
                NonNull.class, null, mChecksum);
        this.mSourcePackageName = sourcePackageName;
        this.mSourceCertificate = sourceCertificate;
        this.mSourceCertificate = sourceCertificate;


        // onConstructed(); // You can define this method to get a callback
        // onConstructed(); // You can define this method to get a callback
@@ -217,10 +237,10 @@ public final class ApkChecksum implements Parcelable {
    };
    };


    @DataClass.Generated(
    @DataClass.Generated(
            time = 1599845645160L,
            time = 1600407436287L,
            codegenVersion = "1.0.15",
            codegenVersion = "1.0.15",
            sourceFile = "frameworks/base/core/java/android/content/pm/ApkChecksum.java",
            sourceFile = "frameworks/base/core/java/android/content/pm/ApkChecksum.java",
            inputSignatures = "private final @android.annotation.Nullable java.lang.String mSplitName\nprivate final @android.annotation.NonNull android.content.pm.Checksum mChecksum\nprivate final @android.annotation.Nullable byte[] mSourceCertificate\npublic @android.content.pm.Checksum.Kind int getKind()\npublic @android.annotation.NonNull byte[] getValue()\npublic @android.annotation.Nullable byte[] getSourceCertificateBytes()\npublic @android.annotation.Nullable java.security.cert.Certificate getSourceCertificate()\nclass ApkChecksum extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genHiddenConstructor=true)")
            inputSignatures = "private final @android.annotation.Nullable java.lang.String mSplitName\nprivate final @android.annotation.NonNull android.content.pm.Checksum mChecksum\nprivate final @android.annotation.Nullable java.lang.String mSourcePackageName\nprivate final @android.annotation.Nullable byte[] mSourceCertificate\npublic @android.content.pm.Checksum.Kind int getKind()\npublic @android.annotation.NonNull byte[] getValue()\npublic @android.annotation.Nullable byte[] getSourceCertificateBytes()\npublic @android.annotation.Nullable java.security.cert.Certificate getSourceCertificate()\nclass ApkChecksum extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genHiddenConstructor=true)")
    @Deprecated
    @Deprecated
    private void __metadata() {}
    private void __metadata() {}


+23 −4
Original line number Original line Diff line number Diff line
@@ -32,14 +32,19 @@ import java.util.List;
 *
 *
 * @see PackageInstaller.Session#addChecksums(String, List)
 * @see PackageInstaller.Session#addChecksums(String, List)
 */
 */
@DataClass(genHiddenConstructor = true, genConstDefs = false)
@DataClass(genConstDefs = false)
public final class Checksum implements Parcelable {
public final class Checksum implements Parcelable {
    /**
    /**
     * Root SHA256 hash of a 4K Merkle tree computed over all file bytes.
     * Root SHA256 hash of a 4K Merkle tree computed over all file bytes.
     * <a href="https://source.android.com/security/apksigning/v4">See APK Signature Scheme V4</a>.
     * <a href="https://source.android.com/security/apksigning/v4">See APK Signature Scheme V4</a>.
     * <a href="https://git.kernel.org/pub/scm/fs/fscrypt/fscrypt.git/tree/Documentation/filesystems/fsverity.rst">See fs-verity</a>.
     * <a href="https://git.kernel.org/pub/scm/fs/fscrypt/fscrypt.git/tree/Documentation/filesystems/fsverity.rst">See fs-verity</a>.
     *
     *
     * Recommended for all new applications.
     * Can be used by kernel to enforce authenticity and integrity of the APK.
     * <a href="https://git.kernel.org/pub/scm/fs/fscrypt/fscrypt.git/tree/Documentation/filesystems/fsverity.rst#">See fs-verity for details</a>
     *
     * @see PackageManager#getChecksums
     * @see PackageManager#getChecksums
     * @see PackageInstaller.Session#addChecksums
     */
     */
    public static final int WHOLE_MERKLE_ROOT_4K_SHA256 = 0x00000001;
    public static final int WHOLE_MERKLE_ROOT_4K_SHA256 = 0x00000001;


@@ -47,20 +52,31 @@ public final class Checksum implements Parcelable {
     * MD5 hash computed over all file bytes.
     * MD5 hash computed over all file bytes.
     *
     *
     * @see PackageManager#getChecksums
     * @see PackageManager#getChecksums
     * @see PackageInstaller.Session#addChecksums
     * @deprecated Use SHA2 family of hashes (SHA256/SHA512) instead.
     *             MD5 is cryptographically broken and unsuitable for further use.
     *             Provided for completeness' sake and to support legacy usecases.
     */
     */
    @Deprecated
    public static final int WHOLE_MD5 = 0x00000002;
    public static final int WHOLE_MD5 = 0x00000002;


    /**
    /**
     * SHA1 hash computed over all file bytes.
     * SHA1 hash computed over all file bytes.
     *
     *
     * @see PackageManager#getChecksums
     * @see PackageManager#getChecksums
     * @see PackageInstaller.Session#addChecksums
     * @deprecated Use SHA2 family of hashes (SHA256/SHA512) instead.
     *             SHA1 is broken and should not be used.
     *             Provided for completeness' sake and to support legacy usecases.
     */
     */
    @Deprecated
    public static final int WHOLE_SHA1 = 0x00000004;
    public static final int WHOLE_SHA1 = 0x00000004;


    /**
    /**
     * SHA256 hash computed over all file bytes.
     * SHA256 hash computed over all file bytes.
     *
     *
     * @see PackageManager#getChecksums
     * @see PackageManager#getChecksums
     * @see PackageInstaller.Session#addChecksums
     */
     */
    public static final int WHOLE_SHA256 = 0x00000008;
    public static final int WHOLE_SHA256 = 0x00000008;


@@ -68,6 +84,7 @@ public final class Checksum implements Parcelable {
     * SHA512 hash computed over all file bytes.
     * SHA512 hash computed over all file bytes.
     *
     *
     * @see PackageManager#getChecksums
     * @see PackageManager#getChecksums
     * @see PackageInstaller.Session#addChecksums
     */
     */
    public static final int WHOLE_SHA512 = 0x00000010;
    public static final int WHOLE_SHA512 = 0x00000010;


@@ -77,6 +94,7 @@ public final class Checksum implements Parcelable {
     * <a href="https://source.android.com/security/apksigning/v2">See APK Signature Scheme V2</a>.
     * <a href="https://source.android.com/security/apksigning/v2">See APK Signature Scheme V2</a>.
     *
     *
     * @see PackageManager#getChecksums
     * @see PackageManager#getChecksums
     * @see PackageInstaller.Session#addChecksums
     */
     */
    public static final int PARTIAL_MERKLE_ROOT_1M_SHA256 = 0x00000020;
    public static final int PARTIAL_MERKLE_ROOT_1M_SHA256 = 0x00000020;


@@ -86,6 +104,7 @@ public final class Checksum implements Parcelable {
     * <a href="https://source.android.com/security/apksigning/v2">See APK Signature Scheme V2</a>.
     * <a href="https://source.android.com/security/apksigning/v2">See APK Signature Scheme V2</a>.
     *
     *
     * @see PackageManager#getChecksums
     * @see PackageManager#getChecksums
     * @see PackageInstaller.Session#addChecksums
     */
     */
    public static final int PARTIAL_MERKLE_ROOT_1M_SHA512 = 0x00000040;
    public static final int PARTIAL_MERKLE_ROOT_1M_SHA512 = 0x00000040;


@@ -113,6 +132,7 @@ public final class Checksum implements Parcelable {







    // Code below generated by codegen v1.0.15.
    // Code below generated by codegen v1.0.15.
    //
    //
    // DO NOT MODIFY!
    // DO NOT MODIFY!
@@ -133,7 +153,6 @@ public final class Checksum implements Parcelable {
     *   Checksum kind.
     *   Checksum kind.
     * @param value
     * @param value
     *   Checksum value.
     *   Checksum value.
     * @hide
     */
     */
    @DataClass.Generated.Member
    @DataClass.Generated.Member
    public Checksum(
    public Checksum(
@@ -214,10 +233,10 @@ public final class Checksum implements Parcelable {
    };
    };


    @DataClass.Generated(
    @DataClass.Generated(
            time = 1599845646883L,
            time = 1600717052366L,
            codegenVersion = "1.0.15",
            codegenVersion = "1.0.15",
            sourceFile = "frameworks/base/core/java/android/content/pm/Checksum.java",
            sourceFile = "frameworks/base/core/java/android/content/pm/Checksum.java",
            inputSignatures = "public static final  int WHOLE_MERKLE_ROOT_4K_SHA256\npublic static final  int WHOLE_MD5\npublic static final  int WHOLE_SHA1\npublic static final  int WHOLE_SHA256\npublic static final  int WHOLE_SHA512\npublic static final  int PARTIAL_MERKLE_ROOT_1M_SHA256\npublic static final  int PARTIAL_MERKLE_ROOT_1M_SHA512\nprivate final @android.content.pm.Checksum.Kind int mKind\nprivate final @android.annotation.NonNull byte[] mValue\nclass Checksum extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genHiddenConstructor=true, genConstDefs=false)")
            inputSignatures = "public static final  int WHOLE_MERKLE_ROOT_4K_SHA256\npublic static final @java.lang.Deprecated int WHOLE_MD5\npublic static final @java.lang.Deprecated int WHOLE_SHA1\npublic static final  int WHOLE_SHA256\npublic static final  int WHOLE_SHA512\npublic static final  int PARTIAL_MERKLE_ROOT_1M_SHA256\npublic static final  int PARTIAL_MERKLE_ROOT_1M_SHA512\nprivate final @android.content.pm.Checksum.Kind int mKind\nprivate final @android.annotation.NonNull byte[] mValue\nclass Checksum extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genConstDefs=false)")
    @Deprecated
    @Deprecated
    private void __metadata() {}
    private void __metadata() {}


+3 −0
Original line number Original line Diff line number Diff line
@@ -1227,7 +1227,10 @@ public class PackageInstaller {
         *                  IntentSender)}.
         *                  IntentSender)}.
         * @throws SecurityException if called after the session has been
         * @throws SecurityException if called after the session has been
         *                           committed or abandoned.
         *                           committed or abandoned.
         * @deprecated  use platform-enforced checksums e.g.
         *              {@link Checksum#WHOLE_MERKLE_ROOT_4K_SHA256}
         */
         */
        @Deprecated
        public void addChecksums(@NonNull String name, @NonNull List<Checksum> checksums)
        public void addChecksums(@NonNull String name, @NonNull List<Checksum> checksums)
                throws IOException {
                throws IOException {
            Objects.requireNonNull(name);
            Objects.requireNonNull(name);
+3 −0
Original line number Original line Diff line number Diff line
@@ -7873,6 +7873,9 @@ public abstract class PackageManager {
     * - enforced by installer.
     * - enforced by installer.
     * If caller needs a specific checksum kind, they can specify it as required.
     * If caller needs a specific checksum kind, they can specify it as required.
     *
     *
     * <b>Caution: Android can not verify installer-provided checksums. Make sure you specify
     * trusted installers.</b>
     *
     * @param packageName whose checksums to return.
     * @param packageName whose checksums to return.
     * @param includeSplits whether to include checksums for non-base splits.
     * @param includeSplits whether to include checksums for non-base splits.
     * @param required explicitly request the checksum kinds. Will incur significant
     * @param required explicitly request the checksum kinds. Will incur significant
Loading