L14-Click 1.0
STM32WLE5CC LoRaWAN Sensor Platform
Loading...
Searching...
No Matches
se-identity.h
Go to the documentation of this file.
1/*!
2 * \file se-identity.h
3 *
4 * \brief Secure Element identity and keys
5 *
6 * \copyright Revised BSD License, see section \ref LICENSE.
7 *
8 * \code
9 * ______ _
10 * / _____) _ | |
11 * ( (____ _____ ____ _| |_ _____ ____| |__
12 * \____ \| ___ | (_ _) ___ |/ ___) _ \
13 * _____) ) ____| | | || |_| ____( (___| | | |
14 * (______/|_____)_|_|_| \__)_____)\____)_| |_|
15 * (C)2020 Semtech
16 *
17 * ___ _____ _ ___ _ _____ ___ ___ ___ ___
18 * / __|_ _/_\ / __| |/ / __/ _ \| _ \/ __| __|
19 * \__ \ | |/ _ \ (__| ' <| _| (_) | / (__| _|
20 * |___/ |_/_/ \_\___|_|\_\_| \___/|_|_\\___|___|
21 * embedded.connectivity.solutions===============
22 *
23 * \endcode
24 *
25 */
26/**
27 ******************************************************************************
28 *
29 * Portions COPYRIGHT 2020 STMicroelectronics
30 *
31 * @file se-identity.h
32 * @author MCD Application Team
33 * @brief Secure Element identity and keys
34 ******************************************************************************
35 */
36
37/* Define to prevent recursive inclusion -------------------------------------*/
38#ifndef __SOFT_SE_IDENTITY_H__
39#define __SOFT_SE_IDENTITY_H__
40
41#ifdef __cplusplus
42extern "C" {
43#endif
44
45/* Exported Includes --------------------------------------------------------*/
46/* USER CODE BEGIN Includes */
47
48/* USER CODE END Includes */
49
50/* Exported types ------------------------------------------------------------*/
51/* USER CODE BEGIN ET */
52
53/* USER CODE END ET */
54
55/* Exported constants --------------------------------------------------------*/
56
57/*!
58 ******************************************************************************
59 ********************************** WARNING ***********************************
60 ******************************************************************************
61 The secure-element implementation supports both 1.0.x and 1.1.x LoRaWAN
62 versions of the specification.
63 Thus it has been decided to use the 1.1.x keys and EUI name definitions.
64 The below table shows the names equivalence between versions:
65 +---------------------+-------------------------+
66 | 1.0.x | 1.1.x |
67 +=====================+=========================+
68 | LORAWAN_DEVICE_EUI | LORAWAN_DEVICE_EUI |
69 +---------------------+-------------------------+
70 | LORAWAN_APP_EUI | LORAWAN_JOIN_EUI |
71 +---------------------+-------------------------+
72 | LORAWAN_GEN_APP_KEY | LORAWAN_APP_KEY |
73 +---------------------+-------------------------+
74 | LORAWAN_APP_KEY | LORAWAN_NWK_KEY |
75 +---------------------+-------------------------+
76 | LORAWAN_NWK_S_KEY | LORAWAN_F_NWK_S_INT_KEY |
77 +---------------------+-------------------------+
78 | LORAWAN_NWK_S_KEY | LORAWAN_S_NWK_S_INT_KEY |
79 +---------------------+-------------------------+
80 | LORAWAN_NWK_S_KEY | LORAWAN_NWK_S_ENC_KEY |
81 +---------------------+-------------------------+
82 | LORAWAN_APP_S_KEY | LORAWAN_APP_S_KEY |
83 +---------------------+-------------------------+
84 ******************************************************************************
85 ******************************************************************************
86 ******************************************************************************
87 */
88/*!
89 * End-device IEEE EUI (big endian)
90 * When set to 00,00,00,00,00,00,00,00 DevEui is automatically set with a value provided by MCU platform
91 */
92#define LORAWAN_DEVICE_EUI 00,00,00,00,00,00,00,00
93
94/*!
95 * App/Join server IEEE EUI (big endian)
96 */
97#define LORAWAN_JOIN_EUI 01,01,01,01,01,01,01,01
98
99/*!
100 * Device address on the network (big endian)
101 * When set to 00,00,00,00 DevAddr is automatically set with a value provided by MCU platform
102 */
103#define LORAWAN_DEVICE_ADDRESS 00,00,00,00
104
105/*!
106 * Application root key
107 */
108#define LORAWAN_APP_KEY 2B,7E,15,16,28,AE,D2,A6,AB,F7,15,88,09,CF,4F,3C
109
110/*!
111 * Network root key
112 */
113#define LORAWAN_NWK_KEY 2B,7E,15,16,28,AE,D2,A6,AB,F7,15,88,09,CF,4F,3C
114
115/*!
116 * Forwarding Network session key
117 */
118#define LORAWAN_NWK_S_KEY 2B,7E,15,16,28,AE,D2,A6,AB,F7,15,88,09,CF,4F,3C
119
120/*!
121 * Application session key
122 */
123#define LORAWAN_APP_S_KEY 2B,7E,15,16,28,AE,D2,A6,AB,F7,15,88,09,CF,4F,3C
124
125/*!
126 * Format commissioning keys
127 */
128#define RAW_TO_INT8A(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p) {0x##a,0x##b,0x##c,0x##d,\
129 0x##e,0x##f,0x##g,0x##h,\
130 0x##i,0x##j,0x##k,0x##l,\
131 0x##m,0x##n,0x##o,0x##p}
132
133#define RAW8_TO_INT8A(a,b,c,d) 0x##a##b##c##d
134#define RAW32_TO_INT8A(a,b,c,d,e,f,g,h) {0x##a,0x##b,0x##c,0x##d,\
135 0x##e,0x##f,0x##g,0x##h}
136
137#define FORMAT_KEY(...) RAW_TO_INT8A(__VA_ARGS__)
138#define FORMAT8_KEY(...) RAW8_TO_INT8A(__VA_ARGS__)
139#define FORMAT32_KEY(...) RAW32_TO_INT8A(__VA_ARGS__)
140
141#if (defined( LORAMAC_VERSION ) && ( LORAMAC_VERSION == 0x01010100 ))
142#define SESSION_KEYS_LIST \
143 { \
144 /*! \
145 * Join session integrity key (Dynamically updated) \
146 * WARNING: NOT USED FOR 1.0.x DEVICES \
147 */ \
148 .KeyID = J_S_INT_KEY, \
149 .KeyValue = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
150 0x00 }, \
151 }, \
152 { \
153 /*! \
154 * Join session encryption key (Dynamically updated) \
155 * WARNING: NOT USED FOR 1.0.x DEVICES \
156 */ \
157 .KeyID = J_S_ENC_KEY, \
158 .KeyValue = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
159 0x00 }, \
160 }, \
161 { \
162 /*! \
163 * Forwarding Network session integrity key \
164 * WARNING: NWK_S_KEY FOR 1.0.x DEVICES \
165 */ \
166 .KeyID = F_NWK_S_INT_KEY, \
167 .KeyValue = FORMAT_KEY(LORAWAN_NWK_S_KEY), \
168 }, \
169 { \
170 /*! \
171 * Serving Network session integrity key \
172 * WARNING: NOT USED FOR 1.0.x DEVICES. MUST BE THE SAME AS \ref LORAWAN_F_NWK_S_INT_KEY \
173 */ \
174 .KeyID = S_NWK_S_INT_KEY, \
175 .KeyValue = { 0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6, 0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, \
176 0x3C }, \
177 }, \
178 { \
179 /*! \
180 * Network session encryption key \
181 * WARNING: NOT USED FOR 1.0.x DEVICES. MUST BE THE SAME AS \ref LORAWAN_F_NWK_S_INT_KEY \
182 */ \
183 .KeyID = NWK_S_ENC_KEY, \
184 .KeyValue = { 0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6, 0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, \
185 0x3C }, \
186 }, \
187 { \
188 /*! \
189 * Application session key \
190 */ \
191 .KeyID = APP_S_KEY, \
192 .KeyValue = FORMAT_KEY(LORAWAN_APP_S_KEY), \
193 }, \
194 { \
195 /*! \
196 * Datablock MIC key \
197 */ \
198 .KeyID = DATABLOCK_INT_KEY, \
199 .KeyValue = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
200 0x00 }, \
201 },
202#else
203#define SESSION_KEYS_LIST \
204 { \
205 /*! \
206 * Network session key \
207 */ \
208 .KeyID = NWK_S_KEY, \
209 .KeyValue = FORMAT_KEY(LORAWAN_NWK_S_KEY), \
210 }, \
211 { \
212 /*! \
213 * Application session key \
214 */ \
215 .KeyID = APP_S_KEY, \
216 .KeyValue = FORMAT_KEY(LORAWAN_APP_S_KEY), \
217 }, \
218 { \
219 /*! \
220 * Datablock MIC key \
221 */ \
222 .KeyID = DATABLOCK_INT_KEY, \
223 .KeyValue = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
224 0x00 }, \
225 },
226#endif /* LORAMAC_VERSION */
227
228#if (LORAMAC_MAX_MC_CTX == 1)
229#define SESSION_MC_KEYS_LIST \
230 { \
231 /*! \
232 * Multicast group #0 root key (Dynamically updated) \
233 */ \
234 .KeyID = MC_KEY_0, \
235 .KeyValue = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
236 0x00 }, \
237 }, \
238 { \
239 /*! \
240 * Multicast group #0 application session key (Dynamically updated) \
241 */ \
242 .KeyID = MC_APP_S_KEY_0, \
243 .KeyValue = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
244 0x00 }, \
245 }, \
246 { \
247 /*! \
248 * Multicast group #0 network session key (Dynamically updated) \
249 */ \
250 .KeyID = MC_NWK_S_KEY_0, \
251 .KeyValue = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
252 0x00 }, \
253 },
254#else /* LORAMAC_MAX_MC_CTX > 1 */
255#define SESSION_MC_KEYS_LIST \
256 { \
257 /*! \
258 * Multicast group #0 root key (Dynamically updated) \
259 */ \
260 .KeyID = MC_KEY_0, \
261 .KeyValue = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
262 0x00 }, \
263 }, \
264 { \
265 /*! \
266 * Multicast group #0 application session key (Dynamically updated) \
267 */ \
268 .KeyID = MC_APP_S_KEY_0, \
269 .KeyValue = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
270 0x00 }, \
271 }, \
272 { \
273 /*! \
274 * Multicast group #0 network session key (Dynamically updated) \
275 */ \
276 .KeyID = MC_NWK_S_KEY_0, \
277 .KeyValue = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
278 0x00 }, \
279 }, \
280 { \
281 /*! \
282 * Multicast group #1 root key (Dynamically updated) \
283 */ \
284 .KeyID = MC_KEY_1, \
285 .KeyValue = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
286 0x00 }, \
287 }, \
288 { \
289 /*! \
290 * Multicast group #1 application session key (Dynamically updated) \
291 */ \
292 .KeyID = MC_APP_S_KEY_1, \
293 .KeyValue = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
294 0x00 }, \
295 }, \
296 { \
297 /*! \
298 * Multicast group #1 network session key (Dynamically updated) \
299 */ \
300 .KeyID = MC_NWK_S_KEY_1, \
301 .KeyValue = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
302 0x00 }, \
303 }, \
304 { \
305 /*! \
306 * Multicast group #2 root key (Dynamically updated) \
307 */ \
308 .KeyID = MC_KEY_2, \
309 .KeyValue = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
310 0x00 }, \
311 }, \
312 { \
313 /*! \
314 * Multicast group #2 application session key (Dynamically updated) \
315 */ \
316 .KeyID = MC_APP_S_KEY_2, \
317 .KeyValue = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
318 0x00 }, \
319 }, \
320 { \
321 /*! \
322 * Multicast group #2 network session key (Dynamically updated) \
323 */ \
324 .KeyID = MC_NWK_S_KEY_2, \
325 .KeyValue = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
326 0x00 }, \
327 }, \
328 { \
329 /*! \
330 * Multicast group #3 root key (Dynamically updated) \
331 */ \
332 .KeyID = MC_KEY_3, \
333 .KeyValue = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
334 0x00 }, \
335 }, \
336 { \
337 /*! \
338 * Multicast group #3 application session key (Dynamically updated) \
339 */ \
340 .KeyID = MC_APP_S_KEY_3, \
341 .KeyValue = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
342 0x00 }, \
343 }, \
344 { \
345 /*! \
346 * Multicast group #3 network session key (Dynamically updated) \
347 */ \
348 .KeyID = MC_NWK_S_KEY_3, \
349 .KeyValue = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
350 0x00 }, \
351 },
352#endif /* LORAMAC_MAX_MC_CTX */
353
354#define SOFT_SE_KEY_LIST \
355 { \
356 { \
357 /*! \
358 * Application root key \
359 * WARNING: FOR 1.0.x DEVICES IT IS THE \ref LORAWAN_GEN_APP_KEY \
360 */ \
361 .KeyID = APP_KEY, \
362 .KeyValue = FORMAT_KEY(LORAWAN_APP_KEY), \
363 }, \
364 { \
365 /*! \
366 * Network root key \
367 * WARNING: FOR 1.0.x DEVICES IT IS THE \ref LORAWAN_APP_KEY \
368 */ \
369 .KeyID = NWK_KEY, \
370 .KeyValue = FORMAT_KEY(LORAWAN_NWK_KEY), \
371 }, \
372 SESSION_KEYS_LIST \
373 { \
374 /*! \
375 * Multicast root key (Dynamically updated) \
376 */ \
377 .KeyID = MC_ROOT_KEY, \
378 .KeyValue = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
379 0x00 }, \
380 }, \
381 { \
382 /*! \
383 * Multicast key encryption key (Dynamically updated) \
384 */ \
385 .KeyID = MC_KE_KEY, \
386 .KeyValue = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
387 0x00 }, \
388 }, \
389 SESSION_MC_KEYS_LIST \
390 { \
391 /*! \
392 * All zeros key. (ClassB usage)(constant) \
393 */ \
394 .KeyID = SLOT_RAND_ZERO_KEY, \
395 .KeyValue = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
396 0x00 }, \
397 }, \
398 }
399
400#define SOFT_SE_ID_LIST \
401 .SeNvmDevJoinKey.DevEui = FORMAT32_KEY(LORAWAN_DEVICE_EUI), \
402 .SeNvmDevJoinKey.JoinEui = FORMAT32_KEY(LORAWAN_JOIN_EUI), \
403 .SeNvmDevJoinKey.DevAddrOTAA = FORMAT8_KEY(LORAWAN_DEVICE_ADDRESS), \
404 .SeNvmDevJoinKey.DevAddrABP = FORMAT8_KEY(LORAWAN_DEVICE_ADDRESS) \
405
406/* USER CODE BEGIN EC */
407
408/* USER CODE END EC */
409
410#ifdef __cplusplus
411}
412#endif
413
414#endif /* __SOFT_SE_IDENTITY_H__ */