Enforce optional Android JMAP SPKI pins #19

Merged
ober merged 3 commits from feat/android-spki-pinning into main 2026-09-21 21:31:57 -04:00
Owner

Adds optional Android JMAP SPKI pin enforcement using typed Jerboa code.

The saved HTTPS server URL may include a #sha256/<base64> pin fragment. The fragment is preserved when resolving JMAP endpoints, never sent in HTTP requests, and the first peer certificate's public-key digest is checked before response parsing. Mismatches raise an explicit TLS verification failure.

Validation:

  • make -C android apk (BUILD SUCCESSFUL)
  • jerboa_check_balance passed for app.ss, jmap-client.ss, and tls-pin.ss
  • generated Kotlin includes HttpsURLConnection certificate verification
  • version bumped to 0.5.5 / versionCode 232
Adds optional Android JMAP SPKI pin enforcement using typed Jerboa code. The saved HTTPS server URL may include a `#sha256/<base64>` pin fragment. The fragment is preserved when resolving JMAP endpoints, never sent in HTTP requests, and the first peer certificate's public-key digest is checked before response parsing. Mismatches raise an explicit TLS verification failure. Validation: - `make -C android apk` (BUILD SUCCESSFUL) - `jerboa_check_balance` passed for app.ss, jmap-client.ss, and tls-pin.ss - generated Kotlin includes HttpsURLConnection certificate verification - version bumped to 0.5.5 / versionCode 232
ober added 19 commits 2026-09-21 19:05:00 -04:00
Add typed Android JMAP mailbox client
All checks were successful
version-policy / required (pull_request) Successful in 5m1s
required-ci / required (pull_request) Successful in 7m43s
daad21c063
Add read-only JMAP inbox and message detail
All checks were successful
version-policy / required (pull_request) Successful in 4m47s
required-ci / required (pull_request) Successful in 8m39s
dfeecbf5ca
Add encrypted offline Inbox snapshot
All checks were successful
version-policy / required (pull_request) Successful in 4m43s
required-ci / required (pull_request) Successful in 7m36s
b4ff2b4d66
Add confirmed Android message actions and emulator coverage
All checks were successful
version-policy / required (pull_request) Successful in 4m43s
required-ci / required (pull_request) Successful in 7m30s
1511a81834
Add Android Trash navigation and restore flow
All checks were successful
version-policy / required (pull_request) Successful in 5m27s
required-ci / required (pull_request) Successful in 7m45s
827ede6397
Wire Android folder search and paging
Some checks failed
version-policy / required (pull_request) Successful in 4m56s
required-ci / required (pull_request) Has been cancelled
30bd31589e
Document Android folder actions and limits
All checks were successful
version-policy / required (pull_request) Successful in 4m48s
required-ci / required (pull_request) Successful in 7m40s
91f8f60a8e
Add confirmed Android logout and data removal
All checks were successful
version-policy / required (pull_request) Successful in 5m34s
required-ci / required (pull_request) Successful in 8m1s
78c6e6f0c6
Implement typed Android JMAP sending
All checks were successful
version-policy / required (pull_request) Successful in 4m54s
required-ci / required (pull_request) Successful in 8m6s
33d8e69e73
Improve Android mail accessibility
All checks were successful
version-policy / required (pull_request) Successful in 5m9s
required-ci / required (pull_request) Successful in 7m47s
19ff5c0f98
Add Android message attachment listing
All checks were successful
version-policy / required (pull_request) Successful in 4m40s
required-ci / required (pull_request) Successful in 7m37s
2bcefbcc5d
Add encrypted offline mail action queue
All checks were successful
version-policy / required (pull_request) Successful in 4m40s
required-ci / required (pull_request) Successful in 7m56s
c66227199e
Add safe JMAP MIME and attachment export
All checks were successful
version-policy / required (pull_request) Successful in 4m49s
required-ci / required (pull_request) Successful in 8m2s
dd9723f266
Add Android background inbox synchronization
All checks were successful
version-policy / required (pull_request) Successful in 5m35s
required-ci / required (pull_request) Successful in 7m49s
3eec0bdabd
Fix Android E2E URL input injection
All checks were successful
version-policy / required (pull_request) Successful in 5m16s
required-ci / required (pull_request) Successful in 8m4s
e688249b6d
Post private notifications after background sync
All checks were successful
version-policy / required (pull_request) Successful in 4m49s
required-ci / required (pull_request) Successful in 8m21s
6f14102074
Enforce optional Android JMAP SPKI pins
Some checks failed
version-policy / required (pull_request) Successful in 5m30s
required-ci / required (pull_request) Has been cancelled
7b12e71e36
Make Android emulator smoke robust
Some checks failed
version-policy / required (pull_request) Successful in 5m20s
required-ci / required (pull_request) Has been cancelled
0cf81eefc6
Harden API 26 attachment picker cancellation
All checks were successful
version-policy / required (pull_request) Successful in 4m50s
required-ci / required (pull_request) Successful in 8m32s
428a24d74e
ober force-pushed feat/android-spki-pinning from 428a24d74e
All checks were successful
version-policy / required (pull_request) Successful in 4m50s
required-ci / required (pull_request) Successful in 8m32s
to 78fd59ee2e
All checks were successful
version-policy / required (pull_request) Successful in 4m42s
required-ci / required (pull_request) Successful in 9m41s
2026-09-21 21:24:19 -04:00
Compare
ober merged commit 7341879df0 into main 2026-09-21 21:31:57 -04:00
ober referenced this pull request from a commit 2026-09-21 21:31:58 -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-mail!19
No description provided.