brillo_update_payload: Add metadata_size_file flag

Add optional metadata_size_file flag to output metadata size to
the specified file.

BUG=b:24751934
TEST=brillo_update_payload with the new flag specified

Change-Id: Ic43dcadbb3624bdca824e55834b287151f00c75f
Reviewed-on: https://chromium-review.googlesource.com/304932
Commit-Ready: Jason Kusuma <jkusuma@chromium.org>
Tested-by: Jason Kusuma <jkusuma@chromium.org>
Reviewed-by: Alex Deymo <deymo@chromium.org>
Reviewed-by: Sen Jiang <senj@chromium.org>
diff --git a/host/brillo_update_payload b/host/brillo_update_payload
index 911bfae..7f08982 100755
--- a/host/brillo_update_payload
+++ b/host/brillo_update_payload
@@ -13,10 +13,12 @@
 #  sign        generate a signed payload
 #
 #  Generate command arguments:
-#  --payload       generated unsigned payload output file
-#  --source_image  if defined, generate a delta payload from the specified
-#                  image to the target_image
-#  --target_image  the target image that should be sent to clients
+#  --payload             generated unsigned payload output file
+#  --source_image        if defined, generate a delta payload from the specified
+#                        image to the target_image
+#  --target_image        the target image that should be sent to clients
+#  --metadata_size_file  if defined, generate a file containing the size of the payload
+#                        metadata in bytes to the specified file
 #
 #  Hash command arguments:
 #  --unsigned_payload    the input unsigned payload to generate the hash from
@@ -38,6 +40,9 @@
 #  --metadata_signature_file the metadata signature files in the following
 #                            format:
 #                            "metadata_signature1:metadata_signature2[:...]"
+#  --metadata_size_file      if defined, generate a file containing the size of
+#                            the signed payload metadata in bytes to the
+#                            specified file
 #  Note that the number of signature sizes and payload signatures have to match.
 
 # Load common CrOS utilities.  Inside the chroot this file is installed in
@@ -119,6 +124,8 @@
     "Path to the target image that should be sent to clients."
   DEFINE_string source_image "" \
     "Optional: Path to a source image. If specified, this makes a delta update."
+  DEFINE_string metadata_size_file "" \
+    "Optional: Path to output metadata size."
 fi
 if [[ "${COMMAND}" == "hash" || "${COMMAND}" == "sign" ]]; then
   DEFINE_string unsigned_payload "" "Path to the input unsigned payload."
@@ -140,6 +147,8 @@
   DEFINE_string payload_signature_file "" \
     "The payload signatures in the following format: \
 payload_signature1:payload_signature2[:...]"
+  DEFINE_string metadata_size_file "" \
+    "Optional: Path to output metadata size."
 fi
 DEFINE_string work_dir "/tmp" "Where to dump temporary files."
 
@@ -379,8 +388,12 @@
     GENERATOR_ARGS+=( --major_version="${FORCE_MAJOR_VERSION}" )
   fi
 
+  if [[ -n "${FLAGS_metadata_size_file}" ]]; then
+    GENERATOR_ARGS+=( --out_metadata_size_file="${FLAGS_metadata_size_file}" )
+  fi
+
   echo "Running delta_generator with args: ${GENERATOR_ARGS[@]}"
-    "${GENERATOR}" "${GENERATOR_ARGS[@]}"
+  "${GENERATOR}" "${GENERATOR_ARGS[@]}"
 
   echo "Done generating ${payload_type} update."
 }
@@ -438,12 +451,19 @@
 }
 
 cmd_sign() {
-  "${GENERATOR}" \
-      -in_file="${FLAGS_unsigned_payload}" \
-      -signature_size="${FLAGS_signature_size}" \
-      -signature_file="${FLAGS_payload_signature_file}" \
-      -metadata_signature_file="${FLAGS_metadata_signature_file}" \
-      -out_file="${FLAGS_payload}"
+  GENERATOR_ARGS=(
+    -in_file="${FLAGS_unsigned_payload}"
+    -signature_size="${FLAGS_signature_size}"
+    -signature_file="${FLAGS_payload_signature_file}"
+    -metadata_signature_file="${FLAGS_metadata_signature_file}"
+    -out_file="${FLAGS_payload}"
+  )
+
+  if [[ -n "${FLAGS_metadata_size_file}" ]]; then
+    GENERATOR_ARGS+=( --out_metadata_size_file="${FLAGS_metadata_size_file}" )
+  fi
+
+  "${GENERATOR}" "${GENERATOR_ARGS[@]}"
   echo "Done signing payload."
 }