fix: enforce Android certificate pinning #19

Merged
ober merged 9 commits from chore/finish2-acceptance-sweep into main 2026-08-14 17:43:28 -04:00
Owner

Summary

  • wire the Android JMAP client through OkHttp CertificatePinner using the configured SPKI pins
  • add a security grep gate so the Android pinning invariant remains checked
  • advance VERSION, jpkg.sexp, Android app version, CLI version output, and the tracked jjmapd binary to 0.2.20

Verification

  • ./support/fetch-deps.sh
  • jerboa_verify support/android/app.ss
  • jerboa_verify lib/jjmap/main.ss
  • jerboa_security_scan support/android/src/main/java/org/jerboa/mail/JmapClient.kt
  • make build
  • make test
  • make binary
  • make verify
  • make release-verify
  • env -i PATH="$PATH" HOME="$HOME" ./jjmapd version -> jjmapd 0.2.20
  • RUSTC="$(rustup which --toolchain stable rustc)" JANDROID_REPO=/Users/user/mine/jerboa-android make android-apk

Android Gradle note

The generated Gradle project was produced successfully. A direct local gradle assembleDebug attempt is blocked by the host Gradle 9.6.1 installation: generated AGP 8.13.2 reports that it requires Gradle 9.5 or a compatible newer AGP. I did not change the generator-owned AGP default in this repo.

Finish2 audit note

The concrete remaining implementation gap found in the current tree was the Android CertificatePinner claim from plan.md/finish2-kimi3.md. The repo still uses the existing kotlin-source-dir migration bridge for the Android app spec; this PR does not convert the entire client to typed-kotlin-file.

## Summary - wire the Android JMAP client through OkHttp CertificatePinner using the configured SPKI pins - add a security grep gate so the Android pinning invariant remains checked - advance VERSION, jpkg.sexp, Android app version, CLI version output, and the tracked jjmapd binary to 0.2.20 ## Verification - ./support/fetch-deps.sh - jerboa_verify support/android/app.ss - jerboa_verify lib/jjmap/main.ss - jerboa_security_scan support/android/src/main/java/org/jerboa/mail/JmapClient.kt - make build - make test - make binary - make verify - make release-verify - env -i PATH="$PATH" HOME="$HOME" ./jjmapd version -> jjmapd 0.2.20 - RUSTC="$(rustup which --toolchain stable rustc)" JANDROID_REPO=/Users/user/mine/jerboa-android make android-apk ## Android Gradle note The generated Gradle project was produced successfully. A direct local `gradle assembleDebug` attempt is blocked by the host Gradle 9.6.1 installation: generated AGP 8.13.2 reports that it requires Gradle 9.5 or a compatible newer AGP. I did not change the generator-owned AGP default in this repo. ## Finish2 audit note The concrete remaining implementation gap found in the current tree was the Android `CertificatePinner` claim from plan.md/finish2-kimi3.md. The repo still uses the existing `kotlin-source-dir` migration bridge for the Android app spec; this PR does not convert the entire client to typed-kotlin-file.
fix: enforce Android certificate pinning
All checks were successful
version-policy / required (pull_request) Successful in 7s
required-ci / required (pull_request) Successful in 6m49s
716795d178
fix android debug TLS pinning
All checks were successful
version-policy / required (pull_request) Successful in 19s
required-ci / required (pull_request) Successful in 9m57s
6f033b2c05
fix android emulator config handoff
All checks were successful
version-policy / required (pull_request) Successful in 9s
required-ci / required (pull_request) Successful in 9m15s
0e594fe392
fix android config startup after bad handoff
All checks were successful
version-policy / required (pull_request) Successful in 9s
required-ci / required (pull_request) Successful in 7m11s
7582a42b42
fix android jmap session loopback urls
All checks were successful
version-policy / required (pull_request) Successful in 9s
required-ci / required (pull_request) Successful in 6m54s
d438cef335
fix android mail usability and compose
All checks were successful
version-policy / required (pull_request) Successful in 9s
required-ci / required (pull_request) Successful in 7m10s
84fb9fa4ff
fix android sync and message contrast
All checks were successful
version-policy / required (pull_request) Successful in 11s
required-ci / required (pull_request) Successful in 7m43s
ea9ab300ad
refresh verified jjmapd binary
All checks were successful
version-policy / required (pull_request) Successful in 10s
required-ci / required (pull_request) Successful in 7m1s
a12909584c
add mail delivery diagnostics
All checks were successful
version-policy / required (pull_request) Successful in 12s
required-ci / required (pull_request) Successful in 8m37s
ad198fc9ee
ober merged commit c1bffa7695 into main 2026-08-14 17:43:28 -04:00
ober referenced this pull request from a commit 2026-08-14 17:43:29 -04:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
ober/jerboa-jmap!19
No description provided.