ccc_shim.c
CCC STS substitution core (implementation).
Overview
CCC STS substitution core (implementation).
depends on ccc_shim.h
API
Fstatic uint32_t ccc_shim_slot_from_sub(uint32_t sub)
Map a blob sub-block offset to a CCC slot (currently pass-through).
sub- Sub-block offset.
- returns
- CCC slot index.
ccc_shim_blob_to_ccc_indexFint ccc_shim_bind(const uint8_t mursk[CCC_MURSK_LEN], const uint8_t salted_hash[CCC_SALTED_HASH_LEN], uint32_t sts_index0, uint16_t n_slot_per_round)
Bind the shim to a ranging session's derived key material.
mursk- mURSK bytes.
salted_hash- SaltedHash bytes.
sts_index0- Initial STS index for this session.
n_slot_per_round- Slots per ranging cycle.
- returns
- 0 on success; -EINVAL if any input is invalid.
ccc_shim_bind_from_urskFint ccc_shim_bind_from_ursk(const uint8_t ursk[CCC_URSK_LEN], const uint8_t *ranging_config, size_t rc_len, uint32_t sts_index0, uint16_t n_slot_per_round)
Bind the shim, deriving mURSK and SaltedHash from URSK and RangingConfiguration.
ursk- 256-bit URSK input key.
ranging_config- Serialized ranging configuration bytes (may be NULL if rc_len is 0).
rc_len- Length of ranging_config in bytes.
sts_index0- Initial STS index for this session.
n_slot_per_round- Slots per ranging cycle.
- returns
- 0 on success; propagated error from derivation otherwise.
ccc_shim_bindFvoid ccc_shim_unbind(void)
Unbind the shim; @ref ccc_shim_active returns false afterward.
Fbool ccc_shim_active(void)
Whether the per-frame STS interception is live (bound AND not suspended).
Fuint32_t ccc_shim_sts_index0(void)
The bound session's STS_Index0 (for UAD/Pre-POLL derivation); 0 if unbound.
Fvoid ccc_shim_suspend(bool suspend)
Suspend or resume the per-frame IV wrap without unbinding.
suspend- True to suspend, false to resume.
Fint ccc_shim_sts_for_index(uint32_t sts_index, uint8_t dursk[CCC_DURSK_LEN], uint8_t sts_v[CCC_STS_V_LEN])
Map a per-frame STS index to its CCC dURSK (per-cycle) and STS-V (per-PPDU).
sts_index- STS index in the ranging schedule.
dursk- Output buffer receiving dURSK.
sts_v- Output buffer receiving STS-V.
- returns
- 0 on success; -EINVAL if shim is not active or output pointers are NULL.
ccc_shim_sts_for_slotFint ccc_shim_dudsk_for_index(uint32_t sts_index, uint8_t dudsk[CCC_DUDSK_LEN])
Derive dUDSK (per-cycle Final_Data key) for the ranging cycle containing sts_index.
sts_index- STS index in the ranging schedule.
dudsk- Output buffer receiving dUDSK.
- returns
- 0 on success; -EINVAL if shim is not active or dudsk is NULL.
Fint ccc_shim_sts_for_slot(uint32_t slot, uint8_t dursk[CCC_DURSK_LEN], uint8_t sts_v[CCC_STS_V_LEN])
Map a ranging-slot offset (STS_Index0 plus slot) to its CCC dURSK and STS-V.
slot- Slot offset from STS_Index0.
dursk- Output buffer receiving dURSK.
sts_v- Output buffer receiving STS-V.
- returns
- 0 on success; -EINVAL if shim is not active.
ccc_shim_sts_for_indexFuint32_t ccc_shim_index_from_iv(const uint8_t iv16[16])
Extract the STS index from a DW3000 STS IV (index at bytes 7..4).
iv16- 16-byte STS IV.
- returns
- STS index.
Fuint32_t ccc_shim_blob_to_ccc_index(uint32_t blob_idx, uint32_t *block, uint32_t *sub)
Map the blob's raw provisioned STS index to a CCC-schedule STS index, with origin and stride auto-calibrated from the first two indices.
blob_idx- Blob provisioned STS index.
block- Output pointer receiving the ranging-cycle block index (may be NULL).
sub- Output pointer receiving the intra-block sub-offset (may be NULL).
- returns
- CCC-space STS index.
ccc_shim_slot_from_subFvoid ccc_shim_pin_index(uint32_t ccc_index)
Pin the substituted STS to one fixed CCC index (bench validation).
ccc_index- CCC index to pin for all subsequent frames.
Fvoid ccc_shim_unpin(void)
Release the debug pin; STS resumes advancing with the blob index.