From 46ebde8d4f7b894c857bce478526d4150c09c15f Mon Sep 17 00:00:00 2001 From: Enginex0 Date: Tue, 17 Mar 2026 03:35:32 +0100 Subject: [PATCH] chore(brand): rebrand to TEESimulator-RS with simplified versioning Fork identity: rename across module metadata, CI pipeline, and build scripts. Version scheme changed from v4.5-115-f388529 to v4.6-117 format, commit count auto-increments, git hash dropped from filenames. --- .github/workflows/build.yml | 46 +++++++++++++++---------------------- app/build.gradle.kts | 19 ++++++++------- module/changelog.md | 10 ++++++++ module/customize.sh | 2 +- module/module.prop | 4 ++-- scripts/package.sh | 2 +- settings.gradle.kts | 2 +- 7 files changed, 42 insertions(+), 43 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5e86b7f..d3763d4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -70,38 +70,25 @@ jobs: id: ver run: | ver=$(grep 'val verName' app/build.gradle.kts | sed 's/.*"\(.*\)".*/\1/') - echo "version=${ver}" >> "$GITHUB_OUTPUT" + count=$(git rev-list HEAD --count) + echo "version=${ver}-${count}" >> "$GITHUB_OUTPUT" - - name: Rename ZIPs for release + - name: List build artifacts run: | - RELEASE_FILE=$(find out -name "*Release*.zip" | head -1) - DEBUG_FILE=$(find out -name "*Debug*.zip" | head -1) - - if [[ -z "$RELEASE_FILE" || -z "$DEBUG_FILE" ]]; then - echo "::error::Could not find release or debug ZIPs in out/" - ls -la out/ || echo "out/ does not exist" - exit 1 - fi - - mv "$RELEASE_FILE" "out/TEESimulator-${VER}-Release.zip" - mv "$DEBUG_FILE" "out/TEESimulator-${VER}-Debug.zip" - - echo "Release: TEESimulator-${VER}-Release.zip ($(du -h "out/TEESimulator-${VER}-Release.zip" | cut -f1))" - echo "Debug: TEESimulator-${VER}-Debug.zip ($(du -h "out/TEESimulator-${VER}-Debug.zip" | cut -f1))" - env: - VER: ${{ steps.ver.outputs.version }} + echo "Release: $(ls out/*Release*.zip | head -1) ($(du -h out/*Release*.zip | head -1 | cut -f1))" + echo "Debug: $(ls out/*Debug*.zip | head -1) ($(du -h out/*Debug*.zip | head -1 | cut -f1))" - uses: actions/upload-artifact@v4 with: - name: TEESimulator-release-zip - path: out/TEESimulator-*-Release.zip + name: TEESimulator-RS-release-zip + path: out/TEESimulator-RS-*-Release.zip retention-days: 30 compression-level: 0 - uses: actions/upload-artifact@v4 with: - name: TEESimulator-debug-zip - path: out/TEESimulator-*-Debug.zip + name: TEESimulator-RS-debug-zip + path: out/TEESimulator-RS-*-Debug.zip retention-days: 7 compression-level: 0 @@ -125,22 +112,23 @@ jobs: id: ver run: | ver=$(grep 'val verName' app/build.gradle.kts | sed 's/.*"\(.*\)".*/\1/') - echo "version=${ver}" >> "$GITHUB_OUTPUT" + count=$(git rev-list HEAD --count) + echo "version=${ver}-${count}" >> "$GITHUB_OUTPUT" - uses: actions/download-artifact@v4 with: - name: TEESimulator-release-zip + name: TEESimulator-RS-release-zip path: zips - uses: actions/download-artifact@v4 with: - name: TEESimulator-debug-zip + name: TEESimulator-RS-debug-zip path: zips - name: Extract changelog run: | ver="${VER#v}" - awk "/^## TEESimulator v${ver}/{flag=1; next} /^## TEESimulator v/{if(flag) exit} flag" module/changelog.md > /tmp/notes.md + awk "/^## TEESimulator-RS v${ver%%-*}/{flag=1; next} /^## TEESimulator-RS v/{if(flag) exit} flag" module/changelog.md > /tmp/notes.md cat /tmp/notes.md env: VER: ${{ steps.ver.outputs.version }} @@ -148,12 +136,14 @@ jobs: - name: Create release run: | gh release delete "$VER" --yes 2>/dev/null || true + RELEASE=$(ls zips/*Release*.zip | head -1) + DEBUG=$(ls zips/*Debug*.zip | head -1) gh release create "$VER" \ --title "$VER" \ --latest \ --notes-file /tmp/notes.md \ - "zips/TEESimulator-${VER}-Release.zip" \ - "zips/TEESimulator-${VER}-Debug.zip" + "$RELEASE" \ + "$DEBUG" env: VER: ${{ steps.ver.outputs.version }} GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/app/build.gradle.kts b/app/build.gradle.kts index b9efb72..4f75bef 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 = "v4.5" +val verName = "v4.6" android { namespace = "org.matrix.TEESimulator" @@ -73,7 +73,7 @@ dependencies { // --- Rust native cert gen build task --- val buildRustCertgen by tasks.registering(Exec::class) { - group = "TEESimulator Native Build" + group = "TEESimulator-RS Native Build" description = "Builds libcertgen.so via cargo-ndk for arm64-v8a." workingDir = rootProject.projectDir.resolve("native-certgen") @@ -108,13 +108,13 @@ androidComponents { // --- Define output locations and file names --- // Stage all files in a temporary directory inside 'build' before zipping val tempModuleDir = project.layout.buildDirectory.dir("module/${variant.name}") - val zipFileName = "TEESimulator-$verName-$gitCommitCount-$gitCommitHash-$capitalized.zip" + val zipFileName = "TEESimulator-RS-$verName-$gitCommitCount-$capitalized.zip" // Task 1: Prepare all module files in the temporary build directory. // Using Sync ensures that stale files from previous runs are removed. val prepareModuleFilesTask = tasks.register("prepareModuleFiles${capitalized}") { - group = "TEESimulator Module Packaging" + group = "TEESimulator-RS Module Packaging" description = "Prepares all files for the ${variant.name} module zip." if (isDebug) { @@ -162,8 +162,7 @@ androidComponents { // Use expand() for simple key-value replacement. expand( "REPLACEMEVERCODE" to gitCommitCount.toString(), - "REPLACEMEVER" to - "$verName ($gitCommitCount-$gitCommitHash-${variant.name})", + "REPLACEMEVER" to "$verName-$gitCommitCount", ) } @@ -174,7 +173,7 @@ androidComponents { // Task 2: Zip the prepared files from the temporary directory. val zipTask = tasks.register("zip${capitalized}") { - group = "TEESimulator Module Packaging" + group = "TEESimulator-RS Module Packaging" description = "Creates the flashable zip for the ${variant.name} module." dependsOn(prepareModuleFilesTask) @@ -187,7 +186,7 @@ androidComponents { fun createInstallTasks(rootProvider: String, installCli: String) { val pushTask = tasks.register("push${rootProvider}Module${capitalized}") { - group = "TEESimulator Module Installation" + group = "TEESimulator-RS Module Installation" description = "Pushes the ${variant.name} module to the device for $rootProvider." dependsOn(zipTask) @@ -201,7 +200,7 @@ androidComponents { val installTask = tasks.register("install${rootProvider}${capitalized}") { - group = "TEESimulator Module Installation" + group = "TEESimulator-RS Module Installation" description = "Installs the ${variant.name} module via $rootProvider." dependsOn(pushTask) commandLine( @@ -214,7 +213,7 @@ androidComponents { } tasks.register("install${rootProvider}AndReboot${capitalized}") { - group = "TEESimulator Module Installation" + group = "TEESimulator-RS Module Installation" description = "Installs the ${variant.name} module via $rootProvider and reboots." dependsOn(installTask) commandLine("adb", "reboot") diff --git a/module/changelog.md b/module/changelog.md index c380d26..e7d9272 100644 --- a/module/changelog.md +++ b/module/changelog.md @@ -1,3 +1,13 @@ +## TEESimulator-RS v4.6: Rebrand & Detection Fix + +- **RTT normalization rework** — Replaced Gaussian sleep (mean=55ms) with a 15ms floor fence. The old approach triggered Chunqiu Native Check 2.8 timing analysis; the floor-only approach satisfies the minimum RTT threshold without creating a detectable delay pattern. +- **Cross-algorithm attestation** — Signing algorithm now derived from the attestation key's actual type, not the generated key's algorithm. Fixes BouncyCastle crash when signing RSA keys with EC attestation keys (Shizuku attestation flow). +- **Device ID attestation** — Serial/IMEI/MEID/secondImei tags now flow through to software cert gen instead of blanket rejection. Only DEVICE_UNIQUE_ATTESTATION is rejected, matching AOSP keystore2 policy. +- **Rebrand to TEESimulator-RS** — Distinguishes this fork from upstream. Version scheme simplified to v{major}.{minor}-{commitCount}. +- **CI streamlined** — Release pipeline uses Gradle-generated filenames directly, eliminating the rename step. + +--- + ## TEESimulator v4.5: Detection Hardening Tested against [KeyDetector](https://github.com/XiaoTong6666/KeyDetector) (23-check attestation validator). All keystore-level checks now pass. diff --git a/module/customize.sh b/module/customize.sh index 4836c52..6ef1d9f 100644 --- a/module/customize.sh +++ b/module/customize.sh @@ -15,7 +15,7 @@ fi # --- Version Info --- VERSION=$(grep_prop version "${TMPDIR}/module.prop") -ui_print "- Installing TEESimulator $VERSION" +ui_print "- Installing TEESimulator-RS $VERSION" ui_print "" # --- Architecture Handling --- diff --git a/module/module.prop b/module/module.prop index cf10e17..70dfe9c 100644 --- a/module/module.prop +++ b/module/module.prop @@ -1,7 +1,7 @@ id=tricky_store -name=TEESimulator +name=TEESimulator-RS version=${REPLACEMEVER} versionCode=${REPLACEMEVERCODE} author=JingMatrix, Enginex0 description=Software simulation for Android hardware-backed key pairs with key attestation -updateJson=https://raw.githubusercontent.com/Enginex0/TEESimulator/main/module/update.json +updateJson=https://raw.githubusercontent.com/Enginex0/TEESimulator-RS/main/module/update.json diff --git a/scripts/package.sh b/scripts/package.sh index bde4932..0f86106 100755 --- a/scripts/package.sh +++ b/scripts/package.sh @@ -235,7 +235,7 @@ print_summary() { # --- Main --- echo "" -bold "TEESimulator package pipeline" +bold "TEESimulator-RS package pipeline" echo "" [[ "$BUILD_RUST" == true ]] && build_rust diff --git a/settings.gradle.kts b/settings.gradle.kts index 24ae7a3..66529f6 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -14,7 +14,7 @@ dependencyResolutionManagement { } } -rootProject.name = "TEESimulator" +rootProject.name = "TEESimulator-RS" include(":stub")