|
52 | 52 |
|
53 | 53 | #define LR11XX_CRYPTO_FW_IMAGE_DATA_MAX_LENGTH_UINT32 ( 64 ) |
54 | 54 | #define LR11XX_CRYPTO_FW_IMAGE_DATA_MAX_LENGTH_UINT8 ( LR11XX_CRYPTO_FW_IMAGE_DATA_MAX_LENGTH_UINT32 * 4 ) |
| 55 | +#define LR11XX_CRYPTO_MAX_JOIN_ACCEPT_DATA_SIZE ( 32 ) |
55 | 56 |
|
56 | 57 | #define LR11XX_CRYPTO_SELECT_CMD_LENGTH ( 2 + 1 ) |
57 | 58 | #define LR11XX_CRYPTO_SET_KEY_CMD_LENGTH ( 2 + 17 ) |
58 | 59 | #define LR11XX_CRYPTO_DERIVE_KEY_CMD_LENGTH ( 2 + 18 ) |
59 | | -#define LR11XX_CRYPTO_PROCESS_JOIN_ACCEPT_CMD_LENGTH ( 2 + 3 + 12 + 32 ) |
| 60 | +#define LR11XX_CRYPTO_PROCESS_JOIN_ACCEPT_CMD_LENGTH ( 2 + 3 + 12 + LR11XX_CRYPTO_MAX_JOIN_ACCEPT_DATA_SIZE ) |
60 | 61 | #define LR11XX_CRYPTO_COMPUTE_AES_CMAC_CMD_LENGTH ( 2 + 1 + 272 ) |
61 | 62 | #define LR11XX_CRYPTO_VERIFY_AES_CMAC_CMD_LENGTH ( 2 + 1 + 4 + 256 ) |
62 | 63 | #define LR11XX_CRYPTO_AES_ENCRYPT_CMD_LENGTH ( 2 + 1 + 256 ) |
@@ -209,7 +210,24 @@ lr11xx_status_t lr11xx_crypto_process_join_accept( const void* context, lr11xx_c |
209 | 210 | { |
210 | 211 | uint8_t cbuffer[LR11XX_CRYPTO_PROCESS_JOIN_ACCEPT_CMD_LENGTH] = { 0x00 }; |
211 | 212 | uint8_t rbuffer[LR11XX_CRYPTO_STATUS_LENGTH + 32] = { 0x00 }; |
212 | | - uint8_t header_length = ( lorawan_version == 0 ) ? 1 : 12; |
| 213 | + uint8_t header_length; |
| 214 | + |
| 215 | + switch( lorawan_version ) |
| 216 | + { |
| 217 | + case LR11XX_CRYPTO_LORAWAN_VERSION_1_0_X: |
| 218 | + header_length = 1; |
| 219 | + break; |
| 220 | + case LR11XX_CRYPTO_LORAWAN_VERSION_1_1_X: |
| 221 | + header_length = 12; |
| 222 | + break; |
| 223 | + default: |
| 224 | + return LR11XX_STATUS_ERROR; |
| 225 | + } |
| 226 | + |
| 227 | + if( length > LR11XX_CRYPTO_MAX_JOIN_ACCEPT_DATA_SIZE ) |
| 228 | + { |
| 229 | + return LR11XX_STATUS_ERROR; |
| 230 | + } |
213 | 231 |
|
214 | 232 | cbuffer[0] = ( uint8_t ) ( LR11XX_CRYPTO_PROCESS_JOIN_ACCEPT_OC >> 8 ); |
215 | 233 | cbuffer[1] = ( uint8_t ) ( LR11XX_CRYPTO_PROCESS_JOIN_ACCEPT_OC >> 0 ); |
@@ -550,9 +568,16 @@ lr11xx_status_t lr11xx_crypto_get_check_encrypted_firmware_image_result( const v |
550 | 568 | ( uint8_t ) ( LR11XX_CRYPTO_GET_CHECK_ENCRYPTED_FW_IMAGE_RESULT_OC >> 0 ), |
551 | 569 | }; |
552 | 570 |
|
553 | | - return ( lr11xx_status_t ) lr11xx_hal_read( context, cbuffer, |
554 | | - LR11XX_CRYPTO_GET_CHECK_ENCRYPTED_FW_IMAGE_RESULT_CMD_LENGTH, |
555 | | - ( uint8_t* ) is_encrypted_fw_image_ok, 1 ); |
| 571 | + uint8_t is_encrypted_fw_image_ok_raw = 0; |
| 572 | + const lr11xx_status_t status = ( lr11xx_status_t ) lr11xx_hal_read( |
| 573 | + context, cbuffer, LR11XX_CRYPTO_GET_CHECK_ENCRYPTED_FW_IMAGE_RESULT_CMD_LENGTH, &is_encrypted_fw_image_ok_raw, |
| 574 | + 1 ); |
| 575 | + |
| 576 | + if( status == LR11XX_STATUS_OK ) |
| 577 | + { |
| 578 | + *is_encrypted_fw_image_ok = ( bool ) is_encrypted_fw_image_ok_raw; |
| 579 | + } |
| 580 | + return status; |
556 | 581 | } |
557 | 582 |
|
558 | 583 | /* |
|
0 commit comments