1 /****************************************************************************** 2 * Copyright (c) 2022-2023 Texas Instruments Incorporated 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions are met: 6 * 7 * 1) Redistributions of source code must retain the above copyright notice, 8 * this list of conditions and the following disclaimer. 9 * 10 * 2) Redistributions in binary form must reproduce the above copyright notice, 11 * this list of conditions and the following disclaimer in the documentation 12 * and/or other materials provided with the distribution. 13 * 14 * 3) Neither the name of the copyright holder nor the names of its 15 * contributors may be used to endorse or promote products derived from this 16 * software without specific prior written permission. 17 * 18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 22 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28 * POSSIBILITY OF SUCH DAMAGE. 29 * 30 ******************************************************************************/ 31 #ifndef SHA2SW_COMMON_H_ 32 #define SHA2SW_COMMON_H_ 33 34 /*! ============================================================================ 35 * @file sha2sw_common.h 36 * 37 * @brief Definitions common across all SHA2 SW modules. 38 * 39 * # Overview # 40 * Provides top-level general purpose SHA2 SW definitions such as 41 * error return codes and enumerations. 42 * 43 */ 44 45 #include <stddef.h> 46 #include <stdint.h> 47 48 #include "sha2sw_config.h" 49 50 /*! 51 * @brief Enum for the hash types supported by the library. 52 */ 53 typedef enum 54 { 55 SHA2SW_HASH_TYPE_256 = 0, 56 #if SHA2SW_SUPPORT_SHA2_224 == 1 57 SHA2SW_HASH_TYPE_224 = 1, 58 #endif 59 #if SHA2SW_SUPPORT_SHA2_384 == 1 60 SHA2SW_HASH_TYPE_384 = 2, 61 #endif 62 SHA2SW_HASH_TYPE_512 = 3 63 } SHA2SW_HashType; 64 65 /*! 66 * @brief Number of rounds used in the SHA2 224 and 256 algorithms. 67 */ 68 #define SHA2SW_224_OR_256_ROUNDS ((uint8_t)64u) 69 70 /*! 71 * @brief Number of rounds used in the SHA2 384 and 512 algorithms. 72 */ 73 #define SHA2SW_384_OR_512_ROUNDS ((uint8_t)80u) 74 75 /*! 76 * @brief Number of bytes in the block of the SHA2 224 and 256 algorithms. 77 */ 78 #define SHA2SW_224_OR_256_BLOCK_SIZE ((uint8_t)64u) 79 80 /*! 81 * @brief Number of bytes in the block of the SHA2 384 and 512 algorithms. 82 */ 83 #define SHA2SW_384_OR_512_BLOCK_SIZE ((uint8_t)128u) 84 85 /*! 86 * @brief The maximum number of bits this implementation 87 * supports in the input message/data. 88 */ 89 #define SHA2SW_MAX_MESSAGE_BIT_LENGTH ((uint32_t)0x20000000u) 90 91 /*! 92 * @addtogroup sw_libraries_group 93 * @{ 94 * @addtogroup sha2sw_status_codes 95 * @{ 96 * @brief Status codes returned by the SHA2 SW module. 97 */ 98 99 /*! 100 * @brief Successful status code. 101 * 102 * Functions return SHA2SW_STATUS_SUCCESS if the function was executed 103 * successfully. 104 */ 105 #define SHA2SW_STATUS_SUCCESS ((int_fast16_t)0) 106 107 /*! 108 * @brief Generic error status code. 109 * 110 * Functions return SHA2SW_STATUS_ERROR if the function was not executed 111 * successfully and no more specific error is applicable. 112 */ 113 #define SHA2SW_STATUS_ERROR ((int_fast16_t)-100) 114 115 /*! 116 * @brief Requested operation is not supported. 117 * 118 * The library (as built) does not support a requested feature. 119 */ 120 #define SHA2SW_STATUS_UNSUPPORTED ((int_fast16_t)-102) 121 122 /*! 123 * @brief Too many data bytes have been requested to be hashed. 124 * 125 * The library supports a maximum length of 512MiB to be hashed. 126 */ 127 #define SHA2SW_STATUS_LENGTH_TOO_LARGE ((int_fast16_t)-103) 128 129 /*! 130 * @brief Input value was NULL. 131 * 132 * An input pointer was NULL. Operation not performed. 133 */ 134 #define SHA2SW_STATUS_NULL_INPUT ((int_fast16_t)-104) 135 136 /*! @}*/ 137 /*! @}*/ 138 139 #endif /* SHA2SW_COMMON_H_ */ 140