AU: When applying delta locally, get source checksums

When applying a delta on the host, we need to calculate the original
checksums for the rootfs/kernel for the delta performer. This CL does
that.

Also:
- Log old/new checksums in performer
- Add base64 encode function to OmahaHashCalculator

BUG=8062
TEST=unittests; applied delta on host

Review URL: http://codereview.chromium.org/4042004

Change-Id: I953d7dd34cb65269e9b44e22c87a13a7f52e66d4
diff --git a/generate_delta_main.cc b/generate_delta_main.cc
index efeeb3b..39a0e08 100644
--- a/generate_delta_main.cc
+++ b/generate_delta_main.cc
@@ -76,7 +76,22 @@
     LOG(INFO) << "Setting up preferences under: " << FLAGS_prefs_dir;
     LOG_IF(ERROR, !prefs.Init(FilePath(FLAGS_prefs_dir)))
         << "Failed to initialize preferences.";
+    // Get original checksums
+    LOG(INFO) << "Calculating original checksums";
+    PartitionInfo kern_info, root_info;
+    CHECK(DeltaDiffGenerator::InitializePartitionInfo(true,  // is_kernel
+                                                      FLAGS_old_kernel,
+                                                      &kern_info));
+    CHECK(DeltaDiffGenerator::InitializePartitionInfo(false,  // is_kernel
+                                                      FLAGS_old_image,
+                                                      &root_info));
+    vector<char> kern_hash(kern_info.hash().begin(),
+                           kern_info.hash().end());
+    vector<char> root_hash(root_info.hash().begin(),
+                           root_info.hash().end());
     DeltaPerformer performer(&prefs);
+    performer.set_current_kernel_hash(&kern_hash);
+    performer.set_current_rootfs_hash(&root_hash);
     CHECK_EQ(performer.Open(FLAGS_old_image.c_str(), 0, 0), 0);
     CHECK(performer.OpenKernel(FLAGS_old_kernel.c_str()));
     vector<char> buf(1024 * 1024);