From 3212f95915d80e42dd75278e18dba18415da7501 Mon Sep 17 00:00:00 2001 From: Pol Henarejos Date: Tue, 8 Apr 2025 18:59:50 +0200 Subject: [PATCH] Fixes update OTP when LT_CHAL is enabled. Fixes #141. Signed-off-by: Pol Henarejos --- src/fido/otp.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/fido/otp.c b/src/fido/otp.c index d9c5387..ecf37ab 100644 --- a/src/fido/otp.c +++ b/src/fido/otp.c @@ -92,7 +92,8 @@ #define OATH_FIXED_MODHEX2 0x40 // First two bytes in fixed part sent as modhex #define OATH_FIXED_MODHEX 0x50 // Fixed part sent as modhex #define OATH_FIXED_MASK 0x50 // Mask to get out fixed flags -#define CFGFLAG_UPDATE_MASK (PACING_10MS | PACING_20MS) +#define CFGFLAG_UPDATE_MASK_STATIC (PACING_10MS | PACING_20MS) +#define CFGFLAG_UPDATE_MASK_CHAL (PACING_20MS) static uint8_t config_seq = { 1 }; @@ -434,8 +435,14 @@ int cmd_otp() { (odata->ext_flags & EXTFLAG_UPDATE_MASK); odata->tkt_flags = (otpc->tkt_flags & ~TKTFLAG_UPDATE_MASK) | (odata->tkt_flags & TKTFLAG_UPDATE_MASK); - odata->cfg_flags = (otpc->cfg_flags & ~CFGFLAG_UPDATE_MASK) | - (odata->cfg_flags & CFGFLAG_UPDATE_MASK); + if (!(otpc->tkt_flags & CHAL_RESP)) { + odata->cfg_flags = (otpc->cfg_flags & ~CFGFLAG_UPDATE_MASK_STATIC) | + (odata->cfg_flags & CFGFLAG_UPDATE_MASK_STATIC); + } + else { + odata->cfg_flags = (otpc->cfg_flags & ~CFGFLAG_UPDATE_MASK_CHAL) | + (odata->cfg_flags & CFGFLAG_UPDATE_MASK_CHAL); + } file_put_data(ef, apdu.data, otp_config_size); low_flash_available(); config_seq++;