summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoel Kitching <kitching@google.com>2019-09-04 15:52:25 +0800
committerCommit Bot <commit-bot@chromium.org>2019-10-29 21:27:35 +0000
commit3d8dcc853a98bb8aae91d9a30862541a38581b2d (patch)
tree934ad41cc209cc3161e2fa3581e8f20298107329
parent6d43a1925a3f88b4fb8ac3fc9dcfc42ccd934063 (diff)
downloadvboot-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--Makefile1
-rw-r--r--firmware/2lib/2packed_key.c22
-rw-r--r--firmware/2lib/include/2common.h33
-rw-r--r--firmware/lib/vboot_common.c4
-rw-r--r--firmware/lib20/common.c3
-rw-r--r--firmware/lib20/kernel.c7
-rw-r--r--host/lib/host_key2.c7
-rw-r--r--host/lib/host_signature.c2
-rw-r--r--host/lib/host_signature2.c8
-rw-r--r--tests/vb20_common2_tests.c2
-rw-r--r--tests/vb20_common3_tests.c4
-rw-r--r--tests/vboot_common_tests.c3
12 files changed, 48 insertions, 48 deletions
diff --git a/Makefile b/Makefile
index e34dff5b..0539e8d7 100644
--- a/Makefile
+++ b/Makefile
@@ -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");
}