Skip to content

Vouch for the app's signing keys, so its links open it - #106

Merged
octopranav merged 2 commits into
mainfrom
verified-links-keys
Oct 3, 2026
Merged

octopranav merged 2 commits into
mainfrom
verified-links-keys

Conversation

@octopranav

@octopranav octopranav commented Oct 3, 2026 •

Copy link
Copy Markdown
Owner

Turns on verified links. A link to https://gridpointcode.com/play opens the Android app directly, instead of the browser.

What changes

web/public/.well-known/assetlinks.json was an empty list. It now names com.gridpointcode and four SHA-256 fingerprints:

Fingerprint What it is
81:FA:A3:B1:…:E6:BD:A9 One of the app's three app signing keys
F5:DF:36:39:…:C5:00:65 One of the app's three app signing keys
2B:FF:F9:E7:…:05:EE:A0 One of the app's three app signing keys
DB:42:9E:40:…:B0:70:A8:C5 The upload key, so a release signed with it and installed by hand verifies too

Play signs a new app with quantum-ready hybrid signing, so it has three app signing keys: a classical one for devices before Android 17, and from Android 17 a classical and a post-quantum one signing together. Google's help asks for all three in assetlinks.json. Android developer verification lists the same three, and Play Console shows them under Protected with Play, Play Store distribution, Play app signing. None of them is the upload key or this machine's debug key.

Checks

  • audit/assetlinks.py: "the site vouches for com.gridpointcode signed with 4 keys, and the app asks it to". Its unit tests pass.
  • audit/markdown.py passes.
  • The README's verified-links note moves out of "Not here yet", and PLAY.md's checklist marks the step done.

After it deploys

The Pages workflow deploys on any change under web/. Once it's live, uninstall the app, reinstall it from the Play internal test, and run:

adb shell pm get-app-links com.gridpointcode

It should say verified for gridpointcode.com. A device that checked while the file was empty keeps that answer until the app is reinstalled.

The site now answers /.well-known/assetlinks.json with com.gridpointcode and
the keys it may be signed with: the three Google holds for the app, as Play
Console's Android developer verification lists them, the app signing key
among them, and the upload key, so a release signed here and installed by
hand verifies too. Until now the file was an empty list, and a link to
gridpointcode.com/play opened in the browser.

audit/assetlinks.py passes: the site vouches for com.gridpointcode signed
with four keys, and the app's manifest asks it to. The README's note that
verified links waited for the key moves out of Not here yet, and PLAY.md's
checklist marks the step done.
Play signs a new app with quantum-ready hybrid signing: a classical key for
devices before Android 17, and a classical and a post-quantum key together
from Android 17. All three are app signing keys, which is why Android
developer verification lists three, and Google's help asks for all three in
assetlinks.json, as the file already has them. The README and PLAY.md now
say so, and give the page Play Console shows them on.
@octopranav
octopranav merged commit bb4a7fd into main Oct 3, 2026
62 of 66 checks passed
@octopranav
octopranav deleted the verified-links-keys branch October 3, 2026 15:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant