1 /* 2 * Copyright (c) 2021, Nordic Semiconductor ASA 3 * All rights reserved. 4 * 5 * SPDX-License-Identifier: BSD-3-Clause 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions are met: 9 * 10 * 1. Redistributions of source code must retain the above copyright notice, this 11 * list of conditions and the following disclaimer. 12 * 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 17 * 3. Neither the name of Nordic Semiconductor ASA nor the names of its 18 * contributors may be used to endorse or promote products derived from this 19 * software without specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 22 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23 * IMPLIED WARRANTIES OF MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE 24 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 25 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 26 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 27 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 28 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 29 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 30 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 31 * POSSIBILITY OF SUCH DAMAGE. 32 * 33 */ 34 35 #ifndef NRF_802154_ENCRYPT_H_ 36 #define NRF_802154_ENCRYPT_H_ 37 38 #include <stdbool.h> 39 #include <stdint.h> 40 41 #include "nrf_802154_types_internal.h" 42 #include "mac_features/nrf_802154_frame_parser.h" 43 44 #ifdef __cplusplus 45 extern "C" { 46 #endif 47 48 /** 49 * @brief Prepares encryption data for provided Ack. 50 * 51 * @param[in] p_ack_data Pointer to the ACK frame parser data. 52 */ 53 bool nrf_802154_encrypt_ack_prepare(const nrf_802154_frame_parser_data_t * p_ack_data); 54 55 /** 56 * @brief Resets encryption of ACK 57 */ 58 void nrf_802154_encrypt_ack_reset(void); 59 60 /** 61 * @brief Transmission setup hook for the encryption module. 62 * 63 * This hook prepares encryption data for provided frame. 64 * 65 * @param[in] p_frame Pointer to the buffer that contains the PHR and PSDU 66 * of the transmitted frame. 67 * @param[in] p_params Pointer to the transmission parameters. 68 * @param[in] notify_function Function to be called to notify transmission failure. 69 * 70 * @retval true Encryption was prepared successfully. 71 * @retval false Encryption prepare failed. 72 */ 73 bool nrf_802154_encrypt_tx_setup( 74 uint8_t * p_frame, 75 nrf_802154_transmit_params_t * p_params, 76 nrf_802154_transmit_failed_notification_t notify_function); 77 78 /** 79 * @brief TX started hook for the encryption module. 80 * 81 * This function triggers the transformation procedure of the provided frame. 82 * 83 * @param[in] p_frame Pointer to the buffer that contains a frame being transmitted. 84 * 85 * @retval true Always succeeds. 86 */ 87 bool nrf_802154_encrypt_tx_started_hook(uint8_t * p_frame); 88 89 /** 90 * @brief ACK TX started hook for the encryption module. 91 * 92 * This function triggers the transformation procedure of the provided Ack. 93 * 94 * @param[in] p_ack Pointer to the buffer that contains the PHR and PSDU of the ACK frame. 95 */ 96 void nrf_802154_encrypt_tx_ack_started_hook(uint8_t * p_ack); 97 98 /** 99 * @brief TX failed hook for the encryption module. 100 * 101 * This function aborts the transformation procedure of the provided frame. 102 * 103 * @param[in] p_frame Pointer to the buffer that contains a frame being transmitted. 104 * @param[in] error Cause of the failed transmission. 105 * 106 * @retval true Always succeeds. 107 */ 108 bool nrf_802154_encrypt_tx_failed_hook(uint8_t * p_frame, nrf_802154_tx_error_t error); 109 110 /** 111 * @brief ACK TX failed hook for the encryption module. 112 * 113 * This function aborts the transformation procedure of the provided ACK frame. 114 * 115 * @param[in] p_ack Pointer to the buffer that contains a frame being transmitted. 116 * @param[in] error Cause of the failed transmission. 117 */ 118 void nrf_802154_encrypt_tx_ack_failed_hook(uint8_t * p_ack, nrf_802154_tx_error_t error); 119 120 #endif /* NRF_802154_ENCRYPT_H_ */ 121