18#ifndef _lmic_secure_element_api_h_
19#define _lmic_secure_element_api_h_
21#ifndef _lmic_secure_element_interface_h_
42# define LMIC_CFG_SecureElement_DRIVER Default
57# define LMIC_ENABLE_SecureElement_STATIC 1
60#if ! defined(LMIC_CFG_SecureElement_DRIVER)
61# define LMIC_CFG_SecureElement_DRIVER Default
64#if ! defined(LMIC_ENABLE_SecureElement_STATIC)
65# define LMIC_ENABLE_SecureElement_STATIC 1
72#if ! LMIC_ENABLE_SecureElement_STATIC
73# error "This version only supports static binding to the secure element."
79#if ! LMIC_ENABLE_SecureElement_STATIC
130#define LMIC_SecureElement_METHOD_(a_driver, a_fn) \
131 (LMIC_SecureElement_##a_driver##_##a_fn)
158#define LMIC_SecureElement_METHOD(a_driver, a_fn) \
159 LMIC_SecureElement_METHOD_(a_driver, a_fn)
168LMIC_SecureElement_initialize(
void) {
175LMIC_SecureElement_getRandomU1(
void) {
182LMIC_SecureElement_getRandomU2(
void) {
189LMIC_SecureElement_fillRandomBuffer(uint8_t *buffer, uint8_t nBuffer) {
266LMIC_SecureElement_createJoinRequest(
275LMIC_SecureElement_decodeJoinAccept(
276 const uint8_t *pJoinAcceptBytes, uint8_t nJoinAcceptBytes,
277 uint8_t *pJoinAcceptClearText,
281 pJoinAcceptBytes, nJoinAcceptBytes, pJoinAcceptClearText, joinFormat
288LMIC_SecureElement_encodeMessage(
const uint8_t *pMessage, uint8_t nMessage, uint8_t iPayload, uint8_t *pCipherTextBuffer,
LMIC_SecureElement_KeySelector_t iKey) {
290 pMessage, nMessage, iPayload, pCipherTextBuffer, iKey
297LMIC_SecureElement_verifyMIC(
298 const uint8_t *pPhyPayload,
305 pPhyPayload, nPhyPayload, devAddr, FCntDown, iKey
312LMIC_SecureElement_decodeMessage(
313 const uint8_t *pPhyPayload, uint8_t nPhyPayload,
314 uint32_t devAddr, uint32_t FCntDown,
316 uint8_t *pClearTextBuffer
319 pPhyPayload, nPhyPayload, devAddr, FCntDown, iKey, pClearTextBuffer
326LMIC_SecureElement_aes128Encrypt(
const uint8_t *pKey,
const uint8_t *pInput, uint8_t *pOutput) {
328 pKey, pInput, pOutput
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
#define LMIC_SecureElement_DECLARE_DRIVER_FNS(a_driver)
Declare secure element functions for a given driver.
Definition lmic_secure_element_interface.h:497
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_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
#define LMIC_CFG_SecureElement_DRIVER
Select the secure-element driver.
Definition lmic_secure_element_api.h:42
#define LMIC_SecureElement_METHOD(a_driver, a_fn)
Generate a method function name.
Definition lmic_secure_element_api.h:158
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