Skip to content

Commit d3d04d9

Browse files
committed
android build verification info
1 parent e4bcdfc commit d3d04d9

4 files changed

Lines changed: 91 additions & 25 deletions

File tree

content/docs/build-verification.md

Lines changed: 55 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,52 +8,92 @@ sidebar_group = "About"
88

99
# Build Verification
1010

11-
All Cache direct downloads are cryptographically signed using [Minisign](https://jedisct1.github.io/minisign/), a simple and lightweight tool for verifying file integrity and authenticity.
11+
Cache direct downloads are cryptographically signed so you can verify integrity and authenticity before installation.
1212

13-
## What is signed
13+
## Quick reference
1414

15-
Each release includes a **signed manifest** (e.g. <code>v{{ latest_version() }}.toml</code>) listing every artifact with its SHA-256 checksum. The manifest is signed with Cache's Ed25519 key — verifying the signature proves both integrity and authenticity of all listed artifacts.
15+
| Platform | Method | Key / Fingerprint |
16+
|---|---|---|
17+
| Android APK | APK signing certificate | [`E0:FB:26:D7:...`](#certificate-fingerprint-sha-256) |
18+
| Linux | Minisign (Ed25519) | [`RWSu...H8RQ`](#public-key) |
1619

17-
## Public key
20+
Downloads from Google Play, Apple App Store, and Microsoft Store are verified by each platform's own trust chain — no additional steps needed.
21+
22+
---
23+
24+
## Android APK
25+
26+
Verify the signing certificate fingerprint to confirm the APK is an authentic Cache build.
27+
28+
**Package IDs:**
29+
30+
- `io.rocketware.cache` (Direct/Accrescent)
31+
- `io.rocketware.cache.googleplay` (Google Play)
32+
33+
### Certificate fingerprint (SHA-256)
1834

1935
```
20-
RWSuyCCt9+/8XP0AK3jidFQotJmj82u3RQvmTRCHZeW460xcSsjxH8RQ
36+
E0:FB:26:D7:60:32:37:72:B2:47:B4:D3:5D:34:2F:B0:EF:40:9B:17:22:7C:DB:CA:A8:43:D3:9A:24:FA:43:1E
2137
```
2238

23-
Download: [`cache-minisign.pub`](/cache-minisign.pub) (also available on [Github](https://github.com/rocketware/cache/blob/main/cache-minisign.pub)).
39+
### Verification steps
40+
41+
**On device (Android):**
42+
43+
Install [AppVerifier](https://github.com/soupslurpr/AppVerifier) and compare the certificate fingerprint against the value above.
44+
45+
**On desktop (apksigner):**
46+
47+
<pre><code>apksigner verify --print-certs cache.apk</code></pre>
48+
49+
Compare the `Signer #1 certificate SHA-256 digest` against the fingerprint above.
2450

2551
---
2652

27-
## Verification steps
53+
## Linux
54+
55+
Linux direct downloads (AppImage, deb, rpm, tar.gz) are signed using [Minisign](https://jedisct1.github.io/minisign/).
56+
57+
Each release includes a **signed manifest** (e.g. <code>v{{ latest_version() }}.toml</code>) listing every artifact with its SHA-256 checksum. Verifying the manifest signature proves both integrity and authenticity of all listed artifacts.
58+
59+
### Public key
60+
61+
```
62+
RWSuyCCt9+/8XP0AK3jidFQotJmj82u3RQvmTRCHZeW460xcSsjxH8RQ
63+
```
64+
65+
Download: [`cache-minisign.pub`](/cache-minisign.pub) (also available on [Github](https://github.com/rocketware/cache/blob/main/cache-minisign.pub)).
66+
67+
### Verification steps
2868

29-
### 1. Install minisign
69+
**1. Install Minisign**
3070

3171
Install [Minisign](https://jedisct1.github.io/minisign/) for your platform.
3272

33-
### 2. Download the manifest and signature
73+
**2. Download the manifest and signature**
3474

35-
From any release page, download the `.toml` manifest and its `.toml.minisig` signature. These are available from three independent sources:
75+
From any release page, download the `.toml` manifest and its `.toml.minisig` signature. Available from three independent sources:
3676

3777
- **Website**: <code>https://www.cachenotes.app/releases/v{{ latest_version() }}.toml</code>
3878
- **GitHub**: release assets on [github.com/rocketware/cache/releases](https://github.com/rocketware/cache/releases)
3979
- **GCP mirror**: <code>https://download.rocketware.io/cache/v{{ latest_version() }}/</code>
4080

41-
### 3. Verify the signature
81+
**3. Verify the signature**
4282

4383
<pre><code>minisign -Vm v{{ latest_version() }}.toml -p cache-minisign.pub</code></pre>
4484

4585
If valid, you'll see: `Signature and comment signature verified`.
4686

47-
### 4. Compare SHA-256
87+
**4. Compare SHA-256**
4888

49-
After verifying the manifest, compare the checksum of your downloaded artifact:
89+
Compare the checksum of your downloaded artifact:
5090

5191
<pre><code>sha256sum cache-{{ latest_version() }}-linux-x64.AppImage</code></pre>
5292

5393
Match the output against the `sha256` field in the manifest for that artifact.
5494

5595
---
5696

57-
## Platform app stores
97+
## App stores
5898

59-
Downloads from the Apple App Store, Google Play, and Microsoft Store are signed through each platform's own trust chain. Minisign verification applies to direct downloads (AppImage, deb, rpm, tar.gz) distributed outside of app stores.
99+
Downloads from Google Play, Apple App Store, and Microsoft Store are signed through each platform's trust chain. The platform verifies integrity before installation — no additional verification is required.

data/downloads.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ latest_version = ""
77
id = "android"
88
name = "Android"
99
icon = "android"
10+
verify_anchor = "android-apk"
1011

1112
[[platforms.downloads]]
1213
id = "play_store"
@@ -38,6 +39,7 @@ icon = "apple"
3839
id = "linux"
3940
name = "Linux"
4041
icon = "linux"
42+
verify_anchor = "linux"
4143

4244
[[platforms.downloads]]
4345
id = "appimage"

sass/style.scss

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@
2424
/* BORDER */
2525
--border-color: oklch(0.915 0.05 285.96);
2626

27+
/* LAYOUT */
28+
--header-h: calc(1.5rem + 40px + 1px); /* padding + toggle height + border */
29+
--content-start: calc(var(--header-h) + 1.5rem);
30+
2731
color-scheme: light;
2832
}
2933

@@ -615,19 +619,32 @@ main {
615619

616620
.download-group {
617621
margin-bottom: 2rem;
618-
scroll-margin-top: 5rem;
622+
scroll-margin-top: var(--content-start);
619623
}
620624

621625
.download-group:last-of-type {
622626
margin-bottom: 0;
623627
}
624628

625629
.download-group-title {
630+
display: flex;
631+
align-items: baseline;
626632
font-size: 1.25rem;
627633
font-weight: 600;
628634
margin: 0 0 0.75rem 0;
629635
}
630636

637+
.download-verify-link {
638+
margin-left: auto;
639+
font-size: 0.75rem;
640+
font-weight: 400;
641+
color: var(--brand-link);
642+
text-decoration: none;
643+
&:hover {
644+
text-decoration: underline;
645+
}
646+
}
647+
631648
.download-verify {
632649
text-align: center;
633650
font-size: 0.875rem;
@@ -1715,21 +1732,21 @@ body.docs {
17151732
.docs-layout {
17161733
grid-template-columns: 220px 1fr;
17171734
gap: 1rem;
1718-
padding: 1rem;
1735+
padding: 1.5rem 1rem 1rem;
17191736
}
17201737

17211738
.docs-sidebar {
17221739
display: block;
17231740
position: sticky;
1724-
top: 60px;
1741+
top: var(--content-start);
17251742
height: fit-content;
1726-
max-height: calc(100vh - 60px);
1743+
max-height: calc(100vh - var(--content-start));
17271744
overflow-y: auto;
17281745
padding: 1rem;
17291746
}
17301747

17311748
.docs-content {
1732-
padding: 0 1rem;
1749+
padding: 1rem 1rem 0;
17331750
min-width: 0;
17341751
}
17351752
}
@@ -1741,21 +1758,21 @@ body.docs {
17411758
gap: 2rem;
17421759
max-width: 1400px;
17431760
margin: 0 auto;
1744-
padding: 2rem;
1761+
padding: 1.5rem 2rem 2rem;
17451762
}
17461763

17471764
.docs-toc {
17481765
display: block;
17491766
position: sticky;
1750-
top: 60px;
1767+
top: var(--content-start);
17511768
height: fit-content;
1752-
max-height: calc(100vh - 60px);
1769+
max-height: calc(100vh - var(--content-start));
17531770
overflow-y: auto;
17541771
padding: 1rem;
17551772
}
17561773

17571774
.docs-content {
1758-
padding: 0;
1775+
padding: 1rem 0 0;
17591776
}
17601777
}
17611778

@@ -1866,12 +1883,14 @@ body.docs {
18661883
font-size: 1.5rem;
18671884
font-weight: 600;
18681885
margin: 2rem 0 1rem 0;
1886+
scroll-margin-top: var(--content-start);
18691887
}
18701888

18711889
.docs-content h3 {
18721890
font-size: 1.25rem;
18731891
font-weight: 600;
18741892
margin: 1.5rem 0 0.75rem 0;
1893+
scroll-margin-top: var(--content-start);
18751894
}
18761895

18771896
.docs-content p {

templates/download.html

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,12 @@ <h1 class="download-title">Download Cache</h1>
99

1010
{% for platform in downloads.platforms %}
1111
<div class="download-group" id="{{ platform.id }}">
12-
<h2 class="download-group-title">{{ platform.name }}</h2>
12+
<h2 class="download-group-title">
13+
{{ platform.name }}
14+
{% if platform.verify_anchor is defined and platform.verify_anchor %}
15+
<a href="/docs/build-verification/#{{ platform.verify_anchor }}" class="download-verify-link">Verify build</a>
16+
{% endif %}
17+
</h2>
1318
<table class="download-table">
1419
<thead>
1520
<tr>

0 commit comments

Comments
 (0)