From 6e74ebbe8216140c4d242c1cb2b388e8017353eb Mon Sep 17 00:00:00 2001 From: Enginex0 Date: Sun, 22 Mar 2026 01:50:02 +0100 Subject: [PATCH] docs(release): add v5.1.1 changelog for pre-stash restoration fixes --- app/build.gradle.kts | 2 +- module/changelog.md | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index f1686ab..e4cecaf 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -29,7 +29,7 @@ val gitExecutor = objects.newInstance(GitExecutor::class.java) val gitCommitCount = gitExecutor.execute("git rev-list HEAD --count", rootDir).toInt() val gitCommitHash = gitExecutor.execute("git rev-parse --verify --short HEAD", rootDir) -val verName = "v5.1" +val verName = "v5.1.1" android { namespace = "org.matrix.TEESimulator" diff --git a/module/changelog.md b/module/changelog.md index d7bda1c..2027a2a 100644 --- a/module/changelog.md +++ b/module/changelog.md @@ -1,3 +1,26 @@ +## TEESimulator-RS v5.1.1: Pre-Stash Restoration + +Restores all custom hardening fixes that were lost during the PR #157 migration. These were working in pre-stash builds but never carried over to the post-stash codebase, causing user-reported regressions (boot hash instability, DuckDetector score regression, config crash on file deletion). + +- **Boot hash persistence** restored: 4-step fallback (sysprop, TEE, file, random) with file writes at every step. Fixes "Boot: Unavailable" where boot hash randomized every reboot on devices without `ro.boot.vbmeta.digest` +- **Presence-based findBoolean** for KeyMint tags: boolean tags are presence-based per AIDL spec, `.boolValue` field isn't reliably populated across Android versions +- **noAuthRequired** defaults to true when not explicitly false, matching AOSP KeyMint behavior +- **callerNonce** tag now flows through to software-enforced attestation list +- **CTR block mode** restored in cipher algorithm mapping (was dropped in PR #157) +- **AEAD guard** on updateAad: non-GCM operations throw INVALID_TAG +- **Error code resolution** via lazy reflection with correct KeyMint AIDL fallback values +- **Latency floor** on SoftwareOperation.finish() for StrongBox timing simulation +- **FileObserver NPE** fixed: null-safe handling on config file DELETE events +- **system=prop** consistency: forces boot/vendor patch levels to derive from device props +- **StrongBox simulation** restored: capability checks (RSA<=2048, EC=P256), concurrent op limits (4 max), keygen latency floor (250ms), op latency floor (80ms) +- **Binder buffer guard**: MAX_ALIAS_LENGTH (256KB) rejects oversized aliases before processing +- **Key lifecycle tracking**: deletedSoftwareKeys set prevents ghost key responses after deletion +- **Per-UID operation limits**: 15 TEE, 4 StrongBox with LRU eviction +- **EC+DECRYPT rejection** in createOperation, matching AOSP unsupported purpose check +- **Attest key nspace update** aligned with upstream PR #169 + +--- + ## TEESimulator-RS v5.1: Interception Architecture Rewrite Major release. 27 files changed, 2300 lines rewritten. The entire Kotlin interception layer has been rebuilt with a clean architecture, proper AIDL alignment, and significantly lower binder overhead.