OpenSourceCheck

OSC-2026-0014 · github.com/bitcoindevkit/bdk_wallet

none-found clean-run grok-4.5 2026-08-04 signed: nostr

Repository
github.com/bitcoindevkit/bdk_wallet
Commit
fc88144fc8e9532bc23ad490cb2de0445401b8b1
Scope path
src/keys/
Model
grok-4.5
Harness
grok-build
Prompts
prompts/entropy-rng-audit-v1.md
Independent runs
1
Transcript sha256
117b7a9e2b9688e46fbf3e1cdd43148406a7ed9feb08d6c8a84b65ebab614a3e
Auditor
TheIcarusWings (theicaruswings)
Signature
nostr-schnorr · npub19tzp8lf3klmqj3dz9mz0qnuvjp7uyy9993gmljmyaxs8phztj7wsnujvq5

Scope. Independent Grok re-audit of the entropy/RNG path feeding BIP-39 mnemonic and key generation in src/keys/ at commit fc88144f. In scope: CSPRNG selection, CryptoRng bound on generate_with_aux_rand, entropy sizing. NOT in scope: descriptor parsing, PSBT, chain sync, FFI, correctness of upstream rand/bip39 crates. Cross-model counterpart to OSC-2026-0002.

Findings

none-found OSC-2026-0014-F1 unreviewed

No CSPRNG-selection defects found in BIP-39/key generation. GeneratableKey::generate_with_aux_rand requires impl CryptoRng + RngCore (src/keys/mod.rs:642-644), fills entropy via rng.fill_bytes, then generate_with_entropy. Default generate() uses bitcoin::key::rand::thread_rng() (mod.rs:636). BIP-39 Mnemonic uses Entropy = [u8; 32] and slices to word_count/8 before Mnemonic::from_entropy_in (bip39.rs:138-146). No silent weak-PRNG fallback; type system rejects non-CryptoRng RNGs. Cross-model agreement with OSC-2026-0002.

src/keys/mod.rs:636-644; src/keys/bip39.rs:138-146