Create a wrapper class for update package

Creates a new class handle the package in memory and package read from fd.
Define the new interface functions, and make approximate changes to the
verify and install functions.

Bug: 127071893
Test: unit tests pass, sideload a package
Change-Id: I66ab00654df92471184536fd147b237a86e9c5b5
diff --git a/recovery.cpp b/recovery.cpp
index 90c8487..2c9f9de 100644
--- a/recovery.cpp
+++ b/recovery.cpp
@@ -64,6 +64,7 @@
 #include "otautil/error_code.h"
 #include "otautil/paths.h"
 #include "otautil/sysutil.h"
+#include "package.h"
 #include "roots.h"
 #include "screen_ui.h"
 #include "ui.h"
@@ -517,13 +518,15 @@
 // 1. verify the package.
 // 2. check metadata (ota-type, pre-device and serial number if having one).
 static bool CheckWipePackage(const std::string& wipe_package) {
-  if (!verify_package(reinterpret_cast<const unsigned char*>(wipe_package.data()),
-                      wipe_package.size())) {
+  auto package = Package::CreateMemoryPackage(
+      std::vector<uint8_t>(wipe_package.begin(), wipe_package.end()), nullptr);
+
+  if (!package || !verify_package(package.get())) {
     LOG(ERROR) << "Failed to verify package";
     return false;
   }
 
-  // Extract metadata
+  // TODO(xunchang) get zip archive from package.
   ZipArchiveHandle zip;
   if (auto err =
           OpenArchiveFromMemory(const_cast<void*>(static_cast<const void*>(&wipe_package[0])),