12#ifndef PACKET_RF4CE_SECUR_H
13#define PACKET_RF4CE_SECUR_H
20#define RF4CE_IEEE_ADDR_LEN 8
21#define RF4CE_SHORT_ADDR_LEN 2
23#define RF4CE_MIN_NWK_LENGTH 5
24#define RF4CE_MAX_NWK_LENGTH 148
26#define RF4CE_VENDOR_SECRET_STORAGE_SIZE 64
27#define RF4CE_NWK_KEY_STORAGE_SIZE 64
28#define RF4CE_ADDR_TABLE_SIZE (RF4CE_NWK_KEY_STORAGE_SIZE * 2)
30#define RF4CE_NWK_KEY_SEED_DATA_LENGTH 80
34#define RF4CE_CCM_NONCE_LEN (15 - RF4CE_CCM_L)
35#define RF4CE_SECUR_CONTROL 5
37#define KEY_LEN SEC_STR_LEN
40 uint8_t nwk_key_seed_latest[RF4CE_NWK_KEY_SEED_DATA_LENGTH];
41 uint8_t nwk_key_seed_prev[RF4CE_NWK_KEY_SEED_DATA_LENGTH];
42 uint8_t nwk_key_seed[RF4CE_NWK_KEY_SEED_DATA_LENGTH];
43 uint8_t controller_addr[RF4CE_IEEE_ADDR_LEN];
44 uint8_t target_addr[RF4CE_IEEE_ADDR_LEN];
45 uint8_t nwk_key_exchange_transfer_expected;
46 uint8_t nwk_key_exchange_transfer_received;
49#define RF4CE_PROFILE_CMD_KEY_EXCHANGE_RAND_A_LENGTH 8
50#define RF4CE_PROFILE_CMD_KEY_EXCHANGE_RAND_B_LENGTH 8
52#define RF4CE_PROFILE_CMD_KEY_EXCHANGE_RAND_AB_LENGTH \
53 (RF4CE_PROFILE_CMD_KEY_EXCHANGE_RAND_A_LENGTH \
54 + RF4CE_PROFILE_CMD_KEY_EXCHANGE_RAND_B_LENGTH)
56#define RF4CE_PROFILE_CMD_KEY_EXCHANGE_TAG_A_LENGTH 4
57#define RF4CE_PROFILE_CMD_KEY_EXCHANGE_TAG_B_LENGTH 4
59#define RF4CE_KEY_EXCHANGE_CONTEXT_LENGTH 9
60#define RF4CE_KEY_EXCHANGE_LABEL_LENGTH (2 * (RF4CE_IEEE_ADDR_LEN))
62#define RF4CE_CMAC_ARG_2_LENGTH \
63 (RF4CE_KEY_EXCHANGE_CONTEXT_LENGTH \
64 + RF4CE_KEY_EXCHANGE_LABEL_LENGTH \
71#define CONTEXT_STR "RF4CE GDP"
72#define CONTEXT_STR_LEN 9
74extern uint8_t DEFAULT_SECRET[SEC_STR_LEN];
77 uint8_t rand_a[RF4CE_PROFILE_CMD_KEY_EXCHANGE_RAND_A_LENGTH];
78 uint8_t rand_b[RF4CE_PROFILE_CMD_KEY_EXCHANGE_RAND_B_LENGTH];
79 uint8_t mac_a[RF4CE_IEEE_ADDR_LEN];
80 uint8_t mac_b[RF4CE_IEEE_ADDR_LEN];
84void rf4ce_aes_cmac(
unsigned char *
input,
unsigned long length,
unsigned char *key,
unsigned char *mac_value);
87 uint8_t ieee_addr[RF4CE_IEEE_ADDR_LEN];
93 uint8_t nwk_key[KEY_LEN];
102 uint8_t secret[SEC_STR_LEN];
112void keypair_context_init(
const uint8_t *controller_ieee,
const uint8_t *target_ieee, uint8_t expected_transfer_count);
113void keypair_context_update_seed(uint8_t *seed, uint8_t seed_seqn);
115void nwk_key_storage_add_entry(uint8_t *nwk_key,
addr_entry_t *controller_addr_ent,
addr_entry_t *target_addr_ent,
bool key_from_gui,
bool is_pairing_key);
116void nwk_key_storage_release_entry(uint8_t *nwk_key,
bool key_from_gui);
118void rf4ce_addr_table_add_addrs(
const void *ieee_addr, uint16_t short_addr);
119bool rf4ce_addr_table_get_ieee_addr(uint8_t *ieee_addr,
packet_info *pinfo,
bool is_src);
120addr_entry_t *rf4ce_addr_table_get_addr_entry_by_ieee(uint8_t *ieee_addr);
122void key_exchange_context_init(
void);
124void key_exchange_context_start_procedure(
void);
125void key_exchange_context_stop_procedure(
void);
126bool key_exchange_context_is_procedure_started(
void);
128void key_exchange_context_set_rand_a(uint8_t *rand_a);
129void key_exchange_context_set_rand_b(uint8_t *rand_b);
131void key_exchange_context_set_mac_a(uint8_t *mac_a);
132void key_exchange_context_set_mac_b(uint8_t *mac_b);
134void key_exchange_calc_key(uint32_t tag_b_pack);
136void vendor_secret_storage_add_entry(uint8_t *secret);
137void vendor_secret_storage_release_entry(uint8_t *secret);
139void rf4ce_secur_cleanup(
void);
144 uint16_t payload_offset,
146 uint8_t src_ieee[RF4CE_IEEE_ADDR_LEN],
147 uint8_t dst_ieee[RF4CE_IEEE_ADDR_LEN]);
Definition packet_info.h:43
Definition packet-rf4ce-secur.h:86
Definition packet-isakmp.c:1896
Definition packet-rf4ce-secur.h:76
Definition packet-rf4ce-secur.h:39
Definition packet-rf4ce-secur.h:92
Definition packet-rf4ce-secur.h:106
Definition packet-rf4ce-secur.h:101