What signing a Litecoin message proves — research package v1.0.0

ORIGINAL SOFTWARE EXPERIMENT
Pinned Litecoin Core 0.21.5.8. Actual UTC run: 15 October 2026, 22:53:18–22:53:22
(16 October at 00:53 Europe/Warsaw). One fresh regtest node, peer networking
disabled, loopback RPC, two fresh wallets and zero funds. No blocks were mined
and no payment was created. The original challenge explicitly expired on
15 October at 00:00:00 UTC, before the experiment. Core nevertheless returned
true for the exact message/address/signature, including an identical replay.

MEASURED CASES
11 verifymessage calls: exact legacy true; modified purpose false; wrong
legacy address false; identical replay true; substituted nonce false;
appended LF false; LF-to-CRLF false; appended space false; exact UTF8 true;
visually similar NFD-normalized Unicode false; newly signed fresh challenge
true. Unsupported native-SegWit signmessage returned error −3, Address does
not refer to key. A wallet containing only an imported public legacy address
returned error −4, Private key not available. These are capability errors,
not Boolean verifier-false outcomes and not claims about every wallet or
message-signing protocol. Signer balance was zero before and after signing.
32 experiment assertions passed. The recorded own-node exit code is 0 and
cleanup flags state that its fresh data directory was removed.

SEPARATE APPLICATION MODEL
application-model.json contains six explicitly labeled deterministic cases
for a fictional application policy. The model compares expected site, purpose,
address and nonce, then expiry and previously consumed nonces. It is not Core
functionality, a login implementation or evidence of any real service behavior.
The reference checked_at time is frozen. The fixed 64-hex test nonces are
public fixtures, not suitable nonces for a real authentication deployment.
A real application must generate its own unpredictable one-use challenges
and enforce its full policy in an authenticated, stateful implementation.

OFFLINE VERIFICATION
Python 3.10 or later, standard library only; no network, Core binary or wallet:
  python verify.py.txt
The script verifies SHA256SUMS, recovers public keys using compact secp256k1
ECDSA signatures over the Litecoin message hash, compares regtest P2PKH
addresses, and independently reproduces all 11 true/false cases. It checks
exact UTF8 bytes, the CSV, recorded RPC outcomes, and the separate application
model. It checks recorded shutdown/cleanup flags, not a former remote process.
The small pure-Python crypto implementation processes only public fixture data;
it is educational and unaudited. Do not use it as a production authentication
component. Hash consistency is not an authenticity or security certification.

FRESH REPRODUCTION
Only in a disposable environment with the pinned Linux binaries:
  python reproduce.py.txt /path/litecoind /path/litecoin-cli new-output-directory
The script creates its own directory and wallets; it accepts no existing wallet,
seed, configuration or RPC credential. A 75-second work alarm allows bounded
shutdown; the private runner additionally limits the process group to at most
90 seconds. All RPC connections are loopback and peer networking is disabled.
Fresh keys, signatures and actual future expiry timestamps can differ. The
offline verifier checks the published frozen run, not byte identity of reruns.

BINARY SHA256
litecoind 63fb440cdc5e2e7d46144b8e3a47dab4725fa9c056a77b8b12b11854504f4838
litecoin-cli d185011cc0dbb5d2dd20611e9dc060dbb0a5d9be31a03f57da5dbd3dad4c3769
Source provenance and source-file hashes are in sources.json. Pinned bytes
identify the tested runtime; no independent reproducible-build claim is made.

PRIVACY AND LIMITS
The package contains generated zero-funded public regtest addresses, readable
messages, signatures and public wallet metadata. No private key, seed, wallet
file, private descriptor, authentication cookie or production account appears.
getaddressinfo can include generated PUBLIC key/descriptor data. No private
material was exported. Public signatures may be copied and replayed; fixtures
must never be used as a real account proof or a request to send funds.
This is not a mainnet, identity, reserve, ownership, multisig, MWEB, hardware
wallet, message-URI, transaction authorization, account login or security audit.
An unsupported address format in this particular legacy Core utility does
not establish that all other wallets or signing protocols reject that format.

FILES
results.json: complete original outcomes and 32 experiment assertions.
cases.csv: 11 exact-message verifier cases with UTF8 message SHA256.
rpc-trace.json / rpc-help.json: actual generated-fixture RPC calls and runtime help.
application-model.json: six fictional application-policy cases, separately labeled.
challenge.txt: exact original signed message, with no trailing newline.
cleanup.json: recorded successful process/directory cleanup.
reproduce.py.txt: isolated fresh experiment; requires pinned Core binaries.
verify.py.txt: offline independent cryptographic and evidence checks.
challenge-checklist.txt / signature-request-template.txt: useful blank templates.
rpcwallet.cpp.txt / misc.cpp.txt / message.cpp.txt: official tagged MIT source copies.
sources.json / SHA256SUMS.txt: provenance and public-file checksums.
