Skip to content

Commit 4dc6d60

Browse files
Improve TLV control under ALLOW_ROGUE_TLVS switch
The list of allowed unprotected tlvs is limited to expected TLV only, depending on crypto scheme configuration. The original implementation allows many additional TLV (related to other crypto schemes). The allow_unprot_tlvs[] array changes requires the move of EXPECTED_ENC_TLV definitions from encrypted.c to enc_key_public.h file. Signed-off-by: Stephane Le Roy <[email protected]>
1 parent 256a02c commit 4dc6d60

File tree

3 files changed

+26
-36
lines changed

3 files changed

+26
-36
lines changed

boot/bootutil/include/bootutil/enc_key_public.h

+22
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,28 @@ extern "C" {
5959
#define BOOT_ENC_TLV_SIZE TLV_ENC_KW_SZ
6060
#endif
6161

62+
#define EXPECTED_ENC_LEN BOOT_ENC_TLV_SIZE
63+
64+
#if defined(MCUBOOT_ENCRYPT_RSA)
65+
# define EXPECTED_ENC_TLV IMAGE_TLV_ENC_RSA2048
66+
#elif defined(MCUBOOT_ENCRYPT_KW)
67+
# define EXPECTED_ENC_TLV IMAGE_TLV_ENC_KW
68+
#elif defined(MCUBOOT_ENCRYPT_EC256)
69+
# define EXPECTED_ENC_TLV IMAGE_TLV_ENC_EC256
70+
# define EC_PUBK_INDEX (0)
71+
# define EC_TAG_INDEX (65)
72+
# define EC_CIPHERKEY_INDEX (65 + 32)
73+
_Static_assert(EC_CIPHERKEY_INDEX + BOOT_ENC_KEY_SIZE == EXPECTED_ENC_LEN,
74+
"Please fix ECIES-P256 component indexes");
75+
#elif defined(MCUBOOT_ENCRYPT_X25519)
76+
# define EXPECTED_ENC_TLV IMAGE_TLV_ENC_X25519
77+
# define EC_PUBK_INDEX (0)
78+
# define EC_TAG_INDEX (32)
79+
# define EC_CIPHERKEY_INDEX (32 + 32)
80+
_Static_assert(EC_CIPHERKEY_INDEX + BOOT_ENC_KEY_SIZE == EXPECTED_ENC_LEN,
81+
"Please fix ECIES-X25519 component indexes");
82+
#endif
83+
6284
#ifdef __cplusplus
6385
}
6486
#endif

boot/bootutil/src/encrypted.c

-22
Original file line numberDiff line numberDiff line change
@@ -383,28 +383,6 @@ boot_enc_set_key(struct enc_key_data *enc_state, uint8_t slot,
383383
return 0;
384384
}
385385

386-
#define EXPECTED_ENC_LEN BOOT_ENC_TLV_SIZE
387-
388-
#if defined(MCUBOOT_ENCRYPT_RSA)
389-
# define EXPECTED_ENC_TLV IMAGE_TLV_ENC_RSA2048
390-
#elif defined(MCUBOOT_ENCRYPT_KW)
391-
# define EXPECTED_ENC_TLV IMAGE_TLV_ENC_KW
392-
#elif defined(MCUBOOT_ENCRYPT_EC256)
393-
# define EXPECTED_ENC_TLV IMAGE_TLV_ENC_EC256
394-
# define EC_PUBK_INDEX (0)
395-
# define EC_TAG_INDEX (65)
396-
# define EC_CIPHERKEY_INDEX (65 + 32)
397-
_Static_assert(EC_CIPHERKEY_INDEX + BOOT_ENC_KEY_SIZE == EXPECTED_ENC_LEN,
398-
"Please fix ECIES-P256 component indexes");
399-
#elif defined(MCUBOOT_ENCRYPT_X25519)
400-
# define EXPECTED_ENC_TLV IMAGE_TLV_ENC_X25519
401-
# define EC_PUBK_INDEX (0)
402-
# define EC_TAG_INDEX (32)
403-
# define EC_CIPHERKEY_INDEX (32 + 32)
404-
_Static_assert(EC_CIPHERKEY_INDEX + BOOT_ENC_KEY_SIZE == EXPECTED_ENC_LEN,
405-
"Please fix ECIES-X25519 component indexes");
406-
#endif
407-
408386
#if ( (defined(MCUBOOT_ENCRYPT_RSA) && defined(MCUBOOT_USE_MBED_TLS) && !defined(MCUBOOT_USE_PSA_CRYPTO)) || \
409387
(defined(MCUBOOT_ENCRYPT_EC256) && defined(MCUBOOT_USE_MBED_TLS)) )
410388
#if MBEDTLS_VERSION_NUMBER >= 0x03000000

boot/bootutil/src/image_validate.c

+4-14
Original file line numberDiff line numberDiff line change
@@ -358,20 +358,10 @@ bootutil_get_img_security_cnt(struct image_header *hdr,
358358
* TLV section. All other TLV entries must be in the protected section.
359359
*/
360360
static const uint16_t allowed_unprot_tlvs[] = {
361-
IMAGE_TLV_KEYHASH,
362-
IMAGE_TLV_PUBKEY,
363-
IMAGE_TLV_SHA256,
364-
IMAGE_TLV_SHA384,
365-
IMAGE_TLV_SHA512,
366-
IMAGE_TLV_RSA2048_PSS,
367-
IMAGE_TLV_ECDSA224,
368-
IMAGE_TLV_ECDSA_SIG,
369-
IMAGE_TLV_RSA3072_PSS,
370-
IMAGE_TLV_ED25519,
371-
IMAGE_TLV_ENC_RSA2048,
372-
IMAGE_TLV_ENC_KW,
373-
IMAGE_TLV_ENC_EC256,
374-
IMAGE_TLV_ENC_X25519,
361+
EXPECTED_KEY_TLV,
362+
EXPECTED_HASH_TLV,
363+
EXPECTED_SIG_TLV,
364+
EXPECTED_ENC_TLV,
375365
/* Mark end with ANY. */
376366
IMAGE_TLV_ANY,
377367
};

0 commit comments

Comments
 (0)