@@ -2183,6 +2183,7 @@ int wolfBoot_verify_authenticity(struct wolfBoot_image *img)
21832183 if (SIG_OK (img )) {
21842184 uint8_t * stored_secondary_signature ;
21852185 uint16_t stored_secondary_signature_size ;
2186+ uint16_t expected_secondary_signature_size = 0 ;
21862187 /* Invalidate the signature_ok flag */
21872188 wolfBoot_image_clear_signature_ok (img );
21882189 /* Load the pubkey hint for the secondary key */
@@ -2199,6 +2200,37 @@ int wolfBoot_verify_authenticity(struct wolfBoot_image *img)
21992200 CONFIRM_MASK_VALID (image_part , key_mask );
22002201 stored_secondary_signature_size = get_header (img ,
22012202 HDR_SECONDARY_SIGNATURE , & stored_secondary_signature );
2203+ if (stored_secondary_signature_size == 0 ||
2204+ stored_secondary_signature == NULL ) {
2205+ return -1 ;
2206+ }
2207+ #if defined(WOLFBOOT_SIGN_SECONDARY_ED25519 )
2208+ expected_secondary_signature_size = ED25519_IMAGE_SIGNATURE_SIZE ;
2209+ #elif defined(WOLFBOOT_SIGN_SECONDARY_ED448 )
2210+ expected_secondary_signature_size = ED448_IMAGE_SIGNATURE_SIZE ;
2211+ #elif defined (WOLFBOOT_SIGN_SECONDARY_RSA2048 ) || \
2212+ defined (WOLFBOOT_SIGN_SECONDARY_RSA3072 ) || \
2213+ defined (WOLFBOOT_SIGN_SECONDARY_RSA4096 ) || \
2214+ defined (WOLFBOOT_SIGN_SECONDARY_RSA2048ENC ) || \
2215+ defined (WOLFBOOT_SIGN_SECONDARY_RSA3072ENC ) || \
2216+ defined (WOLFBOOT_SIGN_SECONDARY_RSA4096ENC )
2217+ expected_secondary_signature_size = RSA_IMAGE_SIGNATURE_SIZE ;
2218+ #elif defined (WOLFBOOT_SIGN_SECONDARY_ECC256 ) || \
2219+ defined (WOLFBOOT_SIGN_SECONDARY_ECC384 ) || \
2220+ defined (WOLFBOOT_SIGN_SECONDARY_ECC521 )
2221+ expected_secondary_signature_size = ECC_IMAGE_SIGNATURE_SIZE ;
2222+ #elif defined(WOLFBOOT_SIGN_SECONDARY_LMS )
2223+ expected_secondary_signature_size = LMS_IMAGE_SIGNATURE_SIZE ;
2224+ #elif defined(WOLFBOOT_SIGN_SECONDARY_XMSS )
2225+ expected_secondary_signature_size = XMSS_IMAGE_SIGNATURE_SIZE ;
2226+ #elif defined(WOLFBOOT_SIGN_SECONDARY_ML_DSA )
2227+ expected_secondary_signature_size = ML_DSA_IMAGE_SIGNATURE_SIZE ;
2228+ #endif
2229+ if (expected_secondary_signature_size == 0 ||
2230+ stored_secondary_signature_size !=
2231+ expected_secondary_signature_size ) {
2232+ return -1 ;
2233+ }
22022234 wolfBoot_printf ("Verification of hybrid signature\n" );
22032235 wolfBoot_verify_signature_secondary (key_slot , img ,
22042236 stored_secondary_signature );
0 commit comments