From 3127fd64c2ac83e799f84fa161caed8ca5531409 Mon Sep 17 00:00:00 2001 From: CinderSocket Date: Fri, 27 Mar 2026 22:40:59 -0700 Subject: [PATCH] mem: eliminate 280 bytes of static BSS Stack-allocate the two mbedtls DES contexts in loclass optimized_elite (128 bytes each) and the APDU runner progress text buffer (24 bytes). All three were static/global but are used only within single call frames. --- lib/loclass/optimized_elite.c | 13 ++++++------- scenes/seader_scene_apdu_runner.c | 10 ++++------ 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/lib/loclass/optimized_elite.c b/lib/loclass/optimized_elite.c index e198a41..9a6a7a9 100644 --- a/lib/loclass/optimized_elite.c +++ b/lib/loclass/optimized_elite.c @@ -162,21 +162,20 @@ static void loclass_rk(const uint8_t* key, uint8_t n, uint8_t* outp_key) { return; } -static mbedtls_des_context loclass_ctx_enc; -static mbedtls_des_context loclass_ctx_dec; - static void loclass_desdecrypt_iclass(uint8_t* iclass_key, uint8_t* input, uint8_t* output) { uint8_t key_std_format[8] = {0}; loclass_permutekey_rev(iclass_key, key_std_format); - mbedtls_des_setkey_dec(&loclass_ctx_dec, key_std_format); - mbedtls_des_crypt_ecb(&loclass_ctx_dec, input, output); + mbedtls_des_context ctx; + mbedtls_des_setkey_dec(&ctx, key_std_format); + mbedtls_des_crypt_ecb(&ctx, input, output); } static void loclass_desencrypt_iclass(const uint8_t* iclass_key, uint8_t* input, uint8_t* output) { uint8_t key_std_format[8] = {0}; loclass_permutekey_rev(iclass_key, key_std_format); - mbedtls_des_setkey_enc(&loclass_ctx_enc, key_std_format); - mbedtls_des_crypt_ecb(&loclass_ctx_enc, input, output); + mbedtls_des_context ctx; + mbedtls_des_setkey_enc(&ctx, key_std_format); + mbedtls_des_crypt_ecb(&ctx, input, output); } /** diff --git a/scenes/seader_scene_apdu_runner.c b/scenes/seader_scene_apdu_runner.c index 81bb015..3b07c65 100644 --- a/scenes/seader_scene_apdu_runner.c +++ b/scenes/seader_scene_apdu_runner.c @@ -3,8 +3,6 @@ #define TAG "Seader:Scene:APDURunner" -char seader_scene_apdu_runner_update_text[24]; - void seader_apdu_runner_worker_callback(uint32_t event, void* context) { Seader* seader = context; view_dispatcher_send_custom_event(seader->view_dispatcher, event); @@ -43,14 +41,14 @@ bool seader_scene_apdu_runner_on_event(void* context, SceneManagerEvent event) { consumed = true; } else if(event.event == SeaderWorkerEventAPDURunnerUpdate) { SeaderAPDURunnerContext apdu_runner_ctx = seader->apdu_runner_ctx; + char update_text[24]; snprintf( - seader_scene_apdu_runner_update_text, - sizeof(seader_scene_apdu_runner_update_text), + update_text, + sizeof(update_text), "APDU Runner\n%d/%d", apdu_runner_ctx.current_line + 1, apdu_runner_ctx.total_lines); - popup_set_header( - popup, seader_scene_apdu_runner_update_text, 68, 30, AlignLeft, AlignTop); + popup_set_header(popup, update_text, 68, 30, AlignLeft, AlignTop); consumed = true; } else if(event.event == SeaderWorkerEventAPDURunnerSuccess) { notification_message(seader->notifications, &sequence_success);