Calculate verity hash tree.

Calculate verity hash tree in FilesystemVerifierAction based on configs
specified in protobuf, and write it to target partition before reading
from those blocks.

A new error code kVerityCalculationError was added to report error if
it fails.

Bug: 28171891
Test: update_engine_unittests

Change-Id: I492885a0655bf51043902f578720fffd87e6a3cf
diff --git a/Android.mk b/Android.mk
index e141ae1..ba66d67 100644
--- a/Android.mk
+++ b/Android.mk
@@ -109,8 +109,10 @@
     libbspatch \
     libbrotli \
     libpuffpatch \
+    libverity_tree \
     $(ue_update_metadata_protos_exported_static_libraries)
 ue_libpayload_consumer_exported_shared_libraries := \
+    libbase \
     libcrypto \
     $(ue_update_metadata_protos_exported_shared_libraries)
 
@@ -148,6 +150,7 @@
     payload_consumer/payload_metadata.cc \
     payload_consumer/payload_verifier.cc \
     payload_consumer/postinstall_runner_action.cc \
+    payload_consumer/verity_writer_android.cc \
     payload_consumer/xz_extent_writer.cc
 
 ifeq ($(local_use_fec),1)
@@ -941,6 +944,7 @@
     payload_consumer/file_writer_unittest.cc \
     payload_consumer/filesystem_verifier_action_unittest.cc \
     payload_consumer/postinstall_runner_action_unittest.cc \
+    payload_consumer/verity_writer_android_unittest.cc \
     payload_consumer/xz_extent_writer_unittest.cc \
     payload_generator/ab_generator_unittest.cc \
     payload_generator/blob_file_writer_unittest.cc \