@@ -56,6 +56,9 @@ static int add_payload_type(uint8_t part, uint32_t version, uint32_t size,
5656 uint16_t img_type );
5757
5858#ifdef CUSTOM_ENCRYPT_KEY
59+ static int mock_set_encrypt_key_ret = 0 ;
60+ static int mock_set_encrypt_key_calls = 0 ;
61+
5962int wolfBoot_get_encrypt_key (uint8_t * k , uint8_t * nonce )
6063{
6164 int i ;
@@ -72,7 +75,8 @@ int wolfBoot_set_encrypt_key(const uint8_t *key, const uint8_t *nonce)
7275{
7376 (void )key ;
7477 (void )nonce ;
75- return 0 ;
78+ mock_set_encrypt_key_calls ++ ;
79+ return mock_set_encrypt_key_ret ;
7680}
7781
7882int wolfBoot_erase_encrypt_key (void )
@@ -133,6 +137,8 @@ int hal_flash_protect(haladdr_t address, int len)
133137static void reset_mock_stats (void )
134138{
135139 wolfBoot_staged_ok = 0 ;
140+ mock_set_encrypt_key_ret = 0 ;
141+ mock_set_encrypt_key_calls = 0 ;
136142#ifndef ARCH_SIM
137143 wolfBoot_panicked = 0 ;
138144#endif
@@ -520,6 +526,38 @@ START_TEST (test_fallback_image_verification_rejects_corruption)
520526 cleanup_flash ();
521527}
522528END_TEST
529+
530+ START_TEST (test_final_swap_propagates_encrypt_key_persist_failure )
531+ {
532+ int ret ;
533+ int erase_len = WOLFBOOT_SECTOR_SIZE ;
534+ uintptr_t tmp_boot_pos = WOLFBOOT_PARTITION_SIZE - erase_len -
535+ WOLFBOOT_SECTOR_SIZE ;
536+ uint32_t tmp_buffer [TRAILER_OFFSET_WORDS + 1 ];
537+
538+ reset_mock_stats ();
539+ prepare_flash ();
540+
541+ add_payload (PART_BOOT , 1 , TEST_SIZE_SMALL );
542+ add_payload (PART_UPDATE , 2 , TEST_SIZE_SMALL );
543+
544+ memset (tmp_buffer , 0 , sizeof (tmp_buffer ));
545+ tmp_buffer [TRAILER_OFFSET_WORDS ] = WOLFBOOT_MAGIC_TRAIL ;
546+
547+ hal_flash_unlock ();
548+ hal_flash_write (WOLFBOOT_PARTITION_BOOT_ADDRESS + tmp_boot_pos ,
549+ (const uint8_t * )tmp_buffer , sizeof (tmp_buffer ));
550+ hal_flash_lock ();
551+
552+ mock_set_encrypt_key_ret = -5 ;
553+ ret = wolfBoot_swap_and_final_erase (1 );
554+
555+ ck_assert_int_eq (ret , -5 );
556+ ck_assert_int_eq (mock_set_encrypt_key_calls , 1 );
557+
558+ cleanup_flash ();
559+ }
560+ END_TEST
523561#endif
524562
525563START_TEST (test_sunnyday_noupdate )
@@ -973,6 +1011,7 @@ Suite *wolfboot_suite(void)
9731011#ifdef UNIT_TEST_FALLBACK_ONLY
9741012#ifdef EXT_ENCRYPTED
9751013 tcase_add_test (fallback_verify , test_fallback_image_verification_rejects_corruption );
1014+ tcase_add_test (fallback_verify , test_final_swap_propagates_encrypt_key_persist_failure );
9761015 suite_add_tcase (s , fallback_verify );
9771016#endif
9781017 return s ;
@@ -1009,6 +1048,7 @@ Suite *wolfboot_suite(void)
10091048#endif
10101049#ifdef EXT_ENCRYPTED
10111050 tcase_add_test (fallback_verify , test_fallback_image_verification_rejects_corruption );
1051+ tcase_add_test (fallback_verify , test_final_swap_propagates_encrypt_key_persist_failure );
10121052#endif
10131053
10141054 suite_add_tcase (s , empty_panic );
0 commit comments