Add more vboot common tests

BUG=chromium-os:38139
BRANCH=none
TEST=make runtests

Change-Id: Iad795956c1bb7f6444d6cce0bb618687e26d6025
Signed-off-by: Randall Spangler <rspangler@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/42052
Reviewed-by: Bill Richardson <wfrichar@chromium.org>
diff --git a/tests/vboot_common2_tests.c b/tests/vboot_common2_tests.c
index f2ed526..b154e50 100644
--- a/tests/vboot_common2_tests.c
+++ b/tests/vboot_common2_tests.c
@@ -96,6 +96,9 @@
 	GetSignatureData(sig)[0] ^= 0x5A;
 	TEST_EQ(VerifyDigest(digest, sig, rsa), 1, "VerifyDigest() wrong sig");
 
+	sig->sig_size = 1;
+	TEST_EQ(VerifyDigest(digest, sig, rsa), 1, "VerifyDigest() sig size");
+
 	RSAPublicKeyFree(rsa);
 	free(sig);
 	free(digest);
@@ -135,6 +138,8 @@
 		"VerifyKernelPreamble() ok using key");
 	TEST_NEQ(VerifyKernelPreamble(hdr, hsize - 1, rsa), 0,
 		 "VerifyKernelPreamble() size--");
+	TEST_NEQ(VerifyKernelPreamble(hdr, 4, rsa), 0,
+		 "VerifyKernelPreamble() size tiny");
 	TEST_EQ(VerifyKernelPreamble(hdr, hsize + 1, rsa), 0,
 		"VerifyKernelPreamble() size++");
 
diff --git a/tests/vboot_common3_tests.c b/tests/vboot_common3_tests.c
index ce818a4..69c54a8 100644
--- a/tests/vboot_common3_tests.c
+++ b/tests/vboot_common3_tests.c
@@ -113,6 +113,12 @@
   TEST_NEQ(KeyBlockVerify(h, hsize, public_key, 0), 0,
            "KeyBlockVerify() sig mismatch");
 
+  Memcpy(h, hdr, hsize);
+  //ReChecksumKeyBlock(h);
+  h->key_block_checksum.data_size = h->key_block_size + 1;
+  TEST_NEQ(KeyBlockVerify(h, hsize, public_key, 1), 0,
+           "KeyBlockVerify() checksum data past end of block");
+
   /* Check that we signed header and data key */
   Memcpy(h, hdr, hsize);
   h->key_block_checksum.data_size = 4;
@@ -128,6 +134,10 @@
   TEST_NEQ(KeyBlockVerify(h, hsize, NULL, 1), 0,
            "KeyBlockVerify() data key off end");
 
+  /* Corner cases for error checking */
+  TEST_NEQ(KeyBlockVerify(NULL, 4, NULL, 1), 0,
+	  "KeyBlockVerify size too small");
+
   /* TODO: verify parser can support a bigger header (i.e., one where
    * data_key.key_offset is bigger than expected). */
 
@@ -169,6 +179,8 @@
 
   TEST_EQ(VerifyFirmwarePreamble(hdr, hsize, rsa), 0,
           "VerifyFirmwarePreamble() ok using key");
+  TEST_NEQ(VerifyFirmwarePreamble(hdr, 4, rsa), 0,
+           "VerifyFirmwarePreamble() size tiny");
   TEST_NEQ(VerifyFirmwarePreamble(hdr, hsize - 1, rsa), 0,
            "VerifyFirmwarePreamble() size--");
   TEST_EQ(VerifyFirmwarePreamble(hdr, hsize + 1, rsa), 0,
diff --git a/tests/vboot_common_tests.c b/tests/vboot_common_tests.c
index f36ec76..73cbeb5 100644
--- a/tests/vboot_common_tests.c
+++ b/tests/vboot_common_tests.c
@@ -100,6 +100,15 @@
 			"MemberInside data before parent");
 		TEST_EQ(VerifyMemberInside(p, 20, p, 4, 4, 17), 1,
 			"MemberInside data too big");
+		TEST_EQ(VerifyMemberInside(p, (uint64_t)-1,
+					   p+(uint64_t)-10, 12, 5, 0), 1,
+			"MemberInside wraparound 1");
+		TEST_EQ(VerifyMemberInside(p, (uint64_t)-1,
+					   p+(uint64_t)-10, 5, 12, 0), 1,
+			"MemberInside wraparound 2");
+		TEST_EQ(VerifyMemberInside(p, (uint64_t)-1,
+					   p+(uint64_t)-10, 5, 0, 12), 1,
+			"MemberInside wraparound 3");
 	}
 
 	{
@@ -214,6 +223,9 @@
 	TEST_EQ(d->lk_call_count, 0, "VbSharedDataInit lk_call_count");
 	TEST_EQ(d->kernel_version_lowest, 0,
 		"VbSharedDataInit kernel_version_lowest");
+
+	TEST_NEQ(VBOOT_SUCCESS, VbSharedDataSetKernelKey(NULL, NULL),
+		 "VbSharedDataSetKernelKey null");
 }
 
 /* disable MSVC warnings on unused arguments */