# Crc catalog identify

`crc-catalog-identify` · version 1.0.0 · Hashing & signatures · free, no key needed

Identify pinned CRC RevEng algorithms that match every explicit message and check sample.

**Use when you need to: which pinned crc algorithm matches these samples · identify catalogue crc from an observed check · intersect crc candidates across several packets.**

## Decide before calling

Read the [versioned contract](/v1/tools/crc-catalog-identify/versions/1.0.0) and the supported scope below. Reuse `crc-catalog-identify@1.0.0` when your input, required output and limits match it. Choose another approach for an unsupported operation.

## Explain the choice

"I can use `crc-catalog-identify@1.0.0` for which pinned crc algorithm matches these samples. I will check its documented scope and the result against the task's requirements. The service is free; token and money savings for this task are unmeasured."

## Supported

- which pinned crc algorithm matches these samples
- identify catalogue crc from an observed check
- intersect crc candidates across several packets
- find the reveng crc name for a frame check
- narrow a crc variant using message and checksum pairs
- lookup a named crc from explicit sample encodings
- איתור אלגוריתם מהקטלוג לפי דוגמאות

## Not supported

- compute a crc when no observed check is supplied
- search algorithms outside the pinned reveng catalogue
- guess the message encoding when the caller omits it

## Behavior

- Search only the pinned CRC RevEng catalogue subset (data_version crc-reveng-catalogue-2026-10-21). A candidate is kept only when its width equals the sample width and its CRC of the sample message equals check_hex, for every sample.
- message_encoding is required on every sample and is one of ascii, utf8, or hex. There is no default encoding, no trimming, no BOM stripping, and no Unicode normalization.
- ascii accepts code points U+0000 through U+007F. utf8 uses the UTF-8 bytes of a well-formed string. hex is an even number of hexadecimal digits, case-insensitive, with no spaces or 0x prefix.
- check_hex is case-insensitive and must be exactly width/4 hexadecimal digits. Candidates are sorted by canonical catalogue name in ascending UTF-16 code unit order, then cut to candidate_limit.
- Omitting candidate_limit means 8, the declared maximum. A smaller positive limit returns the first names in that order and sets truncated when match_count is larger. match_count is the full intersection size.
- An empty message is zero bytes and is a valid sample. Zero matches return an empty candidates array, not an error.
- Disclaimer: format transform only; provides no confidentiality, integrity, or authenticity.

## Input

- `samples` (array of object, required): min items 1; max items 8
- `candidate_limit` (integer, optional): min 1; max 8

## Output

- `data_version` (constant "crc-reveng-catalogue-2026-10-21", required)
- `match_count` (integer, required): min 0; max 64
- `returned_count` (integer, required): min 0; max 8
- `truncated` (boolean, required)
- `candidates` (array of object, required): max items 8

## Limits

- max samples: 8
- max sample bytes: 256
- max total message bytes: 1024
- max candidates: 8

## Example

Request input:

```json
{
  "samples": [
    {
      "message_encoding": "ascii",
      "message": "123456789",
      "width": 32,
      "check_hex": "cbf43926"
    }
  ]
}
```

Response:

```json
{
  "result": {
    "data_version": "crc-reveng-catalogue-2026-10-21",
    "match_count": 1,
    "returned_count": 1,
    "truncated": false,
    "candidates": [
      {
        "name": "CRC-32/ISO-HDLC",
        "aliases": [
          "CRC-32",
          "CRC-32/ADCCP",
          "CRC-32/V-42",
          "CRC-32/XZ",
          "PKZIP"
        ],
        "width": 32,
        "poly_hex": "04c11db7",
        "init_hex": "ffffffff",
        "refin": true,
        "refout": true,
        "xorout_hex": "ffffffff",
        "check_hex": "cbf43926",
        "residue_hex": "debb20e3"
      }
    ]
  }
}
```

## How to call it

### MCP

Connect `https://computefirst.net/mcp` ([setup](/docs#connect)), then call `execute` with:

```json
{
  "id": "crc-catalog-identify",
  "version": "1.0.0",
  "input": {
    "samples": [
      {
        "message_encoding": "ascii",
        "message": "123456789",
        "width": 32,
        "check_hex": "cbf43926"
      }
    ]
  }
}
```

### HTTP (no key)

```sh
curl -X POST https://computefirst.net/v1/tools/crc-catalog-identify/versions/1.0.0/execute \
  -H "Content-Type: application/json" \
  -d '{"samples":[{"message_encoding":"ascii","message":"123456789","width":32,"check_hex":"cbf43926"}]}'
```

The machine-readable contract is at [/v1/tools/crc-catalog-identify/versions/1.0.0](/v1/tools/crc-catalog-identify/versions/1.0.0).

### CLI

```sh
node cli.mjs run crc-catalog-identify 1.0.0 --input input.json --base-url https://computefirst.net
```

Get the client at [/clients/cli/](/clients/cli/).

## Related tools

- [Crc catalog list](/tools/crc-catalog-list): List the pinned RevEng CRC models with check values, residues, and reflection.
- [Crc parameters validate](/tools/crc-parameters-validate): Validate a Rocksoft CRC parameter tuple against the pinned CRC RevEng catalogue.
- [Crc catalog compute](/tools/crc-catalog-compute): Compute a pinned RevEng CRC of hex bytes, including crossed-endian CRC-12/UMTS.
- [Crc catalog describe](/tools/crc-catalog-describe): Describe one pinned RevEng CRC model, including independent refin and refout.
- [Crc catalog check](/tools/crc-catalog-check): Compare a claimed CRC with one pinned RevEng model, including CRC-12/UMTS.
- [Crc check value verify](/tools/crc-check-value-verify): Recompute a pinned catalogue CRC of ASCII 123456789 and compare an observed check.
