diff options
author | Joel Kitching <kitching@google.com> | 2019-09-04 15:52:25 +0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2019-10-29 21:27:35 +0000 |
commit | 3d8dcc853a98bb8aae91d9a30862541a38581b2d (patch) | |
tree | 934ad41cc209cc3161e2fa3581e8f20298107329 | |
parent | 6d43a1925a3f88b4fb8ac3fc9dcfc42ccd934063 (diff) | |
download | vboot-3d8dcc853a98bb8aae91d9a30862541a38581b2d.tar.gz |
vboot: keep const and non-const signature and key accessors
Keep const (default) and non-const (_mutable suffix) versions
of `data` field accessors for vb2_signature and vb2_packed_key.
No need for separate 2packed_key.c file -- just static inline
the functions.
vb2_verify_packed_key_inside should return type vb2_error_t.
BUG=b:124141368, chromium:968464
TEST=make clean && make runtests
BRANCH=none
Change-Id: I96722a746f26abbb6e19a365ce74f0bfda0da381
Signed-off-by: Joel Kitching <kitching@google.com>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/vboot_reference/+/1786386
Tested-by: Joel Kitching <kitching@chromium.org>
Commit-Queue: Joel Kitching <kitching@chromium.org>
Reviewed-by: Julius Werner <jwerner@chromium.org>
-rw-r--r-- | Makefile | 1 | ||||
-rw-r--r-- | firmware/2lib/2packed_key.c | 22 | ||||
-rw-r--r-- | firmware/2lib/include/2common.h | 33 | ||||
-rw-r--r-- | firmware/lib/vboot_common.c | 4 | ||||
-rw-r--r-- | firmware/lib20/common.c | 3 | ||||
-rw-r--r-- | firmware/lib20/kernel.c | 7 | ||||
-rw-r--r-- | host/lib/host_key2.c | 7 | ||||
-rw-r--r-- | host/lib/host_signature.c | 2 | ||||
-rw-r--r-- | host/lib/host_signature2.c | 8 | ||||
-rw-r--r-- | tests/vb20_common2_tests.c | 2 | ||||
-rw-r--r-- | tests/vb20_common3_tests.c | 4 | ||||
-rw-r--r-- | tests/vboot_common_tests.c | 3 |
12 files changed, 48 insertions, 48 deletions
@@ -359,7 +359,6 @@ FWLIB2X_SRCS = \ firmware/2lib/2gbb.c \ firmware/2lib/2misc.c \ firmware/2lib/2nvstorage.c \ - firmware/2lib/2packed_key.c \ firmware/2lib/2rsa.c \ firmware/2lib/2secdata_firmware.c \ firmware/2lib/2secdata_fwmp.c \ diff --git a/firmware/2lib/2packed_key.c b/firmware/2lib/2packed_key.c deleted file mode 100644 index 00262866..00000000 --- a/firmware/2lib/2packed_key.c +++ /dev/null @@ -1,22 +0,0 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - * - * Packed key related functions. - */ - -#include "2common.h" - -const uint8_t *vb2_packed_key_data(const struct vb2_packed_key *key) -{ - return (const uint8_t *)key + key->key_offset; -} - -int vb2_verify_packed_key_inside(const void *parent, - uint32_t parent_size, - const struct vb2_packed_key *key) -{ - return vb2_verify_member_inside(parent, parent_size, - key, sizeof(*key), - key->key_offset, key->key_size); -} diff --git a/firmware/2lib/include/2common.h b/firmware/2lib/include/2common.h index cf5b57ea..6c5563a6 100644 --- a/firmware/2lib/include/2common.h +++ b/firmware/2lib/include/2common.h @@ -286,7 +286,17 @@ vb2_error_t vb2_verify_member_inside(const void *parent, size_t parent_size, /* * Helper function to get data pointed to by a public key. */ -const uint8_t *vb2_packed_key_data(const struct vb2_packed_key *key); +static inline uint8_t *vb2_packed_key_data_mutable( + struct vb2_packed_key *key) +{ + return (uint8_t *)key + key->key_offset; +} + +static inline const uint8_t *vb2_packed_key_data( + const struct vb2_packed_key *key) +{ + return (const uint8_t *)key + key->key_offset; +} /** * Verify a packed key is fully contained in its parent data @@ -296,18 +306,31 @@ const uint8_t *vb2_packed_key_data(const struct vb2_packed_key *key); * @param key Packed key pointer * @return VB2_SUCCESS, or non-zero if error. */ -int vb2_verify_packed_key_inside(const void *parent, - uint32_t parent_size, - const struct vb2_packed_key *key); +static inline vb2_error_t vb2_verify_packed_key_inside( + const void *parent, + uint32_t parent_size, + const struct vb2_packed_key *key) +{ + return vb2_verify_member_inside(parent, parent_size, + key, sizeof(*key), + key->key_offset, key->key_size); +} /* * Helper functions to get data pointed to by a public key or signature. */ -static inline uint8_t *vb2_signature_data(struct vb2_signature *sig) +static inline uint8_t *vb2_signature_data_mutable( + struct vb2_signature *sig) { return (uint8_t *)sig + sig->sig_offset; } +static inline const uint8_t *vb2_signature_data( + const struct vb2_signature *sig) +{ + return (const uint8_t *)sig + sig->sig_offset; +} + /** * Verify a signature is fully contained in its parent data * diff --git a/firmware/lib/vboot_common.c b/firmware/lib/vboot_common.c index 88385c74..31e2bb64 100644 --- a/firmware/lib/vboot_common.c +++ b/firmware/lib/vboot_common.c @@ -75,7 +75,9 @@ int PublicKeyCopy(struct vb2_packed_key *dest, const struct vb2_packed_key *src) dest->key_size = src->key_size; dest->algorithm = src->algorithm; dest->key_version = src->key_version; - memcpy(GetPublicKeyData(dest), GetPublicKeyDataC(src), src->key_size); + memcpy(vb2_packed_key_data_mutable(dest), + vb2_packed_key_data(src), + src->key_size); return 0; } diff --git a/firmware/lib20/common.c b/firmware/lib20/common.c index f1364c7a..6a6eff32 100644 --- a/firmware/lib20/common.c +++ b/firmware/lib20/common.c @@ -15,7 +15,8 @@ vb2_error_t vb2_verify_digest(const struct vb2_public_key *key, struct vb2_signature *sig, const uint8_t *digest, const struct vb2_workbuf *wb) { - uint8_t *sig_data = vb2_signature_data(sig); + /* A signature is destroyed in the process of being verified. */ + uint8_t *sig_data = vb2_signature_data_mutable(sig); if (sig->sig_size != vb2_rsa_sig_size(key->sig_alg)) { VB2_DEBUG("Wrong data signature size for algorithm, " diff --git a/firmware/lib20/kernel.c b/firmware/lib20/kernel.c index 172f7ffb..eff35bc4 100644 --- a/firmware/lib20/kernel.c +++ b/firmware/lib20/kernel.c @@ -14,11 +14,6 @@ #include "2sysincludes.h" #include "vb2_common.h" -static const uint8_t *vb2_signature_data_const(const struct vb2_signature *sig) -{ - return (uint8_t *)sig + sig->sig_offset; -} - /** * Returns non-zero if the kernel needs to have a valid signature, instead of * just a valid hash. @@ -81,7 +76,7 @@ vb2_error_t vb2_verify_keyblock_hash(const struct vb2_keyblock *block, if (rv) return rv; - if (vb2_safe_memcmp(vb2_signature_data_const(sig), digest, + if (vb2_safe_memcmp(vb2_signature_data(sig), digest, digest_size) != 0) { VB2_DEBUG("Invalid keyblock hash.\n"); return VB2_ERROR_KEYBLOCK_SIG_INVALID; diff --git a/host/lib/host_key2.c b/host/lib/host_key2.c index fa97f9fa..705576b3 100644 --- a/host/lib/host_key2.c +++ b/host/lib/host_key2.c @@ -196,8 +196,9 @@ vb2_error_t vb2_copy_packed_key(struct vb2_packed_key *dest, dest->key_size = src->key_size; dest->algorithm = src->algorithm; dest->key_version = src->key_version; - memcpy((uint8_t *)vb2_packed_key_data(dest), - vb2_packed_key_data(src), src->key_size); + memcpy(vb2_packed_key_data_mutable(dest), + vb2_packed_key_data(src), + src->key_size); return VB2_SUCCESS; } @@ -254,7 +255,7 @@ struct vb2_packed_key *vb2_read_packed_keyb(const char *filename, free(key_data); return NULL; } - memcpy((uint8_t *)vb2_packed_key_data(key), key_data, key_size); + memcpy(vb2_packed_key_data_mutable(key), key_data, key_size); free(key_data); return key; diff --git a/host/lib/host_signature.c b/host/lib/host_signature.c index 0c5900ec..8cea9f4a 100644 --- a/host/lib/host_signature.c +++ b/host/lib/host_signature.c @@ -155,7 +155,7 @@ struct vb2_signature *vb2_external_signature(const uint8_t *data, uint32_t size, /* Sign the signature_digest into our output buffer */ rv = sign_external(signature_digest_len, /* Input length */ signature_digest, /* Input data */ - vb2_signature_data(sig), /* Output sig */ + vb2_signature_data_mutable(sig), /* Output sig */ sig_size, /* Max Output sig size */ key_file, /* Key file to use */ external_signer); /* External cmd to invoke */ diff --git a/host/lib/host_signature2.c b/host/lib/host_signature2.c index 2105bd90..30ef1b24 100644 --- a/host/lib/host_signature2.c +++ b/host/lib/host_signature2.c @@ -58,8 +58,8 @@ vb2_error_t vb2_copy_signature(struct vb2_signature *dest, dest->sig_size = src->sig_size; dest->data_size = src->data_size; - memcpy(vb2_signature_data(dest), - vb2_signature_data((struct vb2_signature *)src), + memcpy(vb2_signature_data_mutable(dest), + vb2_signature_data(src), src->sig_size); return VB2_SUCCESS; @@ -77,7 +77,7 @@ struct vb2_signature *vb2_sha512_signature(const uint8_t *data, uint32_t size) if (!sig) return NULL; - memcpy(vb2_signature_data(sig), digest, VB2_SHA512_DIGEST_SIZE); + memcpy(vb2_signature_data_mutable(sig), digest, VB2_SHA512_DIGEST_SIZE); return sig; } @@ -119,7 +119,7 @@ struct vb2_signature *vb2_calculate_signature( /* Sign the signature_digest into our output buffer */ int rv = RSA_private_encrypt(signature_digest_len, /* Input length */ signature_digest, /* Input data */ - vb2_signature_data(sig), /* Output sig */ + vb2_signature_data_mutable(sig), /* Output sig */ key->rsa_private_key, /* Key to use */ RSA_PKCS1_PADDING); /* Padding */ free(signature_digest); diff --git a/tests/vb20_common2_tests.c b/tests/vb20_common2_tests.c index 46b04cad..8f8b11ac 100644 --- a/tests/vb20_common2_tests.c +++ b/tests/vb20_common2_tests.c @@ -130,7 +130,7 @@ static void test_verify_data(const struct vb2_packed_key *key1, 0, "vb2_verify_data() input buffer too small"); memcpy(sig2, sig, sig_total_size); - vb2_signature_data(sig2)[0] ^= 0x5A; + vb2_signature_data_mutable(sig2)[0] ^= 0x5A; TEST_NEQ(vb2_verify_data(test_data, test_size, sig2, &pubk, &wb), 0, "vb2_verify_data() wrong sig"); diff --git a/tests/vb20_common3_tests.c b/tests/vb20_common3_tests.c index cf74b72d..fb787d1f 100644 --- a/tests/vb20_common3_tests.c +++ b/tests/vb20_common3_tests.c @@ -174,7 +174,7 @@ static void test_verify_keyblock(const struct vb2_public_key *public_key, "vb2_verify_keyblock() sig too small"); memcpy(h, hdr, hsize); - ((uint8_t *)vb2_packed_key_data(&h->data_key))[0] ^= 0x34; + ((uint8_t *)vb2_packed_key_data_mutable(&h->data_key))[0] ^= 0x34; TEST_EQ(vb2_verify_keyblock(h, hsize, public_key, &wb), VB2_ERROR_KEYBLOCK_SIG_INVALID, "vb2_verify_keyblock() sig mismatch"); @@ -293,7 +293,7 @@ static void test_verify_fw_preamble(struct vb2_packed_key *public_key, "vb2_verify_fw_preamble() sig too small"); memcpy(h, hdr, hsize); - ((uint8_t *)vb2_packed_key_data(&h->kernel_subkey))[0] ^= 0x34; + ((uint8_t *)vb2_packed_key_data_mutable(&h->kernel_subkey))[0] ^= 0x34; TEST_EQ(vb2_verify_fw_preamble(h, hsize, &rsa, &wb), VB2_ERROR_PREAMBLE_SIG_INVALID, "vb2_verify_fw_preamble() sig mismatch"); diff --git a/tests/vboot_common_tests.c b/tests/vboot_common_tests.c index 49f2f2b9..57f43824 100644 --- a/tests/vboot_common_tests.c +++ b/tests/vboot_common_tests.c @@ -78,7 +78,8 @@ static void PublicKeyTest(void) TEST_EQ(k->key_version, j->key_version, "PublicKeyCopy key_version"); /* Data should have been copied */ TEST_EQ(0, - memcmp(GetPublicKeyData(k), GetPublicKeyData(j), k->key_size), + memcmp(vb2_packed_key_data(k), + vb2_packed_key_data(j), k->key_size), "PublicKeyCopy data"); } |