Ooga-Booga-Fuzz: Entropylab Coverage Matrix

Test

Current state — all meaningful exports covered

#bitcoinfuzz targetentropylab-wasm exportJS facadeStatus
1bip32_master_keygenel_hd_masterhdkey.js✅
2bip32_deserialize_extended_keyel_b58check_decode + el_hd_validatehdkey.js + base58.js✅
3bip32_derive_from_pathel_hd_master + el_hd_ckd_privhdkey.js✅
4pubkey_parsesecp_point_parse_serializesecp256k1.js✅
5private_to_public_keysecp_pubkey_createsecp256k1.js✅
6sign_compactsecp_signsecp256k1.js✅
7sign_verifysecp_verify (via derived pubkey)secp256k1.js✅
8sign_dersecp_sign + DER serializesecp256k1.js✅
9point_addsecp_point_addsecp256k1.js✅
10point_mulsecp_point_mulsecp256k1.js✅
11descriptor_parseel_desc_derivecore-importdescriptors.js✅
12miniscript_parseminiscript::Miniscript::from_strcore-importdescriptors.js✅
13transaction_evalel_tx_parsetx.js✅
14sighash_computeel_sighash_segwit_v0tx.js✅
15address_parsebech32::decode + el_b58check_decodeaddresses.js✅
16bech32_roundtripbech32::encode + bech32::decodebech32.js✅
17bech32_convert_bitsManual 5 ↔ 8 bit regroupingbech32.js✅
18hd_ckd_pubel_hd_ckd_pubhdkey.js✅
19bip39_mnemonic_roundtripel_bip39_entropy_to_mnemonic ↔ el_bip39_mnemonic_to_entropybip39.js✅
20bip39_validateel_bip39_validatebip39.js✅
21aezeed_decipherel_aezeed_decipheraezeed.js✅
22scrypt_kdfel_scryptaezeed.js✅
23script_build_roundtripel_spk_* + el_script_* + el_addr_from_scriptaddresses.js✅
24base58_roundtripel_b58check_encode + el_b58check_decodebase58.js✅

Legend

SymbolMeaning
✅Implemented and running
📝Planned — good differential-fuzz value, needs a partner module or driver target
❌Intentionally omitted — deterministic / no differential partner / trivial

Hashes (`hashes.js`) — ❌ intentionally omitted

ExportStatusRationale
el_sha256❌Deterministic; no differential partner
el_sha512❌—
el_ripemd160❌—
el_hash160❌—
el_hmac_sha512❌—
el_pbkdf2_hmac_sha512❌—

Base58Check (`base58.js`) — ✅ fully covered

ExportStatusNotes
el_b58check_encode✅Covered by base58_roundtrip
el_b58check_decode✅Covered by base58_roundtrip

Transitively covered (same underlying implementation, different FFI entry point)

ExportStatusNotes
el_bech32m_encode✅Same bech32 crate path as bech32_roundtrip; thin wrapper
el_bech32m_decode✅Same bech32 crate path as bech32_roundtrip / address_parse; thin wrapper
el_tx_parse✅Same Transaction::consensus_decode_from_finite_reader path as transaction_eval

Misc — ❌ intentionally omitted

ExportStatusRationale
secp_seckey_valid❌Trivial 32-byte range check
secp_sig_normalize❌Only meaningful as post-processing of sign_compact; no standalone target needed
el_bip39_word_at❌Pure wordlist lookup; upstream crate test coverage is sufficient

GH Pages build → fuzz target matrix

JS facadeWASM exportsFuzz target(s)Coverage %
secp256k1.jssecp_*pubkey_parse, private_to_public_key, sign_compact, sign_verify, sign_der, point_add, point_mul~90 %
hashes.jsel_sha256, el_sha512, el_hash160, el_ripemd160, el_hmac_sha512, el_pbkdf2_hmac_sha512*None yet*0 %
hdkey.jsel_hd_master, el_hd_ckd_priv, el_hd_ckd_pub, el_hd_validatebip32_master_keygen, bip32_deserialize_extended_key, bip32_derive_from_path, hd_ckd_pub~95 %
bip39.jsel_bip39_*bip39_mnemonic_roundtrip, bip39_validate~75 %
base58.jsel_b58check_*base58_roundtrip~90 %
bech32.jsel_bech32m_*bech32_roundtrip, bech32_convert_bits✅ 100 %
addresses.jsel_spk_*, el_script_*, el_addr_from_scriptscript_build_roundtrip, descriptor_parse, miniscript_parse, address_parse~95 %
tx.jsel_tx_parse, el_sighash_segwit_v0transaction_eval, sighash_compute✅ 100 %
aezeed.jsel_aezeed_decipher, el_scryptaezeed_decipher, scrypt_kdf~90 %
core-importdescriptors.jsel_desc_derivedescriptor_parse, miniscript_parse✅ 100 %