LoRaMacCrypto.h 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. /*!
  2. * \file LoRaMacCrypto.h
  3. *
  4. * \brief LoRa MAC layer cryptography implementation
  5. *
  6. * \copyright Revised BSD License, see section \ref LICENSE.
  7. *
  8. * \code
  9. * ______ _
  10. * / _____) _ | |
  11. * ( (____ _____ ____ _| |_ _____ ____| |__
  12. * \____ \| ___ | (_ _) ___ |/ ___) _ \
  13. * _____) ) ____| | | || |_| ____( (___| | | |
  14. * (______/|_____)_|_|_| \__)_____)\____)_| |_|
  15. * (C)2013 Semtech
  16. *
  17. * ___ _____ _ ___ _ _____ ___ ___ ___ ___
  18. * / __|_ _/_\ / __| |/ / __/ _ \| _ \/ __| __|
  19. * \__ \ | |/ _ \ (__| ' <| _| (_) | / (__| _|
  20. * |___/ |_/_/ \_\___|_|\_\_| \___/|_|_\\___|___|
  21. * embedded.connectivity.solutions===============
  22. *
  23. * \endcode
  24. *
  25. * \author Miguel Luis ( Semtech )
  26. *
  27. * \author Gregory Cristian ( Semtech )
  28. *
  29. * \author Daniel Jäckle ( STACKFORCE )
  30. *
  31. * \defgroup LORAMAC_CRYPTO LoRa MAC layer cryptography implementation
  32. * This module covers the implementation of cryptographic functions
  33. * of the LoRaMAC layer.
  34. * \{
  35. */
  36. #ifndef __LORAMAC_CRYPTO_H__
  37. #define __LORAMAC_CRYPTO_H__
  38. /*!
  39. * Computes the LoRaMAC frame MIC field
  40. *
  41. * \param [IN] buffer - Data buffer
  42. * \param [IN] size - Data buffer size
  43. * \param [IN] key - AES key to be used
  44. * \param [IN] address - Frame address
  45. * \param [IN] dir - Frame direction [0: uplink, 1: downlink]
  46. * \param [IN] sequenceCounter - Frame sequence counter
  47. * \param [OUT] mic - Computed MIC field
  48. */
  49. 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 );
  50. /*!
  51. * Computes the LoRaMAC payload encryption
  52. *
  53. * \param [IN] buffer - Data buffer
  54. * \param [IN] size - Data buffer size
  55. * \param [IN] key - AES key to be used
  56. * \param [IN] address - Frame address
  57. * \param [IN] dir - Frame direction [0: uplink, 1: downlink]
  58. * \param [IN] sequenceCounter - Frame sequence counter
  59. * \param [OUT] encBuffer - Encrypted buffer
  60. */
  61. 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 );
  62. /*!
  63. * Computes the LoRaMAC payload decryption
  64. *
  65. * \param [IN] buffer - Data buffer
  66. * \param [IN] size - Data buffer size
  67. * \param [IN] key - AES key to be used
  68. * \param [IN] address - Frame address
  69. * \param [IN] dir - Frame direction [0: uplink, 1: downlink]
  70. * \param [IN] sequenceCounter - Frame sequence counter
  71. * \param [OUT] decBuffer - Decrypted buffer
  72. */
  73. 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 );
  74. /*!
  75. * Computes the LoRaMAC Join Request frame MIC field
  76. *
  77. * \param [IN] buffer - Data buffer
  78. * \param [IN] size - Data buffer size
  79. * \param [IN] key - AES key to be used
  80. * \param [OUT] mic - Computed MIC field
  81. */
  82. void LoRaMacJoinComputeMic( const uint8_t *buffer, uint16_t size, const uint8_t *key, uint32_t *mic );
  83. /*!
  84. * Computes the LoRaMAC join frame decryption
  85. *
  86. * \param [IN] buffer - Data buffer
  87. * \param [IN] size - Data buffer size
  88. * \param [IN] key - AES key to be used
  89. * \param [OUT] decBuffer - Decrypted buffer
  90. */
  91. void LoRaMacJoinDecrypt( const uint8_t *buffer, uint16_t size, const uint8_t *key, uint8_t *decBuffer );
  92. /*!
  93. * Computes the LoRaMAC join frame decryption
  94. *
  95. * \param [IN] key - AES key to be used
  96. * \param [IN] appNonce - Application nonce
  97. * \param [IN] devNonce - Device nonce
  98. * \param [OUT] nwkSKey - Network session key
  99. * \param [OUT] appSKey - Application session key
  100. */
  101. void LoRaMacJoinComputeSKeys( const uint8_t *key, const uint8_t *appNonce, uint16_t devNonce, uint8_t *nwkSKey, uint8_t *appSKey );
  102. /*! \} defgroup LORAMAC */
  103. #endif // __LORAMAC_CRYPTO_H__