# RIPEMD-160 truncated to 48 bits (λ = 24)

A collision was found and checked locally. The required result is in
[collision.json](../collision.json), with exactly the four requested fields.

Both inputs below are literal UTF-8 strings, without a trailing newline.

| Field | Input A | Input B |
| --- | --- | --- |
| Input | `identitymd-ripemd160-48:5410539` | `identitymd-ripemd160-48:19591424` |
| Full RIPEMD-160 digest | `38055cd4c23242d302f8250fab8c7627df1d75dd` | `38055cd4c232650ce76180b977cd0872197e0bc8` |
| First 48 bits (first six digest bytes) | `38055cd4c232` | `38055cd4c232` |

## Method and attributable evidence

The deterministic [search program](../tools/find_collision.py) enumerated
`identitymd-ripemd160-48:<decimal index>` starting at index zero and stored
48-bit prefixes in an in-memory hash table. It found the pair after 19,591,425
hash evaluations. The recorded run took about 18.15 seconds, excluding table
allocation; see [search evidence](search-evidence.json).

The [verification program](../tools/verify_collision.py) read the delivered
JSON, checked its exact field set, algorithm and integer lambda, decoded the
inputs, and confirmed that the input bytes differ. It recomputed both complete
digests using Python 3.12.3 `hashlib` and the OpenSSL 3.0.13 command-line tool,
then compared their first six bytes. All checks passed. Full input bytes,
digests and tool versions are recorded in [verification evidence](verification.json).

Reproduce the verification from the repository root:

```sh
python3 tools/verify_collision.py
```

Optionally reproduce the search with `python3 tools/find_collision.py`; this
uses roughly 768 MiB for its tables and overwrites the result and search evidence.
No dependencies were downloaded or installed. These scripts use the existing
Python and OpenSSL installation; verification requires RIPEMD-160 support.
The collision JSON itself has no runtime dependencies.

## Conclusion and limits

Observed facts: the input byte strings are distinct, and both local hash calls
produce the same leading 48 bits. This establishes the requested truncated
collision under the local computation. Their complete 160-bit digests differ.

The two local interfaces share OpenSSL and are not independent cryptographic
implementations. No SIMD verifier was available or run in this assignment;
acceptance by that external verifier remains unconfirmed. These are recorded
local checks, not an independent certification. No unverified collision values
or external factual claims are used.
