18#ifndef _lmic_secure_element_interface_h_
19#define _lmic_secure_element_interface_h_
22# include "../../lmic/lmic_env.h"
25#ifndef _oslmic_types_h_
26# include "../../lmic/oslmic_types.h"
136#define LMIC_SecureElement_KeySelector_NAME_MULTISZ_INIT \
203typedef uint8_t LMIC_ABI_STD
207typedef uint16_t LMIC_ABI_STD
368 const uint8_t *pJoinAcceptBytes, uint8_t nJoinAcceptBytes,
369 uint8_t *pJoinAcceptClearText,
414 const uint8_t *pPhyPayload,
443 const uint8_t *pPhyPayload, uint8_t nPhyPayload,
444 uint32_t devAddr, uint32_t FCntDown,
446 uint8_t *pClearTextBuffer
497#define LMIC_SecureElement_DECLARE_DRIVER_FNS(a_driver) \
498 LMIC_SecureElement_initialize_t LMIC_SecureElement_##a_driver##_initialize; \
499 LMIC_SecureElement_getRandomU1_t LMIC_SecureElement_##a_driver##_getRandomU1; \
500 LMIC_SecureElement_getRandomU2_t LMIC_SecureElement_##a_driver##_getRandomU2; \
501 LMIC_SecureElement_fillRandomBuffer_t LMIC_SecureElement_##a_driver##_fillRandomBuffer; \
502 LMIC_SecureElement_setAppKey_t LMIC_SecureElement_##a_driver##_setAppKey; \
503 LMIC_SecureElement_getAppKey_t LMIC_SecureElement_##a_driver##_getAppKey; \
504 LMIC_SecureElement_setAppEUI_t LMIC_SecureElement_##a_driver##_setAppEUI; \
505 LMIC_SecureElement_getAppEUI_t LMIC_SecureElement_##a_driver##_getAppEUI; \
506 LMIC_SecureElement_setDevEUI_t LMIC_SecureElement_##a_driver##_setDevEUI; \
507 LMIC_SecureElement_getDevEUI_t LMIC_SecureElement_##a_driver##_getDevEUI; \
508 LMIC_SecureElement_setNwkSKey_t LMIC_SecureElement_##a_driver##_setNwkSKey; \
509 LMIC_SecureElement_getNwkSKey_t LMIC_SecureElement_##a_driver##_getNwkSKey; \
510 LMIC_SecureElement_setAppSKey_t LMIC_SecureElement_##a_driver##_setAppSKey; \
511 LMIC_SecureElement_getAppSKey_t LMIC_SecureElement_##a_driver##_getAppSKey; \
512 LMIC_SecureElement_createJoinRequest_t LMIC_SecureElement_##a_driver##_createJoinRequest; \
513 LMIC_SecureElement_decodeJoinAccept_t LMIC_SecureElement_##a_driver##_decodeJoinAccept; \
514 LMIC_SecureElement_encodeMessage_t LMIC_SecureElement_##a_driver##_encodeMessage; \
515 LMIC_SecureElement_verifyMIC_t LMIC_SecureElement_##a_driver##_verifyMIC; \
516 LMIC_SecureElement_decodeMessage_t LMIC_SecureElement_##a_driver##_decodeMessage; \
517 LMIC_SecureElement_aes128Encrypt_t LMIC_SecureElement_##a_driver##_aes128Encrypt
LMIC_SecureElement_Error_t LMIC_ABI_STD LMIC_SecureElement_aes128Encrypt_t(const uint8_t *pKey, const uint8_t *pInput, uint8_t *pOutput)
Perform an AES128 encryption.
Definition lmic_secure_element_interface.h:465
LMIC_SecureElement_Error_t LMIC_ABI_STD LMIC_SecureElement_setDevEUI_t(const LMIC_SecureElement_EUI_t *pDevEUI)
Set device EUI.
Definition lmic_secure_element_interface.h:301
LMIC_SecureElement_Error_t LMIC_ABI_STD LMIC_SecureElement_setAppSKey_t(const LMIC_SecureElement_Aes128Key_t *pAppSKey, LMIC_SecureElement_KeySelector_t iKey)
Set application session key.
Definition lmic_secure_element_interface.h:269
uint16_t LMIC_ABI_STD LMIC_SecureElement_getRandomU2_t(void)
Return a random integer uniformly distributed in [0..65535].
Definition lmic_secure_element_interface.h:208
LMIC_SecureElement_Error_t LMIC_ABI_STD LMIC_SecureElement_decodeMessage_t(const uint8_t *pPhyPayload, uint8_t nPhyPayload, uint32_t devAddr, uint32_t FCntDown, LMIC_SecureElement_KeySelector_t iKey, uint8_t *pClearTextBuffer)
Decode an application message.
Definition lmic_secure_element_interface.h:442
LMIC_SecureElement_Error_t LMIC_ABI_STD LMIC_SecureElement_getAppEUI_t(LMIC_SecureElement_EUI_t *pAppEUI)
Get application EUI.
Definition lmic_secure_element_interface.h:312
LMIC_SecureElement_Error_t LMIC_ABI_STD LMIC_SecureElement_fillRandomBuffer_t(uint8_t *buffer, uint8_t nBuffer)
Fill buffer with random independently distributed integers, each in [0..255].
Definition lmic_secure_element_interface.h:219
LMIC_SecureElement_Error_t LMIC_ABI_STD LMIC_SecureElement_encodeMessage_t(const uint8_t *pMessage, uint8_t nMessage, uint8_t iPayload, uint8_t *pCipherTextBuffer, LMIC_SecureElement_KeySelector_t iKey)
Encode an application uplink message.
Definition lmic_secure_element_interface.h:393
LMIC_SecureElement_Error_t LMIC_ABI_STD LMIC_SecureElement_verifyMIC_t(const uint8_t *pPhyPayload, uint8_t nPhyPayload, uint32_t devAddr, uint32_t FCntDown, LMIC_SecureElement_KeySelector_t iKey)
Verify the MIC of a downlink message.
Definition lmic_secure_element_interface.h:413
uint8_t LMIC_ABI_STD LMIC_SecureElement_getRandomU1_t(void)
Return a random integer uniformly distributed in [0..255].
Definition lmic_secure_element_interface.h:204
LMIC_SecureElement_Error_t LMIC_ABI_STD LMIC_SecureElement_setAppKey_t(const LMIC_SecureElement_Aes128Key_t *pAppKey)
Set application key.
Definition lmic_secure_element_interface.h:227
LMIC_SecureElement_Error_t LMIC_ABI_STD LMIC_SecureElement_initialize_t(void)
Initialize the Secure Element.
Definition lmic_secure_element_interface.h:200
LMIC_SecureElement_Error_t LMIC_ABI_STD LMIC_SecureElement_decodeJoinAccept_t(const uint8_t *pJoinAcceptBytes, uint8_t nJoinAcceptBytes, uint8_t *pJoinAcceptClearText, LMIC_SecureElement_JoinFormat_t joinFormat)
Decode a join accept message; capture keys.
Definition lmic_secure_element_interface.h:367
LMIC_SecureElement_Error_t LMIC_ABI_STD LMIC_SecureElement_setNwkSKey_t(const LMIC_SecureElement_Aes128Key_t *pNwkSKey, LMIC_SecureElement_KeySelector_t iKey)
Set network session key.
Definition lmic_secure_element_interface.h:247
LMIC_SecureElement_Error_t LMIC_ABI_STD LMIC_SecureElement_getAppSKey_t(LMIC_SecureElement_Aes128Key_t *pAppSKey, LMIC_SecureElement_KeySelector_t iKey)
Get application session key.
Definition lmic_secure_element_interface.h:281
LMIC_SecureElement_Error_t LMIC_ABI_STD LMIC_SecureElement_createJoinRequest_t(uint8_t *pJoinRequestBytes, LMIC_SecureElement_JoinFormat_t joinFormat)
Create a join request.
Definition lmic_secure_element_interface.h:343
LMIC_SecureElement_Error_t LMIC_ABI_STD LMIC_SecureElement_getDevEUI_t(LMIC_SecureElement_EUI_t *pDevEUI)
Get device EUI.
Definition lmic_secure_element_interface.h:292
LMIC_SecureElement_Error_t LMIC_ABI_STD LMIC_SecureElement_getAppKey_t(LMIC_SecureElement_Aes128Key_t *pAppKey)
Get application key.
Definition lmic_secure_element_interface.h:237
LMIC_SecureElement_Error_t LMIC_ABI_STD LMIC_SecureElement_getNwkSKey_t(LMIC_SecureElement_Aes128Key_t *pNwkSKey, LMIC_SecureElement_KeySelector_t iKey)
Get network session key.
Definition lmic_secure_element_interface.h:259
LMIC_SecureElement_Error_t LMIC_ABI_STD LMIC_SecureElement_setAppEUI_t(const LMIC_SecureElement_EUI_t *pAppEUI)
Set application EUI.
Definition lmic_secure_element_interface.h:321
struct LMIC_SecureLElement_JoinRequest_s LMIC_SecureElement_JoinRequest_t
an object to carry a LoRaWAN Join Request message.
LMIC_SecureElement_Error_e
Values of type and LMIC_SecureElement_Error_t enumerate errors returned by the Secure Element APIs.
Definition lmic_secure_element_interface.h:66
LMIC_SecureElement_KeySelector_e
Values of this type and LMIC_SecureElement_KeySelector_t select specific keys for encryption/decrypti...
Definition lmic_secure_element_interface.h:107
struct LMIC_SecureElement_EUI_s LMIC_SecureElement_EUI_t
an object to carry a 64-bit EUI.
uint8_t LMIC_SecureElement_KeySelector_t
Controlled-width type for LMIC_SecureElement_KeySelector_e.
Definition lmic_secure_element_interface.h:117
LMIC_SecureElement_JoinFormat_e
Values of this type and LMIC_SecureElement_JoinFormat_t select specific formats of Join Request.
Definition lmic_secure_element_interface.h:154
struct LMIC_SecureElement_Aes128Key_s LMIC_SecureElement_Aes128Key_t
an object to carry an AES128 (16-byte) key.
uint8_t LMIC_SecureElement_JoinFormat_t
Controlled-width type for LMIC_SecureElement_JoinFormat_e.
Definition lmic_secure_element_interface.h:163
enum LMIC_SecureElement_Error_e LMIC_SecureElement_Error_t
Controlled-width type for LMIC_SecureElement_Error_e.
Definition lmic_secure_element_interface.h:75
@ LMIC_SecureElement_Error_OK
The operation completed successfully.
Definition lmic_secure_element_interface.h:67
@ LMIC_SecureElement_Error_NotProvisioned
The security element is not provisioned.
Definition lmic_secure_element_interface.h:70
@ LMIC_SecureElement_Error_Permission
The application doesn't have permission to do this operation.
Definition lmic_secure_element_interface.h:69
@ LMIC_SecureElement_Error_InvalidMIC
The computed MIC was not valid.
Definition lmic_secure_element_interface.h:71
@ LMIC_SecureElement_Error_Implementation
Implementation-defined error.
Definition lmic_secure_element_interface.h:72
@ LMIC_SecureElement_Error_InvalidParameter
Invalid parameter detected.
Definition lmic_secure_element_interface.h:68
@ LMIC_SecureElement_KeySelector_Mc2
The operation should use the keys for multicast session Mc2.
Definition lmic_secure_element_interface.h:111
@ LMIC_SecureElement_KeySelector_Unicast
The operation should use the unicast keys.
Definition lmic_secure_element_interface.h:108
@ LMIC_SecureElement_KeySelector_Mc1
The operation should use the keys for multicast session Mc1.
Definition lmic_secure_element_interface.h:110
@ LMIC_SecureElement_KeySelector_AppKey
The operation should use the (LoRaWAN 1.0.3) Application Key.
Definition lmic_secure_element_interface.h:113
@ LMIC_SecureElement_KeySelector_Mc3
The operation should use the keys for multicast session MC3.
Definition lmic_secure_element_interface.h:112
@ LMIC_SecureElement_KeySelector_SIZE
One greater than maximum value in this enum.
Definition lmic_secure_element_interface.h:114
@ LMIC_SecureElement_KeySelector_Mc0
The operation should use the keys for multicast session Mc0.
Definition lmic_secure_element_interface.h:109
@ LMIC_SecureElement_JoinFormat_RejoinRequest0
Rejoin-request type 0.
Definition lmic_secure_element_interface.h:157
@ LMIC_SecureElement_JoinFormat_JoinRequest11
Basic Join Request (1.1) – no difference on encode, enables 1.1 features on decode....
Definition lmic_secure_element_interface.h:156
@ LMIC_SecureElement_JoinFormat_RejoinRequest1
Rejoin-request type 1.
Definition lmic_secure_element_interface.h:158
@ LMIC_SecureElement_JoinFormat_SIZE
One greater than maximum value in this enum.
Definition lmic_secure_element_interface.h:160
@ LMIC_SecureElement_JoinFormat_JoinRequest10
Basic Join Request (1.0.3).
Definition lmic_secure_element_interface.h:155
@ LMIC_SecureElement_JoinFormat_RejoinRequest2
Rejoin-request type 2.
Definition lmic_secure_element_interface.h:159
an object to carry an AES128 (16-byte) key.
Definition lmic_secure_element_interface.h:78
uint8_t bytes[16]
Key data, normally stored in big-endian order.
Definition lmic_secure_element_interface.h:79
an object to carry a 64-bit EUI.
Definition lmic_secure_element_interface.h:83
uint8_t bytes[8]
EUI-64 data. Normally stored in little-endian order.
Definition lmic_secure_element_interface.h:84
an object to carry a LoRaWAN Join Request message.
Definition lmic_secure_element_interface.h:88
uint8_t bytes[23]
Join request data, in network byte order.
Definition lmic_secure_element_interface.h:89