From a0a559518667bc6b89b5eed933c9f4f3948e3992 Mon Sep 17 00:00:00 2001 From: SinuS Von SifriduS Date: Wed, 19 Aug 2026 11:37:36 +0200 Subject: [PATCH] v0.2.5-pre.004-fix.001 --- Cargo.toml | 4 +- crates/ksp-wallet-lib/Cargo.toml | 4 +- .../tests/dependency_boundary.rs | 4 +- deltas/0.2.5/pre.004-fix.001.md | 172 ++++++++++++++++++ 4 files changed, 178 insertions(+), 6 deletions(-) create mode 100644 deltas/0.2.5/pre.004-fix.001.md diff --git a/Cargo.toml b/Cargo.toml index 7f66eb3..1fd8e89 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,12 +1,12 @@ # file: Cargo.toml -# version: 148 +# version: 149 [workspace] resolver = "3" members = ["crates/ksp-app-config-desk", "crates/ksp-config-lib", "crates/ksp-core-lib", "crates/ksp-logging-lib", "crates/ksp-onchain-transport-lib", "crates/ksp-wallet-lib"] [workspace.package] -version = "0.2.5-pre.4" +version = "0.2.5-pre.4.fix.1" edition = "2024" license = "MIT" repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project" diff --git a/crates/ksp-wallet-lib/Cargo.toml b/crates/ksp-wallet-lib/Cargo.toml index 9daf94b..604e265 100644 --- a/crates/ksp-wallet-lib/Cargo.toml +++ b/crates/ksp-wallet-lib/Cargo.toml @@ -1,5 +1,5 @@ # file: crates/ksp-wallet-lib/Cargo.toml -# version: 3 +# version: 4 [package] name = "ksp-wallet-lib" @@ -8,7 +8,7 @@ edition.workspace = true repository.workspace = true [dependencies] -argon2 = { workspace = true, features = ["zeroize"] } +argon2 = { workspace = true, features = ["alloc", "zeroize"] } chacha20poly1305 = { workspace = true, features = ["alloc", "zeroize"] } getrandom.workspace = true ksp-core-lib = { path = "../ksp-core-lib" } diff --git a/crates/ksp-wallet-lib/tests/dependency_boundary.rs b/crates/ksp-wallet-lib/tests/dependency_boundary.rs index b136142..3258b9d 100644 --- a/crates/ksp-wallet-lib/tests/dependency_boundary.rs +++ b/crates/ksp-wallet-lib/tests/dependency_boundary.rs @@ -1,5 +1,5 @@ // file: crates/ksp-wallet-lib/tests/dependency_boundary.rs -// version: 4 +// version: 5 //! Wallet-specific dependency and ownership canaries. @@ -40,7 +40,7 @@ fn wallet_manifest_preserves_dependency_firewall() -> std::io::Result<()> { }; assert!(manifest.contains("ksp-core-lib")); assert!(manifest.contains("ksp-logging-lib")); - assert!(manifest.contains("argon2 = { workspace = true, features = [\"zeroize\"] }")); + assert!(manifest.contains("argon2 = { workspace = true, features = [\"alloc\", \"zeroize\"] }")); assert!(manifest.contains("chacha20poly1305 = { workspace = true, features = [\"alloc\", \"zeroize\"] }")); assert!(manifest.contains("getrandom.workspace = true")); assert!(manifest.contains("base64.workspace = true")); diff --git a/deltas/0.2.5/pre.004-fix.001.md b/deltas/0.2.5/pre.004-fix.001.md new file mode 100644 index 0000000..ae06042 --- /dev/null +++ b/deltas/0.2.5/pre.004-fix.001.md @@ -0,0 +1,172 @@ + + + +# Delta `0.2.5-pre.004-fix.001` — activation `alloc` pour Argon2id raw KDF + +## Base requise + +```text +livraison : 0.2.5-pre.004 +workspace.package.version = "0.2.5-pre.4" +``` + +La base opérateur conserve les réorganisations déjà appliquées dans `crates/ksp-wallet-lib/src/constants.rs` et `crates/ksp-wallet-lib/src/lib.rs`. Ce fix ne touche pas ces fichiers. + +## Motif + +La validation opérateur de `pre.004` échoue à la compilation de `ksp-wallet-lib` : + +```text +error[E0599]: no method named `hash_password_into` found for struct `Argon2<'key>` +crates/ksp-wallet-lib/src/crypto.rs:177 +``` + +Le `cargo tree -e features -p ksp-wallet-lib` fourni par l'opérateur montre que `argon2 0.5.3` est activé uniquement avec : + +```text +argon2 feature "zeroize" +``` + +Or l'API `Argon2::hash_password_into` utilisée par la tranche est disponible dans `argon2 0.5.3` avec la feature `alloc`. La livraison `pre.004` avait donc correctement désactivé les default-features au niveau workspace mais omis d'activer localement la feature nécessaire à l'API effectivement consommée. + +Ce défaut de feature-set empêche : + +```text +cargo check --workspace +cargo clippy --workspace --all-targets +cargo test -p ksp-wallet-lib +``` + +avant l'exécution des tests Wallet. + +## Correction + +Le manifest Wallet passe de : + +```toml +argon2 = { workspace = true, features = ["zeroize"] } +``` + +à : + +```toml +argon2 = { workspace = true, features = ["alloc", "zeroize"] } +``` + +La déclaration commune reste inchangée dans le `Cargo.toml` racine : + +```toml +argon2 = { version = "^0.5", default-features = false } +``` + +Cela respecte la politique KSP : la version reste possédée par `[workspace.dependencies]`, tandis que la crate membre active uniquement les features nécessaires à sa consommation locale. + +Aucune API crypto, aucun paramètre Argon2, aucun wire `.kspwallet`, aucun vecteur et aucune sémantique de sécurité ne changent. + +## Canary de dépendances + +`crates/ksp-wallet-lib/tests/dependency_boundary.rs` est mis à jour afin d'exiger explicitement : + +```text +argon2 = { workspace = true, features = ["alloc", "zeroize"] } +``` + +Le canary continue d'interdire les dépendances directes Wallet vers Config, Transport, ExecutionPolicy, Store, Tauri, `tracing` et `solana-pubkey`. + +## Version Cargo + +Le correctif modifie le graphe de features participant à la compilation et un test Rust : + +```text +0.2.5-pre.4 -> 0.2.5-pre.4.fix.1 +``` + +## Fichiers modifiés + +```text +Cargo.toml +crates/ksp-wallet-lib/Cargo.toml +crates/ksp-wallet-lib/tests/dependency_boundary.rs +``` + +## Fichiers ajoutés + +```text +deltas/0.2.5/pre.004-fix.001.md +``` + +## Fichiers supprimés + +Aucun. + +## Audit `cargo tree` pré-fix enregistré + +Les sorties opérateur de `pre.004` confirment : + +```text +argon2 0.5.3 -> Wallet direct +chacha20poly1305 0.11.0 -> Wallet direct +getrandom 0.4.3 -> Wallet direct + uuid/Tauri ailleurs dans le workspace +base64 0.23.1 -> Wallet direct uniquement pour cette génération +zeroize 1.9.0 -> partagé par Wallet et plusieurs branches crypto/TLS +``` + +Le sous-arbre Wallet présente plusieurs générations transitives de briques RustCrypto (`block-buffer`, `cpufeatures`, `crypto-common`) provenant respectivement de la pile Argon2 `0.5.3` et de la pile XChaCha20-Poly1305 `0.11.0`. Elles sont transitives et correspondent aux générations stables actuellement retenues ; ce fix ne tente pas de les forcer ou de les unifier artificiellement. + +## Validation attendue après application + +```bash +cargo fmt --all +cargo check --workspace +cargo clippy --workspace --all-targets +cargo test -p ksp-wallet-lib +cargo test --workspace +``` + +Audit du sous-arbre Wallet : + +```bash +cargo tree -p ksp-wallet-lib +cargo tree -p ksp-wallet-lib -d +cargo tree -e features -p ksp-wallet-lib +cargo tree -i argon2@0.5.3 +cargo tree -i chacha20poly1305@0.11.0 +cargo tree -i getrandom@0.4.3 +cargo tree -i base64@0.23.1 +cargo tree -i zeroize@1.9.0 +``` + +Le contrôle feature doit notamment faire apparaître : + +```text +argon2 feature "alloc" +argon2 feature "zeroize" +``` + +Une fois les validations normales propres, le benchmark opérateur de `pre.004` peut enfin être exécuté : + +```bash +cargo test -p ksp-wallet-lib benchmark_argon2_creation_candidates -- --ignored --nocapture --test-threads=1 +``` + +Son résultat reste nécessaire avant de figer le profil Argon2 de création dans la tranche suivante. + +## Décisions + +- activer `alloc` localement dans `ksp-wallet-lib` plutôt que réactiver les default-features Argon2 globalement ; +- conserver `zeroize` ; +- ne modifier ni `crypto.rs`, ni les paramètres Argon2, ni le format V1 ; +- renforcer le canary de manifest pour empêcher une régression identique ; +- ne pas élargir le périmètre fonctionnel de `pre.004`. + +## Questions ouvertes + +Aucune nouvelle question fonctionnelle introduite par ce correctif. + +Le choix du profil Argon2 de création reste volontairement ouvert jusqu'au benchmark opérateur prévu par `pre.004`. + +## Commit attendu + +```text +v0.2.5-pre.004-fix.001 +```