v0.5.2-pre.007

This commit is contained in:
2026-08-11 15:15:03 +02:00
parent 56572cec40
commit 279fd67cc0
27 changed files with 1151 additions and 143 deletions

View File

@@ -1,13 +1,13 @@
<!-- file: ks-wallet/README.md -->
<!-- version: 13 -->
<!-- version: 14 -->
# ks-wallet
`ks-wallet` fournit la frontière wallet Solana générale du workspace Khadhroony.
## État actuel
## Contrat `0.5.2`
En `0.5.2-pre.005`, la crate sait en plus migrer sans destruction un legacy Solana JSON, importer/exporter le format Solana CLI JSON et transférer un keypair complet via le format privé Base58 utilisé comme adaptateur tiers de référence pour Phantom. La dérivation Argon2id et le chiffrement authentifié XChaCha20-Poly1305 restent la protection du conteneur natif `.kswallet`.
`ks-wallet` constitue la frontière générale de stockage, authentification et signature des wallets Solana du workspace. Le format persistant recommandé est `.kswallet`; le JSON Solana historique reste une compatibilité legacy et une source d'import.
La crate fournit actuellement :
@@ -40,25 +40,11 @@ La crate fournit actuellement :
La persistance legacy écrit encore directement le contenu dans le chemin final : elle n'est pas une publication atomique crash-safe par fichier temporaire + renommage.
## Cible `0.5.2`
## Format natif et compatibilité
`ks-wallet` doit devenir capable de :
Le format `.kswallet` utilise Argon2id v19 pour la dérivation depuis le mot de passe et XChaCha20-Poly1305 pour le chiffrement authentifié. Le layout normatif est documenté dans [`../docs/NATIVE_FORMAT.md`](../docs/NATIVE_FORMAT.md). Le payload secret v1 est exactement la keypair Solana brute de 64 octets ; le header, l'alias, le sel et le nonce sont authentifiés comme AAD avant qu'une capacité `UnlockedWallet` puisse être produite. Changer le mot de passe ne change jamais la keypair/pubkey.
- découvrir dans le store les fichiers `<alias>.kswallet` valides et gérer plusieurs wallets persistants accessibles par alias ;
- conserver des wallets temporaires/jetables pour tests et scénarios ;
- stocker les wallets persistants dans un format natif binaire `<alias>.kswallet` ;
- protéger chaque wallet persistant par un mot de passe modifiable ;
- fournir une capacité de signature sans exposer les bytes privés ;
- importer le format legacy et d'autres formats explicitement supportés ;
- exporter volontairement vers des formats externes supportés ;
- exiger un mot de passe valide pour tout export contenant le secret ;
- préserver exactement la même keypair lors d'un changement de mot de passe ;
- importer et exporter obligatoirement le format keypair JSON des binaires Solana ;
- documenter les formats compatibles des principaux wallets Solana, implémenter un adaptateur tiers d'exemple et reporter les autres au TODO.
Le format `.kswallet` est propre à `ks-wallet`, mais sa protection cryptographique utilise des primitives établies : Argon2id v19 pour la dérivation depuis le mot de passe et XChaCha20-Poly1305 pour le chiffrement authentifié. Le layout normatif est documenté dans [`../docs/NATIVE_FORMAT.md`](../docs/NATIVE_FORMAT.md). Le payload secret v1 est exactement la keypair Solana brute de 64 octets ; avec le tag AEAD, le ciphertext est fixé à 80 octets. Le header, l'alias, le sel et le nonce sont authentifiés comme AAD avant qu'une capacité `UnlockedWallet` puisse être produite. Changer le mot de passe ne change jamais la keypair : une modification réelle du secret Ed25519 produirait une autre pubkey et donc un autre wallet. Le changement du mot de passe reprotège le fichier persistant ; il ne révoque pas une capacité `UnlockedWallet` déjà détenue par un consommateur, qui doit être explicitement `lock()`/dropée selon son propre cycle de vie.
Le scan automatique reste strictement borné au répertoire fourni à `WalletManager`. Un programme peut néanmoins demander l'inspection d'un autre fichier `.kswallet` choisi explicitement, par exemple via un file browser desktop, puis l'ouvrir avec `unlock_file()` et le mot de passe fourni. Ces opérations ne modifient pas le store et ne rendent pas le chemin public.
Le scan automatique reste strictement borné au répertoire fourni à `WalletManager`. Un programme peut inspecter explicitement un autre `.kswallet` puis l'ouvrir avec `unlock_file()` sans modifier le store. Les erreurs, logs et `Debug` du store JSON legacy ne projettent plus ses chemins locaux.
## Relations
@@ -77,5 +63,6 @@ Une application desktop doit projeter les informations autorisées dans ses prop
- [USAGE.md](USAGE.md)
- [TODO.md](TODO.md)
- [CHANGELOG.md](CHANGELOG.md)
- [plan temporaire `0.5.2`](../docs/plans/V0_5_2_KS_WALLET_RESTRUCTURING_PLAN.md)
- [Guide wallets](../docs/guides/WALLETS.md)
- [Rapport de validation 0.5.2](../docs/validation/V0_5_2_WALLET_VALIDATION_REPORT.md)
- [ROADMAP général](../ROADMAP.md)