Files
subtracks/signing/README.md
T
austinried 3f3db71f14 docs: commit the release signing certificate and fingerprint
Add the release key's public certificate (signing/release-certificate.pem)
and its SHA-256 to signing/README.md.
2026-10-08 18:52:44 +00:00

68 lines
2.3 KiB
Markdown

# Verifying a subtracks download
subtracks ships through four channels:
- **GitHub releases** — the APK is signed with the release key. Its public
certificate is committed here as
[`release-certificate.pem`](release-certificate.pem) and attached to each
release, along with a `SHA256SUMS`.
- **Google Play** — uses Play App Signing, so Google re-signs the app it
delivers. The release key is only the *upload* key there: it signs the AAB we
send to Play, not the APK users install. The installed app verifies against
Google's app signing certificate (Play Console → App integrity), and the upload
key only proves the AAB we uploaded.
- **`nightly` builds** (the `subtracks-nightly` artifact from CI) — signed with
the public debug key committed here as
[`nightly-certificate.pem`](nightly-certificate.pem).
- **F-Droid** — re-signed by F-Droid with its own key; see F-Droid's published
signing key.
## `nightly` builds
Certificate SHA-256:
```
DF:31:3F:18:58:E9:AD:F4:7F:44:65:B2:80:8F:DC:E5:B9:F8:8A:48:35:DC:D0:79:95:19:61:C3:05:05:08:37
```
To check a `nightly` APK:
```sh
apksigner verify --print-certs subtracks-nightly.apk
```
The `SHA-256 digest` line must equal the fingerprint above (the certificate is
committed at [`nightly-certificate.pem`](nightly-certificate.pem)).
## GitHub releases
The APK is signed with the release key. Certificate SHA-256:
```
02:DA:2C:B7:B8:21:4E:53:BD:BF:B4:55:69:8D:CB:96:52:22:F9:1C:95:4B:52:10:AE:AC:96:FE:32:9C:8F:01
```
Each release attaches the APK, the checksums and the certificate (committed here
as [`release-certificate.pem`](release-certificate.pem)):
```sh
sha256sum -c SHA256SUMS
apksigner verify --print-certs subtracks.apk # compare with the .pem
keytool -printcert -file release-certificate.pem # prints its SHA-256
```
The signing certificate SHA-256 is also listed in the release notes.
## Google Play
The AAB we upload is signed with the release (upload) key, and that is what Play
checks; Google then re-signs the delivered APKs with its own app signing key. So
a Play-installed app is verified against Play's app signing certificate (shown in
Play Console → App integrity), not `release-certificate.pem`.
To check the AAB that was sent:
```sh
keytool -printcert -jarfile app-release.aab
```