v0.2.5-pre.004-fix.001
This commit is contained in:
@@ -1,12 +1,12 @@
|
|||||||
# file: Cargo.toml
|
# file: Cargo.toml
|
||||||
# version: 148
|
# version: 149
|
||||||
|
|
||||||
[workspace]
|
[workspace]
|
||||||
resolver = "3"
|
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"]
|
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]
|
[workspace.package]
|
||||||
version = "0.2.5-pre.4"
|
version = "0.2.5-pre.4.fix.1"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project"
|
repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# file: crates/ksp-wallet-lib/Cargo.toml
|
# file: crates/ksp-wallet-lib/Cargo.toml
|
||||||
# version: 3
|
# version: 4
|
||||||
|
|
||||||
[package]
|
[package]
|
||||||
name = "ksp-wallet-lib"
|
name = "ksp-wallet-lib"
|
||||||
@@ -8,7 +8,7 @@ edition.workspace = true
|
|||||||
repository.workspace = true
|
repository.workspace = true
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
argon2 = { workspace = true, features = ["zeroize"] }
|
argon2 = { workspace = true, features = ["alloc", "zeroize"] }
|
||||||
chacha20poly1305 = { workspace = true, features = ["alloc", "zeroize"] }
|
chacha20poly1305 = { workspace = true, features = ["alloc", "zeroize"] }
|
||||||
getrandom.workspace = true
|
getrandom.workspace = true
|
||||||
ksp-core-lib = { path = "../ksp-core-lib" }
|
ksp-core-lib = { path = "../ksp-core-lib" }
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
// file: crates/ksp-wallet-lib/tests/dependency_boundary.rs
|
// file: crates/ksp-wallet-lib/tests/dependency_boundary.rs
|
||||||
// version: 4
|
// version: 5
|
||||||
|
|
||||||
//! Wallet-specific dependency and ownership canaries.
|
//! 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-core-lib"));
|
||||||
assert!(manifest.contains("ksp-logging-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("chacha20poly1305 = { workspace = true, features = [\"alloc\", \"zeroize\"] }"));
|
||||||
assert!(manifest.contains("getrandom.workspace = true"));
|
assert!(manifest.contains("getrandom.workspace = true"));
|
||||||
assert!(manifest.contains("base64.workspace = true"));
|
assert!(manifest.contains("base64.workspace = true"));
|
||||||
|
|||||||
172
deltas/0.2.5/pre.004-fix.001.md
Normal file
172
deltas/0.2.5/pre.004-fix.001.md
Normal file
@@ -0,0 +1,172 @@
|
|||||||
|
<!-- file: deltas/0.2.5/pre.004-fix.001.md -->
|
||||||
|
<!-- version: 1 -->
|
||||||
|
|
||||||
|
# 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
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user