[hex] Use libhex to encode hex string in avmd and apexutil

Bug: 239413416
Test: atest avmdtool_tests libapexutil_rust.test
Change-Id: I58fcc32f62bea1cd34b171ac336a1ed13f5735b8
diff --git a/avmd/Android.bp b/avmd/Android.bp
index 6d91b59..0b87a7b 100644
--- a/avmd/Android.bp
+++ b/avmd/Android.bp
@@ -9,8 +9,8 @@
     srcs: ["src/lib.rs"],
     prefer_rlib: true,
     rustlibs: [
+        "libhex",
         "libserde",
-        "libapexutil_rust", // TODO(b/239413416): Remove this after adding hex
         "libapkverify",
     ],
 }
diff --git a/avmd/src/avmd.rs b/avmd/src/avmd.rs
index 05fc201..cb02f39 100644
--- a/avmd/src/avmd.rs
+++ b/avmd/src/avmd.rs
@@ -18,7 +18,6 @@
     string::{String, ToString},
     vec::Vec,
 };
-use apexutil::to_hex_string;
 use apkverify::SignatureAlgorithmID;
 use core::fmt;
 use serde::{Deserialize, Serialize};
@@ -106,7 +105,7 @@
         writeln!(f, "  VBMeta descriptor:")?;
         writeln!(f, "    namespace:             {}", self.resource.namespace)?;
         writeln!(f, "    name:                  {}", self.resource.name)?;
-        writeln!(f, "    vbmeta digest:         {}", to_hex_string(&self.vbmeta_digest))?;
+        writeln!(f, "    vbmeta digest:         {}", hex::encode(&self.vbmeta_digest))?;
         Ok(())
     }
 }
@@ -132,7 +131,7 @@
         writeln!(f, "    namespace:             {}", self.resource.namespace)?;
         writeln!(f, "    name:                  {}", self.resource.name)?;
         writeln!(f, "    Signing algorithm ID:  {:#04x}", self.signature_algorithm_id.to_u32())?;
-        writeln!(f, "    APK digest:            {}", to_hex_string(&self.apk_digest))?;
+        writeln!(f, "    APK digest:            {}", hex::encode(&self.apk_digest))?;
         Ok(())
     }
 }
diff --git a/libs/apexutil/Android.bp b/libs/apexutil/Android.bp
index 3bdfc5f..4a4a673 100644
--- a/libs/apexutil/Android.bp
+++ b/libs/apexutil/Android.bp
@@ -27,6 +27,9 @@
     prefer_rlib: true,
     test_suites: ["general-tests"],
     data: ["tests/data/*"],
+    rustlibs: [
+        "libhex",
+    ],
     target: {
         host: {
             // TODO(b/204562227): remove once the build does this automatically
diff --git a/libs/apexutil/src/lib.rs b/libs/apexutil/src/lib.rs
index 999f16d..698d93a 100644
--- a/libs/apexutil/src/lib.rs
+++ b/libs/apexutil/src/lib.rs
@@ -101,11 +101,6 @@
     Ok(vbmeta.hash().ok_or(ApexVerificationError::ApexPubkeyMistmatch)?.to_vec())
 }
 
-/// Converts the buffer to a Hex String
-pub fn to_hex_string(buf: &[u8]) -> String {
-    buf.iter().map(|b| format!("{:02x}", b)).collect()
-}
-
 fn get_public_key_and_image_info(apex_file: &File) -> Result<(Vec<u8>, u64, u64), ApexParseError> {
     let mut z = ZipArchive::new(apex_file).map_err(|err| match err {
         ZipError::Io(err) => ApexParseError::Io(err),
@@ -149,7 +144,7 @@
         let res = verify("tests/data/test.apex").unwrap();
         // The expected hex is generated when we ran the method the first time.
         assert_eq!(
-            to_hex_string(&res.root_digest),
+            hex::encode(&res.root_digest),
             "fe11ab17da0a3a738b54bdc3a13f6139cbdf91ec32f001f8d4bbbf8938e04e39"
         );
     }
@@ -158,7 +153,7 @@
     fn payload_vbmeta_has_valid_image_hash() {
         let result = get_payload_vbmeta_image_hash("tests/data/test.apex").unwrap();
         assert_eq!(
-            to_hex_string(&result),
+            hex::encode(&result),
             "296e32a76544de9da01713e471403ab4667705ad527bb4f1fac0cf61e7ce122d"
         );
     }