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 Diff line number Diff line
@@ -11451,6 +11451,7 @@ package android.content.pm {
    method public int describeContents();
    method public int getKind();
    method @Nullable public java.security.cert.Certificate getSourceCertificate() throws java.security.cert.CertificateException;
    method @Nullable public String getSourcePackageName();
    method @Nullable public String getSplitName();
    method @NonNull public byte[] getValue();
    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 {
    ctor public Checksum(int, @NonNull byte[]);
    method public int describeContents();
    method public int getKind();
    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 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 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_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_SHA512 = 16; // 0x10
  }
@@ -11864,7 +11866,7 @@ package android.content.pm {
  public static class PackageInstaller.Session implements java.io.Closeable {
    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 close();
    method public void commit(@NonNull android.content.IntentSender);
+30 −10
Original line number Diff line number Diff line
@@ -50,7 +50,11 @@ public final class ApkChecksum implements Parcelable {
     */
    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;

@@ -61,7 +65,7 @@ public final class ApkChecksum implements Parcelable {
     */
    public ApkChecksum(@Nullable String splitName, @Checksum.Kind int kind,
            @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
     */
    public ApkChecksum(@Nullable String splitName, @Checksum.Kind int kind,
            @NonNull byte[] value, @Nullable Certificate sourceCertificate)
    public ApkChecksum(@Nullable String splitName, @Checksum.Kind int kind, @NonNull byte[] value,
            @Nullable String sourcePackageName, @Nullable Certificate sourceCertificate)
            throws CertificateEncodingException {
        this(splitName, new Checksum(kind, value),
        this(splitName, new Checksum(kind, value), sourcePackageName,
                (sourceCertificate != null) ? sourceCertificate.getEncoded() : null);
    }

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

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

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

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

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

@@ -191,12 +209,14 @@ public final class ApkChecksum implements Parcelable {
        byte flg = in.readByte();
        String splitName = (flg & 0x1) == 0 ? null : in.readString();
        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.mChecksum = checksum;
        com.android.internal.util.AnnotationValidations.validate(
                NonNull.class, null, mChecksum);
        this.mSourcePackageName = sourcePackageName;
        this.mSourceCertificate = sourceCertificate;

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

    @DataClass.Generated(
            time = 1599845645160L,
            time = 1600407436287L,
            codegenVersion = "1.0.15",
            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
    private void __metadata() {}

+23 −4
Original line number Diff line number Diff line
@@ -32,14 +32,19 @@ import java.util.List;
 *
 * @see PackageInstaller.Session#addChecksums(String, List)
 */
@DataClass(genHiddenConstructor = true, genConstDefs = false)
@DataClass(genConstDefs = false)
public final class Checksum implements Parcelable {
    /**
     * 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://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 PackageInstaller.Session#addChecksums
     */
    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.
     *
     * @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;

    /**
     * SHA1 hash computed over all file bytes.
     *
     * @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;

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

@@ -68,6 +84,7 @@ public final class Checksum implements Parcelable {
     * SHA512 hash computed over all file bytes.
     *
     * @see PackageManager#getChecksums
     * @see PackageInstaller.Session#addChecksums
     */
    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>.
     *
     * @see PackageManager#getChecksums
     * @see PackageInstaller.Session#addChecksums
     */
    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>.
     *
     * @see PackageManager#getChecksums
     * @see PackageInstaller.Session#addChecksums
     */
    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.
    //
    // DO NOT MODIFY!
@@ -133,7 +153,6 @@ public final class Checksum implements Parcelable {
     *   Checksum kind.
     * @param value
     *   Checksum value.
     * @hide
     */
    @DataClass.Generated.Member
    public Checksum(
@@ -214,10 +233,10 @@ public final class Checksum implements Parcelable {
    };

    @DataClass.Generated(
            time = 1599845646883L,
            time = 1600717052366L,
            codegenVersion = "1.0.15",
            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
    private void __metadata() {}

+3 −0
Original line number Diff line number Diff line
@@ -1227,7 +1227,10 @@ public class PackageInstaller {
         *                  IntentSender)}.
         * @throws SecurityException if called after the session has been
         *                           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)
                throws IOException {
            Objects.requireNonNull(name);
+3 −0
Original line number Diff line number Diff line
@@ -7873,6 +7873,9 @@ public abstract class PackageManager {
     * - enforced by installer.
     * 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 includeSplits whether to include checksums for non-base splits.
     * @param required explicitly request the checksum kinds. Will incur significant
Loading