66 lines
4.2 KiB
Markdown
66 lines
4.2 KiB
Markdown
<!-- file: ks-wallet/README.md -->
|
|
<!-- version: 9 -->
|
|
|
|
# ks-wallet
|
|
|
|
`ks-wallet` fournit la frontière wallet Solana générale du workspace Khadhroony.
|
|
|
|
## État actuel
|
|
|
|
En `0.5.2-pre.003`, la crate possède désormais le décodage/validation stricts du format binaire `.kswallet` v1 nécessaires au scan. L'encodage de création, la publication atomique, le password et le chiffrement/déchiffrement réel restent pour `pre.004`; le legacy Solana JSON reste utilisé par les consommateurs historiques pendant la transition.
|
|
|
|
La crate fournit actuellement :
|
|
|
|
- alias validés ;
|
|
- identité publique minimale `WalletIdentity` sans chemin local ;
|
|
- `WalletManager` pour scanner/lookup les `.kswallet` structurellement valides du répertoire configuré ;
|
|
- inspection explicite d'un `.kswallet` sélectionné hors du store via un handle opaque ;
|
|
- décodage v1 strict avec identité publique déclarée, paramètres KDF/AEAD bornés et payload keypair de taille exacte ;
|
|
- wallet temporaire en mémoire ;
|
|
- stockage legacy local JSON d'un keypair Solana ;
|
|
- création exclusive avec refus d'écrasement et reprise des courses `load_or_create` ;
|
|
- résumé/identité sans matériau cryptographique secret ni chemin local ;
|
|
- accès au trait `Signer` sans exposition des octets ;
|
|
- signature de messages ;
|
|
- permissions Unix privées et contrôles de fichiers ;
|
|
- effacement des buffers secrets temporaires utilisés lors de la lecture ou écriture.
|
|
|
|
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`
|
|
|
|
`ks-wallet` doit devenir capable de :
|
|
|
|
- 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 : le format v1 fixe Argon2id v19 et XChaCha20-Poly1305. 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. `pre.003` ne réalise encore aucune dérivation ni encryption réelle. 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 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 ; cette opération ne modifie pas le store et ne rend pas le chemin public.
|
|
|
|
## Relations
|
|
|
|
`ks-wallet` possède et gère le wallet. Les exécuteurs et `ks-lib` doivent dépendre d'une capacité de signature, pas du format de stockage ni des octets privés.
|
|
|
|
`ks-config` peut sélectionner un alias ou une identité non sensible, mais ne stocke aucun mot de passe ni matériau secret.
|
|
|
|
Une application desktop doit projeter les informations autorisées dans ses propres DTO Tauri ; `ks-wallet` ne réintroduit pas TS-RS.
|
|
|
|
## Documentation
|
|
|
|
- [Format natif `.kswallet`](../docs/NATIVE_FORMAT.md)
|
|
- [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)
|
|
- [ROADMAP général](../ROADMAP.md)
|