/* * Copyright (C) 2015-2017 Alibaba Group Holding Limited */ /*! * \file LoRaMacCrypto.h * * \brief LoRa MAC layer cryptography implementation * * \copyright Revised BSD License, see section \ref LICENSE. * * \code * ______ _ * / _____) _ | | * ( (____ _____ ____ _| |_ _____ ____| |__ * \____ \| ___ | (_ _) ___ |/ ___) _ \ * _____) ) ____| | | || |_| ____( (___| | | | * (______/|_____)_|_|_| \__)_____)\____)_| |_| * (C)2013 Semtech * * ___ _____ _ ___ _ _____ ___ ___ ___ ___ * / __|_ _/_\ / __| |/ / __/ _ \| _ \/ __| __| * \__ \ | |/ _ \ (__| ' <| _| (_) | / (__| _| * |___/ |_/_/ \_\___|_|\_\_| \___/|_|_\\___|___| * embedded.connectivity.solutions=============== * * \endcode * * \author Miguel Luis ( Semtech ) * * \author Gregory Cristian ( Semtech ) * * \author Daniel Jaeckle ( STACKFORCE ) * * \defgroup LORAMAC_CRYPTO LoRa MAC layer cryptography implementation * This module covers the implementation of cryptographic functions * of the LoRaMAC layer. * \{ */ #ifndef __LORAMAC_CRYPTO_H__ #define __LORAMAC_CRYPTO_H__ #include #ifdef __cplusplus extern "C" { #endif /*! * Computes the LoRaMAC frame MIC field * * \param [IN] buffer - Data buffer * \param [IN] size - Data buffer size * \param [IN] key - AES key to be used * \param [IN] address - Frame address * \param [IN] dir - Frame direction [0: uplink, 1: downlink] * \param [IN] sequenceCounter - Frame sequence counter * \param [OUT] mic - Computed MIC field */ void LoRaMacComputeMic( const uint8_t *buffer, uint16_t size, const uint8_t *key, uint32_t address, uint8_t dir, uint32_t sequenceCounter, uint32_t *mic ); /*! * Computes the LoRaMAC payload encryption * * \param [IN] buffer - Data buffer * \param [IN] size - Data buffer size * \param [IN] key - AES key to be used * \param [IN] address - Frame address * \param [IN] dir - Frame direction [0: uplink, 1: downlink] * \param [IN] sequenceCounter - Frame sequence counter * \param [OUT] encBuffer - Encrypted buffer */ void LoRaMacPayloadEncrypt( const uint8_t *buffer, uint16_t size, const uint8_t *key, uint32_t address, uint8_t dir, uint32_t sequenceCounter, uint8_t *encBuffer ); /*! * Computes the LoRaMAC payload decryption * * \param [IN] buffer - Data buffer * \param [IN] size - Data buffer size * \param [IN] key - AES key to be used * \param [IN] address - Frame address * \param [IN] dir - Frame direction [0: uplink, 1: downlink] * \param [IN] sequenceCounter - Frame sequence counter * \param [OUT] decBuffer - Decrypted buffer */ void LoRaMacPayloadDecrypt( const uint8_t *buffer, uint16_t size, const uint8_t *key, uint32_t address, uint8_t dir, uint32_t sequenceCounter, uint8_t *decBuffer ); /*! * Computes the LoRaMAC Join Request frame MIC field * * \param [IN] buffer - Data buffer * \param [IN] size - Data buffer size * \param [IN] key - AES key to be used * \param [OUT] mic - Computed MIC field */ void LoRaMacJoinComputeMic( const uint8_t *buffer, uint16_t size, const uint8_t *key, uint32_t *mic ); /*! * Computes the LoRaMAC join frame decryption * * \param [IN] buffer - Data buffer * \param [IN] size - Data buffer size * \param [IN] key - AES key to be used * \param [OUT] decBuffer - Decrypted buffer */ void LoRaMacJoinDecrypt( const uint8_t *buffer, uint16_t size, const uint8_t *key, uint8_t *decBuffer ); /*! * Computes the LoRaMAC join frame decryption * * \param [IN] key - AES key to be used * \param [IN] appNonce - Application nonce * \param [IN] devNonce - Device nonce * \param [OUT] nwkSKey - Network session key * \param [OUT] appSKey - Application session key */ void LoRaMacJoinComputeSKeys( const uint8_t *key, const uint8_t *appNonce, uint16_t devNonce, uint8_t *nwkSKey, uint8_t *appSKey ); /*! * Computes the LoRaMAC join frame decryption * * \param [IN] beaconTime - Time of the recent received beacon * \param [IN] address - Frame address * \param [IN] pingPeriod - Ping period of the node * \param [OUT] pingOffset - Pseudo random ping offset */ void LoRaMacBeaconComputePingOffset( uint64_t beaconTime, uint32_t address, uint16_t pingPeriod, uint16_t *pingOffset ); /*! \} defgroup LORAMAC */ #ifdef __cplusplus } // extern "C" #endif #endif // __LORAMAC_CRYPTO_H__