From 5fae7f3900a42fc91affdd951978b6099a13c3f4 Mon Sep 17 00:00:00 2001 From: sourabh-nanoti Date: Wed, 21 Jun 2023 21:16:22 -0700 Subject: [PATCH] SourceStampVerification Return more specific error code when verification fails Summary: Upstream from Meta If the source stamp tag is not present, SignatureNotFoundException is thrown. In such cases , it is better to return with SourceStampVerificationResult.notPresent() instead of SourceStampVerificationResult.notVerified() Also modified Android platform core tests (APCT) to reflect this change Test: Verified using Android platform core tests (APCT) All other tests pass successfully Reviewers: Subscribers: Tasks: Tags: Change-Id: Ifb4b05b6c4a18646cb72fbdc03c529e80f798b21 Signed-off-by: sourabh-nanoti --- core/java/android/util/apk/SourceStampVerifier.java | 9 +++++++-- .../src/android/util/apk/SourceStampVerifierTest.java | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/core/java/android/util/apk/SourceStampVerifier.java b/core/java/android/util/apk/SourceStampVerifier.java index f9e312146ccf0..11d7a005a6479 100644 --- a/core/java/android/util/apk/SourceStampVerifier.java +++ b/core/java/android/util/apk/SourceStampVerifier.java @@ -142,16 +142,21 @@ public abstract class SourceStampVerifier { private static SourceStampVerificationResult verify( RandomAccessFile apk, byte[] sourceStampCertificateDigest, byte[] manifestBytes) { + SignatureInfo signatureInfo; try { - SignatureInfo signatureInfo = + signatureInfo = ApkSigningBlockUtils.findSignature(apk, SOURCE_STAMP_BLOCK_ID); + } catch (IOException | SignatureNotFoundException | RuntimeException e) { + return SourceStampVerificationResult.notPresent(); + } + try { Map> signatureSchemeApkContentDigests = getSignatureSchemeApkContentDigests(apk, manifestBytes); return verify( signatureInfo, getSignatureSchemeDigests(signatureSchemeApkContentDigests), sourceStampCertificateDigest); - } catch (IOException | SignatureNotFoundException | RuntimeException e) { + } catch (IOException | RuntimeException e) { return SourceStampVerificationResult.notVerified(); } } diff --git a/core/tests/coretests/src/android/util/apk/SourceStampVerifierTest.java b/core/tests/coretests/src/android/util/apk/SourceStampVerifierTest.java index bc0bddba2f207..e0c583ddc9787 100644 --- a/core/tests/coretests/src/android/util/apk/SourceStampVerifierTest.java +++ b/core/tests/coretests/src/android/util/apk/SourceStampVerifierTest.java @@ -100,7 +100,7 @@ public class SourceStampVerifierTest { SourceStampVerificationResult result = SourceStampVerifier.verify(mPrimaryApk.getAbsolutePath()); - assertTrue(result.isPresent()); + assertFalse(result.isPresent()); assertFalse(result.isVerified()); assertNull(result.getCertificate()); }