diff --git a/core/embed/trezorhal/optiga/optiga_transport.c b/core/embed/trezorhal/optiga/optiga_transport.c index 5a827dfe9..b234569bd 100644 --- a/core/embed/trezorhal/optiga/optiga_transport.c +++ b/core/embed/trezorhal/optiga/optiga_transport.c @@ -139,9 +139,26 @@ static size_t sec_chan_size = 0; #else static optiga_log_hex_t log_hex = NULL; void optiga_set_log_hex(optiga_log_hex_t f) { log_hex = f; } -#define OPTIGA_LOG(prefix, data, data_size) \ - if (log_hex != NULL) { \ - log_hex(prefix, data, data_size); \ +#define OPTIGA_LOG(prefix, data, data_size) \ + if (log_hex != NULL) { \ + static uint8_t prev_data[4]; \ + static size_t prev_size = 0; \ + static bool repeated = false; \ + if (prev_size == data_size && memcmp(data, prev_data, data_size) == 0) { \ + if (!repeated) { \ + repeated = true; \ + log_hex(prefix "(REPEATED) ", data, data_size); \ + } \ + } else { \ + repeated = false; \ + if (data_size <= sizeof(prev_data)) { \ + memcpy(prev_data, data, data_size); \ + prev_size = data_size; \ + } else { \ + prev_size = 0; \ + } \ + log_hex(prefix, data, data_size); \ + } \ } #endif