1 /* 2 * This file is part of the openHiTLS project. 3 * 4 * openHiTLS is licensed under the Mulan PSL v2. 5 * You can use this software according to the terms and conditions of the Mulan PSL v2. 6 * You may obtain a copy of Mulan PSL v2 at: 7 * 8 * http://license.coscl.org.cn/MulanPSL2 9 * 10 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, 11 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, 12 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. 13 * See the Mulan PSL v2 for more details. 14 */ 15 16 #ifndef EAL_MAC_LOCAL_H 17 #define EAL_MAC_LOCAL_H 18 19 #include "hitls_build.h" 20 #if defined(HITLS_CRYPTO_EAL) && defined(HITLS_CRYPTO_MAC) 21 22 #include <stdint.h> 23 #include "crypt_algid.h" 24 #include "crypt_local_types.h" 25 26 #ifdef __cplusplus 27 extern "C" { 28 #endif // __cplusplus 29 30 typedef enum { 31 CRYPT_MAC_STATE_NEW = 0, 32 CRYPT_MAC_STATE_INIT, 33 CRYPT_MAC_STATE_UPDATE, 34 CRYPT_MAC_STATE_FINAL 35 } CRYPT_MAC_WORKSTATE; 36 37 typedef enum { 38 CRYPT_MAC_HMAC = 0, 39 CRYPT_MAC_CMAC, 40 CRYPT_MAC_CBC_MAC, 41 CRYPT_MAC_SIPHASH, 42 CRYPT_MAC_GMAC, 43 CRYPT_MAC_INVALID 44 } CRYPT_MAC_ID; 45 46 struct EAL_MacCtx { 47 bool isProvider; 48 EAL_MacUnitaryMethod *macMeth; // combined algorithm 49 void *ctx; // MAC context 50 CRYPT_MAC_AlgId id; 51 CRYPT_MAC_WORKSTATE state; 52 }; 53 54 typedef struct { 55 uint32_t id; 56 CRYPT_MAC_ID macId; 57 union { 58 CRYPT_MD_AlgId mdId; 59 CRYPT_SYM_AlgId symId; 60 }; 61 } EAL_MacAlgMap; 62 63 int32_t EAL_MacFindMethod(CRYPT_MAC_AlgId id, EAL_MacMethLookup *lu); 64 65 #ifdef __cplusplus 66 } 67 #endif // __cplusplus 68 69 #endif // HITLS_CRYPTO_MAC 70 71 #endif // EAL_MAC_LOCAL_H 72