Decode IECS Unlock challenge URLs and the matching cmacResponses envelope. Each 32-byte challenge is split into its sub-function (unlock level), 16-byte ECU_ID (decoded inline), and 15-byte random seed. No HSM calls — CMAC verification needs the corresponding ECU key.
Endpoint: <base-url>/iecsapi/unlock.xml / /iecsapi/unlock.json (documented IECS path), or a gateway path such as /api-XXXX/iecsapiqa. The parser uses whatever path is in the URL and reads its challenge query params.
Challenge (32 B): [sub-fn(1) · ECU_ID(16) · random seed(15)]. Sub-function 0x01 = level 1 unlock, 0x03 = level 3, 0x07 = level 7…
Response: one <cmacResponse> per challenge, each carrying challenge, cmacValue (16 B AES-CMAC), and a per-row status.
CMAC verification is not done here. This tool is a wire-format inspector — it never contacts the HSM and never decrypts or recomputes a CMAC.