From 90ff59e0aa5d138b654550555eadf6afedc484d6 Mon Sep 17 00:00:00 2001 From: Enginex0 Date: Mon, 16 Mar 2026 22:36:02 +0100 Subject: [PATCH] fix(interception): check generatedKeys before deletedSoftwareKeys on getKeyEntry The deletion guard must not shadow re-generated keys. If an app deletes a key then re-creates it, getKeyEntry was still returning KEY_NOT_FOUND because deletedSoftwareKeys was checked first. --- .../interception/keystore/Keystore2Interceptor.kt | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/org/matrix/TEESimulator/interception/keystore/Keystore2Interceptor.kt b/app/src/main/java/org/matrix/TEESimulator/interception/keystore/Keystore2Interceptor.kt index 8d25fb3..09056c2 100644 --- a/app/src/main/java/org/matrix/TEESimulator/interception/keystore/Keystore2Interceptor.kt +++ b/app/src/main/java/org/matrix/TEESimulator/interception/keystore/Keystore2Interceptor.kt @@ -172,15 +172,15 @@ object Keystore2Interceptor : AbstractKeystoreInterceptor() { return TransactionResult.ContinueAndSkipPost } - if (keyId in deletedSoftwareKeys) { - SystemLogger.info("[TX_ID: $txId] Returning KEY_NOT_FOUND for deleted key ${descriptor.alias}") - return InterceptorUtils.createErrorReply(RESPONSE_KEY_NOT_FOUND) + val response = KeyMintSecurityLevelInterceptor.getGeneratedKeyResponse(keyId) + if (response == null) { + if (deletedSoftwareKeys.remove(keyId)) { + SystemLogger.info("[TX_ID: $txId] Returning KEY_NOT_FOUND for deleted key ${descriptor.alias}") + return InterceptorUtils.createErrorReply(RESPONSE_KEY_NOT_FOUND) + } + return TransactionResult.Continue } - val response = - KeyMintSecurityLevelInterceptor.getGeneratedKeyResponse(keyId) - ?: return TransactionResult.Continue - if (KeyMintSecurityLevelInterceptor.isAttestationKey(keyId)) SystemLogger.info("${descriptor.alias} was an attestation key")