fix: 1.0.2 hotfix — heal wallets broken by per-build random crypto secrets

CI ran tool/generate_new_secrets.dart unpinned, so every release binary
shipped different AES keys/salts for the stored PIN and wallet passwords.
Updating the app then failed to decrypt what the previous build stored:
'Invalid or corrupted pad block' at PIN entry and the 'Corrupted seeds'
dialog, with wallet files fully intact.

- entities/encrypt.dart: legacy-key fallback decode for PIN and wallet
  password blobs (candidate sets recovered from the shipped 1.0.1 binary;
  output validated to reject PKCS7 false positives)
- key_service/auth_service: on successful legacy decode, re-encrypt under
  the pinned key — installs self-heal at first unlock
- all build workflows: inject the eight pinned CRYPTO_* repo secrets after
  secret generation and hard-fail if any is missing, so crypto salts can
  never silently rotate again (values pinned via
  ~keys/set-gitea-crypto-secrets.sh)
- bump 1.0.2+12
This commit is contained in:
jwinterm
2026-08-29 14:53:18 -04:00
parent 8db45c5842
commit d8aab70fa7
9 changed files with 282 additions and 3 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
name: hash_wallet
description: Hash Bags — a noncustodial multi-currency wallet by Such Software LLC.
version: 1.0.1+11
version: 1.0.2+12
publish_to: none
environment: