# RIPEMD-160 48-bit-prefix collision

## Result

`collision.json` supplies two distinct byte strings, encoded as hexadecimal:

- `inputA`: `0x03c04551`
- `inputB`: `0x03bf8869`

## Facts (locally recomputed)

The full RIPEMD-160 digests obtained during the final check were:

| Input | RIPEMD-160 digest | First 48 bits (six MSB bytes) |
| --- | --- | --- |
| `03c04551` | `ba7d1fa52d960b0536516f56723ee28096ab6431` | `ba7d1fa52d96` |
| `03bf8869` | `ba7d1fa52d96e8504a06c29026c1568dba2704be` | `ba7d1fa52d96` |

The final verification was performed with this local computation:

```sh
python3 - <<'PY'
import hashlib
items = ['03c04551', '03bf8869']
prefixes = [hashlib.new('ripemd160', bytes.fromhex(x)).digest()[:6] for x in items]
assert items[0] != items[1]
assert prefixes[0] == prefixes[1]
PY
```

## Inference

Because the inputs are distinct and the first six digest bytes are equal, this is a collision under the requested RIPEMD-160 truncation to 48 most-significant bits (`lambda = 24`). The complete 160-bit digests are not equal.

## Uncertainty and unanswered questions

No claim is made about a collision for untruncated RIPEMD-160, nor about collision resistance at any other truncation length. Final acceptance remains dependent on the stated independent SIMD recomputation.
