Skip to content

rs-platform-wallet-storage: expose fast/mock Argon2id KDF params for downstream integration tests #4111

Description

@lklimek

Problem

dash-evo-tool's wallet_backend test suite drives real end-to-end flows against platform_wallet_storage::secrets::SecretStore (set/get/set_secret/get_secret/reprotect — see packages/rs-platform-wallet-storage/src/secrets/store.rs). These are the only public entry points; all of them derive keys via Argon2::default() at the real production strength (64 MiB memory cost). There is no public way for a downstream crate to inject faster KDF parameters for testing.

rs-platform-wallet-storage's own test suite already has this capability internally — crate::secrets::file::crypto::KdfParams plus a pub(crate) floor() helper and envelope::wrap_with_params(..., floor()) (see store.rs around the "Argon2id floor params — fast enough for these tests" comment) — but it is not exposed outside the crate.

Impact

In dash-evo-tool, ~55 tests across wallet_backend::{secret_access, identity_key_store, single_key, det_signer, hydration, secret_seam, wallet_seed_store} each pay one or more real Argon2id derivations. Individually 5-23s each; some tests do multiple derivations (password change, wrong-password retry, tier migration) and run 15-23s. These tests correctly exercise real crypto-shaped behavior (wrong password, tier migration, isolation) but the KDF cost is orthogonal to what they're actually asserting.

Request

Expose a public, feature-gated (e.g. #[cfg(any(test, feature = "test-util"))]) constructor or builder on SecretStore (or the envelope/wrap layer) that accepts injectable KdfParams, mirroring the existing internal floor() test helper. This lets downstream integration-test suites opt into fast KDF params without touching the production default-strength path.

Context

Surfaced while auditing dash-evo-tool test suite timing on feat/v1.0-parity-batch (stacked on #882). Filed by request as a tracked follow-up rather than blocking that PR — the affected DET tests will be marked #[ignore] referencing this issue until it lands.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions