diff options
author | Randall Spangler <rspangler@chromium.org> | 2014-10-31 11:19:14 -0700 |
---|---|---|
committer | chrome-internal-fetch <chrome-internal-fetch@google.com> | 2014-11-05 06:05:16 +0000 |
commit | c0ce70b468cc469556d0f43c63a6d63ec8280c99 (patch) | |
tree | df3fe9fd4aee85563ce8710d34b33c118fe0420d /tests/vb2_common2_tests.c | |
parent | 3c6ec76e32ceea9d62ca4f7bca537fdcd4b5f387 (diff) | |
download | vboot-c0ce70b468cc469556d0f43c63a6d63ec8280c99.tar.gz |
vboot2: add support for new vb2_signature2 struct
And assocated unit tests.
BUG=chromium:423882
BRANCH=none
TEST=VBOOT2=1 make runtests
Change-Id: I37fccafd8ccee5c0d55e3746c1611a8dff73145a
Signed-off-by: Randall Spangler <rspangler@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/226939
Reviewed-by: Daisuke Nojiri <dnojiri@chromium.org>
Diffstat (limited to 'tests/vb2_common2_tests.c')
-rw-r--r-- | tests/vb2_common2_tests.c | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/tests/vb2_common2_tests.c b/tests/vb2_common2_tests.c index 52a4bd76..a4760b2e 100644 --- a/tests/vb2_common2_tests.c +++ b/tests/vb2_common2_tests.c @@ -235,6 +235,73 @@ static void test_verify_data(struct vb2_packed_key *key1, free(sig2); } +static void test_verify_signature(const struct vb2_packed_key *key1, + const struct vb2_signature *sig1) +{ + struct vb2_public_key pubk; + struct vb2_packed_key2 *key2; + struct vb2_signature2 *sig2; + uint8_t *buf2good, *buf2; + uint32_t size; + + /* Unpack and convert the public key */ + TEST_SUCC(vb2_unpack_key2(&pubk, (uint8_t *)key1, + key1->key_offset + key1->key_size), + "verify_sig vb2_unpack_key2() passthru"); + key2 = vb2_convert_packed_key2(key1, "Test key", &size); + TEST_PTR_NEQ(key2, 0, "verify_sig convert pub key"); + + buf2good = (uint8_t *) + vb2_convert_signature2(sig1, "test desc", key2, &size); + buf2 = malloc(size); + sig2 = (struct vb2_signature2 *)buf2; + + memcpy(buf2, buf2good, size); + TEST_PTR_NEQ(sig1, 0, "verify_sig convert signature"); + TEST_SUCC(vb2_verify_signature2(sig2, size), "verify_sig ok"); + sig2->c.magic = VB2_MAGIC_PACKED_KEY2; + TEST_EQ(vb2_verify_signature2(sig2, size), VB2_ERROR_SIG_MAGIC, + "verify_sig magic"); + + memcpy(buf2, buf2good, size); + sig2->c.total_size += 4; + TEST_EQ(vb2_verify_signature2(sig2, size), VB2_ERROR_COMMON_TOTAL_SIZE, + "verify_sig common header"); + + memcpy(buf2, buf2good, size); + sig2->c.struct_version_minor++; + TEST_SUCC(vb2_verify_signature2(sig2, size), "verify_sig minor ver"); + sig2->c.struct_version_major++; + TEST_EQ(vb2_verify_signature2(sig2, size), VB2_ERROR_SIG_VERSION, + "verify_sig major ver"); + + memcpy(buf2, buf2good, size); + sig2->c.fixed_size -= 4; + sig2->c.desc_size += 4; + TEST_EQ(vb2_verify_signature2(sig2, size), VB2_ERROR_SIG_HEADER_SIZE, + "verify_sig header size"); + + memcpy(buf2, buf2good, size); + sig2->sig_size += 4; + TEST_EQ(vb2_verify_signature2(sig2, size), VB2_ERROR_COMMON_MEMBER_SIZE, + "verify_sig sig size"); + + memcpy(buf2, buf2good, size); + sig2->sig_alg = VB2_SIG_INVALID; + TEST_EQ(vb2_verify_signature2(sig2, size), VB2_ERROR_SIG_ALGORITHM, + "verify_sig sig alg"); + + memcpy(buf2, buf2good, size); + sig2->sig_alg = (sig2->sig_alg == VB2_SIG_NONE ? + VB2_SIG_RSA1024 : VB2_SIG_NONE); + TEST_EQ(vb2_verify_signature2(sig2, size), VB2_ERROR_SIG_SIZE, + "verify_sig sig size"); + + free(buf2); + free(buf2good); + free(key2); +} + int test_algorithm(int key_algorithm, const char *keys_dir) { char filename[1024]; @@ -272,6 +339,7 @@ int test_algorithm(int key_algorithm, const char *keys_dir) test_unpack_key(key1); test_unpack_key2(key1); test_verify_data(key1, sig); + test_verify_signature(key1, sig); if (key1) free(key1); |