Files
khadhroony-bot3/docs/validation/V0_5_2_WALLET_VALIDATION_REPORT.md
2026-08-11 15:15:03 +02:00

7.2 KiB

Validation ks-wallet — clôture 0.5.2

1. Périmètre

0.5.2 transforme ks-wallet en frontière Solana réutilisable pour :

  • wallets temporaires en mémoire ;
  • plusieurs wallets persistants accessibles par alias ;
  • conteneur natif .kswallet binaire, versionné et protégé par mot de passe ;
  • capacité de signature sans exposition des bytes privés ;
  • migration/inspection legacy ;
  • import/export Solana CLI JSON et Base58 ;
  • sélection non sensible depuis ks-config ;
  • validation intégrée indépendante de Tauri via ks-wallet-demo-scenarios ;
  • intégration opérateur desktop via DTO applicatifs sûrs.

La version ne transforme pas ks-wallet en client RPC et ne migre pas en masse les keypairs de fixtures sous wallets/temporary/**.

2. Organisation des données

La séparation validée est :

wallets/
  <alias>.kswallet
  temporary/<profil>/...

data/wallets/
  <exports JSON/Base58 explicites>
  • wallets/ : store natif persistant ;
  • wallets/temporary/** : fixtures/keypairs historiques ou jetables ;
  • data/wallets/ : exports secrets explicites destinés à des outils externes.

Le desktop n'utilise pas data/wallets/ comme store natif automatique.

3. Format natif et sécurité

Le format v1 validé utilise :

Contrat Valeur
Extension .kswallet
Magic KSWALLET
KDF Argon2id v19
Profil par défaut 64 MiB / 3 passes / 4 lanes
AEAD XChaCha20-Poly1305
Sel 16 octets
Nonce 24 octets
Plaintext keypair Solana exacte de 64 octets
Ciphertext + tag 80 octets
AAD header + alias + sel + nonce
Répertoire Unix 0700
Fichier Unix 0600

Le codec rejette versions/algorithmes inconnus, réserves non nulles, troncatures, suffixes, longueurs incorrectes et paramètres KDF hors bornes. La pubkey du header n'est considérée authentifiée qu'après déchiffrement et comparaison avec la pubkey réellement dérivée du keypair.

La prerelease de clôture retire également les chemins locaux inutiles du Debug, des logs et des erreurs du TemporaryWalletStore legacy et ajoute un canari externe de non-divulgation.

4. Cycle de vie du mot de passe

Les surfaces validées comprennent :

  • création native ;
  • unlock par alias ;
  • unlock d'un fichier externe inspecté explicitement ;
  • signature avec UnlockedWallet ;
  • lock() par consommation ;
  • changement de mot de passe avec conservation exacte de l'alias/pubkey ;
  • refus de l'ancien mot de passe ;
  • altération des données authentifiées refusée avant capacité de signature ;
  • refus d'écrasement natif ;
  • test concurrent de création d'un même alias avec un seul gagnant et une destination valide.

ks-wallet-demo-scenarios valide le cycle ordonné suivant dans un seul test indépendant de Tauri :

A -> B
A doit échouer
B ouvre et signe
B -> A
A restauré ouvre et signe

La fixture est synthétique et temporaire ; aucun wallet réel de l'opérateur n'est modifié.

5. Migration et transferts

Les tests externes valident :

  • migration legacy <alias>.json non destructive ;
  • conservation exacte de la pubkey ;
  • inspection d'un fichier de transfert sans import ;
  • import/export SolanaCliJson ;
  • import/export SolanaPrivateKeyBase58 ;
  • refus des sources invalides ;
  • collision de pubkey ;
  • export impossible avec un mauvais mot de passe ;
  • permissions privées ;
  • absence d'écrasement silencieux.

Aucune recovery phrase n'est synthétisée depuis une keypair arbitraire.

La validation opérateur a confirmé les exports :

data/wallets/local-devnet-operator2.json
data/wallets/local-devnet-operator2.txt

6. Configuration et signer Devnet

wallet.config.json sépare wallets_directory de profile.directory :

wallet_dir = wallets
temporary_wallet_dir = wallets/temporary/<profil>

Un profil peut définir wallet_alias, sans mot de passe. Le desktop peut aussi définir un override session-only par profil Devnet. La résolution effective est runtime override -> alias configuré -> temporaire seulement lorsqu'aucun alias persistant n'est sélectionné.

La validation opérateur a confirmé que les démos Devnet utilisent bien le .kswallet sélectionné avec une trace persistence="persistent", au lieu du JSON temporaire.

7. Desktop Wallets

La fenêtre Wallets couvre : inventaire, création, inspection externe, inspection/import de keypairs, export borné sous data/wallets/, sélection de profil RPC, balance SOL, comptes SPL Token/Token-2022, signatures récentes, détail de transaction et sélection session-only du wallet d'exécution.

Les secrets restent backend-only via KB_SECRET_DEMO_WALLET_PASSWORD; aucun password n'entre dans HTML, TypeScript ou les DTO Tauri.

8. Validation workspace — base 0.5.2-pre.006 + fix-010

L'opérateur a validé :

cargo fmt --all
cargo check --workspace
cargo clippy --all-targets
python3 scripts/audit_rust_workspace_rules.py
cargo test --workspace

Résultats :

  • cargo check --workspace : succès ;
  • cargo clippy --all-targets : succès sans warning ;
  • audit Rust général : clean ;
  • export completeness : 0 candidate(s) ;
  • audit Khadhroony workspace : clean ;
  • cargo test --workspace : succès sur toutes les crates et doc-tests ;
  • kb-app-demo-desktop : 185 tests ;
  • ks-config : 35 tests ;
  • ks-lib : 606 tests ;
  • ks-logging : 25 tests ;
  • ks-onchain-transport : 124 tests ;
  • ks-pipeline : 109 tests ;
  • ks-pipeline-demo-scenarios : 109 tests + 2 tests CLI ;
  • ks-program-ids : 6 tests ;
  • ks-store : 84 tests ;
  • ks-wallet : 22 unitaires + 7 legacy + 3 password natif + 2 API publique + 6 transfert ;
  • ks-wallet-demo-scenarios : 1 test d'intégration password ;
  • doc-tests : succès.

La pre.007 ajoute seulement les canaris de non-divulgation legacy, le test concurrent natif et la clôture documentaire ; elle doit donc être rejouée avec la campagne standard avant le passage à 0.5.2 final.

9. Reports explicites

0.5.4

  • diagnostiquer/réparer la régression unable to read configured Token-2022 fixture observée après la séparation des racines wallet/fixtures ;
  • scanner/inventorier bornément wallets/temporary/** ;
  • extraire format/validité/pubkey sans inventer de rôle métier ;
  • migrer sélectivement les signers devant devenir persistants ;
  • laisser toute classification on-chain au consommateur, sans dépendance ks-wallet -> ks-onchain-transport.

Version ultérieure non déterminée

  • nouveaux formats Backpack, Trust Wallet, Solflare Keystore ou autres uniquement lorsqu'un wire suffisamment spécifié peut être validé et testé.

10. Statut

Base fonctionnelle 0.5.2-pre.006 + fix-010 validée. 0.5.2-pre.007 est la prerelease de clôture à valider avant la release finale 0.5.2.