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

Commit 5fae7f39 authored by sourabh-nanoti's avatar sourabh-nanoti
Browse files

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: default avatarsourabh-nanoti <sourabhn@meta.com>
parent 3e77c6f3
Loading
Loading
Loading
Loading
+7 −2
Original line number Original line Diff line number Diff line
@@ -142,16 +142,21 @@ public abstract class SourceStampVerifier {


    private static SourceStampVerificationResult verify(
    private static SourceStampVerificationResult verify(
            RandomAccessFile apk, byte[] sourceStampCertificateDigest, byte[] manifestBytes) {
            RandomAccessFile apk, byte[] sourceStampCertificateDigest, byte[] manifestBytes) {
        SignatureInfo signatureInfo;
        try {
        try {
            SignatureInfo signatureInfo =
            signatureInfo =
                    ApkSigningBlockUtils.findSignature(apk, SOURCE_STAMP_BLOCK_ID);
                    ApkSigningBlockUtils.findSignature(apk, SOURCE_STAMP_BLOCK_ID);
        } catch (IOException | SignatureNotFoundException | RuntimeException e) {
            return SourceStampVerificationResult.notPresent();
        }
        try {
            Map<Integer, Map<Integer, byte[]>> signatureSchemeApkContentDigests =
            Map<Integer, Map<Integer, byte[]>> signatureSchemeApkContentDigests =
                    getSignatureSchemeApkContentDigests(apk, manifestBytes);
                    getSignatureSchemeApkContentDigests(apk, manifestBytes);
            return verify(
            return verify(
                    signatureInfo,
                    signatureInfo,
                    getSignatureSchemeDigests(signatureSchemeApkContentDigests),
                    getSignatureSchemeDigests(signatureSchemeApkContentDigests),
                    sourceStampCertificateDigest);
                    sourceStampCertificateDigest);
        } catch (IOException | SignatureNotFoundException | RuntimeException e) {
        } catch (IOException | RuntimeException e) {
            return SourceStampVerificationResult.notVerified();
            return SourceStampVerificationResult.notVerified();
        }
        }
    }
    }
+1 −1
Original line number Original line Diff line number Diff line
@@ -100,7 +100,7 @@ public class SourceStampVerifierTest {
        SourceStampVerificationResult result =
        SourceStampVerificationResult result =
                SourceStampVerifier.verify(mPrimaryApk.getAbsolutePath());
                SourceStampVerifier.verify(mPrimaryApk.getAbsolutePath());


        assertTrue(result.isPresent());
        assertFalse(result.isPresent());
        assertFalse(result.isVerified());
        assertFalse(result.isVerified());
        assertNull(result.getCertificate());
        assertNull(result.getCertificate());
    }
    }