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
42
extern
"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__ */
LoRaWAN
App
se-identity.h
Generated by
1.16.1