apkverify:Test apk digest computation

Test: atest libapkverify.test
Change-Id: I33ade0f39f28494f6a0f7ed0cb324466ed2ae495
diff --git a/libs/apkverify/src/sigutil.rs b/libs/apkverify/src/sigutil.rs
index 72c5c1a..1d1534c 100644
--- a/libs/apkverify/src/sigutil.rs
+++ b/libs/apkverify/src/sigutil.rs
@@ -187,11 +187,11 @@
 
     // v2/v3 digests are computed after prepending "header" byte and "size" info.
     fn digest(&self, data: &[u8], header: &[u8], size: u32) -> Result<DigestBytes> {
-        let mut ctx = Hasher::new(self.algorithm)?;
-        ctx.update(header)?;
-        ctx.update(&size.to_le_bytes())?;
-        ctx.update(data)?;
-        Ok(ctx.finish()?)
+        let mut hasher = Hasher::new(self.algorithm)?;
+        hasher.update(header)?;
+        hasher.update(&size.to_le_bytes())?;
+        hasher.update(data)?;
+        Ok(hasher.finish()?)
     }
 }
 
@@ -313,6 +313,8 @@
     use std::fs::File;
     use std::mem::size_of_val;
 
+    use crate::v3::to_hex_string;
+
     const CENTRAL_DIRECTORY_HEADER_SIGNATURE: u32 = 0x02014b50;
 
     #[test]
@@ -345,4 +347,15 @@
             (apk_sections.eocd_offset + apk_sections.eocd_size) as u64
         );
     }
+
+    #[test]
+    fn test_apk_digest() {
+        let apk_file = File::open("tests/data/v3-only-with-dsa-sha256-1024.apk").unwrap();
+        let mut apk_sections = ApkSections::new(apk_file).unwrap();
+        let digest = apk_sections.compute_digest(SIGNATURE_DSA_WITH_SHA256).unwrap();
+        assert_eq!(
+            "0DF2426EA33AEDAF495D88E5BE0C6A1663FF0A81C5ED12D5B2929AE4B4300F2F",
+            to_hex_string(&digest[..])
+        );
+    }
 }
diff --git a/libs/apkverify/src/v3.rs b/libs/apkverify/src/v3.rs
index 7533b3b..876e98b 100644
--- a/libs/apkverify/src/v3.rs
+++ b/libs/apkverify/src/v3.rs
@@ -299,7 +299,7 @@
 }
 
 #[inline]
-fn to_hex_string(buf: &[u8]) -> String {
+pub(crate) fn to_hex_string(buf: &[u8]) -> String {
     buf.iter().map(|b| format!("{:02X}", b)).collect()
 }