Implement FilePackage class

This is another implementation of the Package class. And we will later
need it when reading the package from FUSE.

Bug: 127071893
Test: unit tests pass, sideload a file package on sailfish
Change-Id: I3de5d5ef60b29c8b73517d6de3498459d7d95975
diff --git a/tests/component/verifier_test.cpp b/tests/component/verifier_test.cpp
index c26d76d..c904cd0 100644
--- a/tests/component/verifier_test.cpp
+++ b/tests/component/verifier_test.cpp
@@ -240,8 +240,10 @@
   void SetUp() override {
     std::vector<std::string> args = GetParam();
     std::string path = from_testdata_base(args[0]);
-    package_ = Package::CreateMemoryPackage(path, nullptr);
-    ASSERT_NE(nullptr, package_);
+    memory_package_ = Package::CreateMemoryPackage(path, nullptr);
+    ASSERT_NE(nullptr, memory_package_);
+    file_package_ = Package::CreateFilePackage(path, nullptr);
+    ASSERT_NE(nullptr, file_package_);
 
     for (auto it = ++args.cbegin(); it != args.cend(); ++it) {
       std::string public_key_file = from_testdata_base("testkey_" + *it + ".x509.pem");
@@ -250,7 +252,8 @@
     }
   }
 
-  std::unique_ptr<Package> package_;
+  std::unique_ptr<Package> memory_package_;
+  std::unique_ptr<Package> file_package_;
   std::vector<Certificate> certs_;
 };
 
@@ -304,11 +307,13 @@
 }
 
 TEST_P(VerifierSuccessTest, VerifySucceed) {
-  ASSERT_EQ(VERIFY_SUCCESS, verify_file(package_.get(), certs_));
+  ASSERT_EQ(VERIFY_SUCCESS, verify_file(memory_package_.get(), certs_));
+  ASSERT_EQ(VERIFY_SUCCESS, verify_file(file_package_.get(), certs_));
 }
 
 TEST_P(VerifierFailureTest, VerifyFailure) {
-  ASSERT_EQ(VERIFY_FAILURE, verify_file(package_.get(), certs_));
+  ASSERT_EQ(VERIFY_FAILURE, verify_file(memory_package_.get(), certs_));
+  ASSERT_EQ(VERIFY_FAILURE, verify_file(file_package_.get(), certs_));
 }
 
 INSTANTIATE_TEST_CASE_P(SingleKeySuccess, VerifierSuccessTest,