12 #ifndef PACKET_RF4CE_SECUR_H
13 #define PACKET_RF4CE_SECUR_H
22 #define RF4CE_IEEE_ADDR_LEN 8
23 #define RF4CE_SHORT_ADDR_LEN 2
25 #define RF4CE_MIN_NWK_LENGTH 5
26 #define RF4CE_MAX_NWK_LENGTH 148
28 #define RF4CE_VENDOR_SECRET_STORAGE_SIZE 64
29 #define RF4CE_NWK_KEY_STORAGE_SIZE 64
30 #define RF4CE_ADDR_TABLE_SIZE (RF4CE_NWK_KEY_STORAGE_SIZE * 2)
32 #define RF4CE_NWK_KEY_SEED_DATA_LENGTH 80
36 #define RF4CE_CCM_NONCE_LEN (15 - RF4CE_CCM_L)
37 #define RF4CE_SECUR_CONTROL 5
38 #define SEC_STR_LEN 16
39 #define KEY_LEN SEC_STR_LEN
42 guint8 nwk_key_seed_latest[RF4CE_NWK_KEY_SEED_DATA_LENGTH];
43 guint8 nwk_key_seed_prev[RF4CE_NWK_KEY_SEED_DATA_LENGTH];
44 guint8 nwk_key_seed[RF4CE_NWK_KEY_SEED_DATA_LENGTH];
45 guint8 controller_addr[RF4CE_IEEE_ADDR_LEN];
46 guint8 target_addr[RF4CE_IEEE_ADDR_LEN];
47 guint8 nwk_key_exchange_transfer_expected;
48 guint8 nwk_key_exchange_transfer_received;
51 #define RF4CE_PROFILE_CMD_KEY_EXCHANGE_RAND_A_LENGTH 8
52 #define RF4CE_PROFILE_CMD_KEY_EXCHANGE_RAND_B_LENGTH 8
54 #define RF4CE_PROFILE_CMD_KEY_EXCHANGE_RAND_AB_LENGTH \
55 (RF4CE_PROFILE_CMD_KEY_EXCHANGE_RAND_A_LENGTH \
56 + RF4CE_PROFILE_CMD_KEY_EXCHANGE_RAND_B_LENGTH)
58 #define RF4CE_PROFILE_CMD_KEY_EXCHANGE_TAG_A_LENGTH 4
59 #define RF4CE_PROFILE_CMD_KEY_EXCHANGE_TAG_B_LENGTH 4
61 #define RF4CE_KEY_EXCHANGE_CONTEXT_LENGTH 9
62 #define RF4CE_KEY_EXCHANGE_LABEL_LENGTH (2 * (RF4CE_IEEE_ADDR_LEN))
64 #define RF4CE_CMAC_ARG_2_LENGTH \
65 (RF4CE_KEY_EXCHANGE_CONTEXT_LENGTH \
66 + RF4CE_KEY_EXCHANGE_LABEL_LENGTH \
73 #define CONTEXT_STR "RF4CE GDP"
74 #define CONTEXT_STR_LEN 9
76 extern guint8 DEFAULT_SECRET[SEC_STR_LEN];
79 guint8 rand_a[RF4CE_PROFILE_CMD_KEY_EXCHANGE_RAND_A_LENGTH];
80 guint8 rand_b[RF4CE_PROFILE_CMD_KEY_EXCHANGE_RAND_B_LENGTH];
81 guint8 mac_a[RF4CE_IEEE_ADDR_LEN];
82 guint8 mac_b[RF4CE_IEEE_ADDR_LEN];
83 gboolean is_proc_started;
88 # pragma pack(push, 1)
90 __attribute__((__packed__))
94 guint8 a[RF4CE_PROFILE_CMD_KEY_EXCHANGE_RAND_A_LENGTH];
95 guint8 b[RF4CE_PROFILE_CMD_KEY_EXCHANGE_RAND_B_LENGTH];
102 #if defined(_MSC_VER)
103 # pragma pack(push, 1)
105 __attribute__((__packed__))
109 guint8 context[CONTEXT_STR_LEN];
110 guint8 mac_a[RF4CE_IEEE_ADDR_LEN];
111 guint8 mac_b[RF4CE_IEEE_ADDR_LEN];
112 guint8 pairing_key[KEY_LEN];
119 void rf4ce_aes_cmac(guchar *
input, gulong length, guchar *key, guchar *mac_value);
122 guint8 ieee_addr[RF4CE_IEEE_ADDR_LEN];
128 guint8 nwk_key[KEY_LEN];
131 gboolean key_from_gui;
133 gboolean is_pairing_key;
137 guint8 secret[SEC_STR_LEN];
147 void keypair_context_init(
const guint8 *controller_ieee,
const guint8 *target_ieee, guint8 expected_transfer_count);
148 void keypair_context_update_seed(guint8 *seed, guint8 seed_seqn);
150 void nwk_key_storage_add_entry(guint8 *nwk_key,
addr_entry_t *controller_addr_ent,
addr_entry_t *target_addr_ent, gboolean key_from_gui, gboolean is_pairing_key);
151 void nwk_key_storage_release_entry(guint8 *nwk_key, gboolean key_from_gui);
153 void rf4ce_addr_table_add_addrs(
const void *ieee_addr, guint16 short_addr);
154 gboolean rf4ce_addr_table_get_ieee_addr(guint8 *ieee_addr,
packet_info *pinfo, gboolean is_src);
155 addr_entry_t *rf4ce_addr_table_get_addr_entry_by_ieee(guint8 *ieee_addr);
157 void key_exchange_context_init(
void);
159 void key_exchange_context_start_procedure(
void);
160 void key_exchange_context_stop_procedure(
void);
161 gboolean key_exchange_context_is_procedure_started(
void);
163 void key_exchange_context_set_rand_a(guint8 *rand_a);
164 void key_exchange_context_set_rand_b(guint8 *rand_b);
166 void key_exchange_context_set_mac_a(guint8 *mac_a);
167 void key_exchange_context_set_mac_b(guint8 *mac_b);
169 void key_exchange_calc_key(guint32 tag_b_pack);
171 void vendor_secret_storage_add_entry(guint8 *secret);
172 void vendor_secret_storage_release_entry(guint8 *secret);
174 void rf4ce_secur_cleanup(
void);
177 #if defined(_MSC_VER)
178 # pragma pack(push, 1)
180 __attribute__((__packed__))
182 rf4ce_secur_ccm_nonce_s
184 guint8 source_address[RF4CE_IEEE_ADDR_LEN];
185 guint32 frame_counter;
186 guint8 secur_control;
187 } rf4ce_secur_ccm_nonce_t;
193 #if defined(_MSC_VER)
194 # pragma pack(push, 1)
196 __attribute__((__packed__))
198 rf4ce_secur_ccm_auth_s
200 guint8 frame_control;
201 guint32 frame_counter;
202 guint8 dest_address[RF4CE_IEEE_ADDR_LEN];
203 } rf4ce_secur_ccm_auth_t;
211 guint16 payload_offset,
213 guint8 src_ieee[RF4CE_IEEE_ADDR_LEN],
214 guint8 dst_ieee[RF4CE_IEEE_ADDR_LEN]);
Definition: packet_info.h:44
Definition: packet-rf4ce-secur.h:121
Definition: packet-isakmp.c:1885
Definition: packet-rf4ce-secur.h:78
Definition: packet-rf4ce-secur.h:41
Definition: packet-rf4ce-secur.h:127
Definition: packet-rf4ce-secur.h:141
Definition: packet-rf4ce-secur.h:136