openaliro
Aliro reader: UWB/CCC core and ESP32-S3/C5/C6 port
Loading...
Searching...
No Matches
ccc_shim.c File Reference

— CCC STS substitution core (implementation). More...

#include "ccc_shim.h"
#include <errno.h>
#include <string.h>
Include dependency graph for ccc_shim.c:

Functions

static uint32_t ccc_shim_slot_from_sub (uint32_t sub)
 Map a blob sub-block offset to a CCC slot (currently pass-through).
 
int 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.
 
int 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.
 
void ccc_shim_unbind (void)
 Unbind the shim; ccc_shim_active returns false afterward.
 
bool ccc_shim_active (void)
 Whether the per-frame STS interception is live (bound AND not suspended).
 
uint32_t ccc_shim_sts_index0 (void)
 The bound session's STS_Index0 (for UAD/Pre-POLL derivation); 0 if unbound.
 
void ccc_shim_suspend (bool suspend)
 Suspend or resume the per-frame IV wrap without unbinding.
 
int 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).
 
int 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.
 
int 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.
 
uint32_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).
 
uint32_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.
 
void ccc_shim_pin_index (uint32_t ccc_index)
 Pin the substituted STS to one fixed CCC index (bench validation).
 
void ccc_shim_unpin (void)
 Release the debug pin; STS resumes advancing with the blob index.
 

Variables

struct { 
 
g 
 The bound session's key material, schedule anchor, and dURSK cache.
 

Detailed Description

— CCC STS substitution core (implementation).

Function Documentation

◆ ccc_shim_bind()

int 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.

Parameters
murskmURSK bytes.
salted_hashSaltedHash bytes.
sts_index0Initial STS index for this session.
n_slot_per_roundSlots per ranging cycle.
Returns
0 on success; -EINVAL if any input is invalid.

◆ ccc_shim_bind_from_ursk()

int 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.

Bind the shim, deriving mURSK + SaltedHash from the URSK + RangingConfiguration.

Parameters
ursk256-bit URSK input key.
ranging_configSerialized ranging configuration bytes (may be NULL if rc_len is 0).
rc_lenLength of ranging_config in bytes.
sts_index0Initial STS index for this session.
n_slot_per_roundSlots per ranging cycle.
Returns
0 on success; propagated error from derivation otherwise.

◆ ccc_shim_blob_to_ccc_index()

uint32_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.

Map the blob's raw provisioned STS index to a CCC-schedule STS index (origin/stride auto-calibrated from the first two indices).

Parameters
blob_idxBlob provisioned STS index.
blockOutput pointer receiving the ranging-cycle block index (may be NULL).
subOutput pointer receiving the intra-block sub-offset (may be NULL).
Returns
CCC-space STS index.

◆ ccc_shim_dudsk_for_index()

int 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.

Derive the dUDSK (per-cycle Final_Data key) for the ranging cycle containing sts_index.

Parameters
sts_indexSTS index in the ranging schedule.
dudskOutput buffer receiving dUDSK.
Returns
0 on success; -EINVAL if shim is not active or dudsk is NULL.

◆ ccc_shim_index_from_iv()

uint32_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).

Extract the STS index the blob packed into a DW3000 STS IV (index at bytes 7..4).

Parameters
iv1616-byte STS IV.
Returns
STS index.

◆ ccc_shim_pin_index()

void ccc_shim_pin_index ( uint32_t  ccc_index)

Pin the substituted STS to one fixed CCC index (bench validation).

Parameters
ccc_indexCCC index to pin for all subsequent frames.

◆ ccc_shim_slot_from_sub()

static uint32_t ccc_shim_slot_from_sub ( uint32_t  sub)
static

Map a blob sub-block offset to a CCC slot (currently pass-through).

Parameters
subSub-block offset.
Returns
CCC slot index.

◆ ccc_shim_sts_for_index()

int 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).

Map a per-frame STS index to its CCC dURSK (per-cycle) + STS-V (per-PPDU).

Parameters
sts_indexSTS index in the ranging schedule.
durskOutput buffer receiving dURSK.
sts_vOutput buffer receiving STS-V.
Returns
0 on success; -EINVAL if shim is not active or output pointers are NULL.

◆ ccc_shim_sts_for_slot()

int 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.

Map a ranging-slot offset (STS_Index0 + slot) to its CCC dURSK + STS-V.

Parameters
slotSlot offset from STS_Index0.
durskOutput buffer receiving dURSK.
sts_vOutput buffer receiving STS-V.
Returns
0 on success; -EINVAL if shim is not active.

◆ ccc_shim_suspend()

void ccc_shim_suspend ( bool  suspend)

Suspend or resume the per-frame IV wrap without unbinding.

Suspend/resume the per-frame IV wrap without unbinding.

Parameters
suspendTrue to suspend, false to resume.