• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #include "hitls_build.h"
17 #ifdef HITLS_CRYPTO_PROVIDER
18 
19 #include "crypt_eal_implprovider.h"
20 #include "crypt_hmac.h"
21 #include "crypt_cmac.h"
22 #include "crypt_cbc_mac.h"
23 #include "crypt_gmac.h"
24 #include "crypt_siphash.h"
25 #include "crypt_ealinit.h"
26 #include "bsl_sal.h"
27 #include "crypt_errno.h"
28 #include "bsl_log_internal.h"
29 #include "bsl_err_internal.h"
30 
31 #define MAC_DEINIT_FUNC(name)                              \
32     static int32_t CRYPT_##name##_DeinitWrapper(void *ctx) \
33     {                                                      \
34         CRYPT_##name##_Deinit(ctx);                        \
35         return CRYPT_SUCCESS;                              \
36     }
37 
38 #define MAC_REINIT_FUNC(name)                              \
39     static int32_t CRYPT_##name##_ReinitWrapper(void *ctx) \
40     {                                                      \
41         CRYPT_##name##_Reinit(ctx);                        \
42         return CRYPT_SUCCESS;                              \
43     }
44 
45 #define MAC_FUNCS(name) \
46     MAC_DEINIT_FUNC(name) \
47     MAC_REINIT_FUNC(name)
48 
CRYPT_EAL_DefMacNewCtx(void * provCtx,int32_t algId)49 void *CRYPT_EAL_DefMacNewCtx(void *provCtx, int32_t algId)
50 {
51     (void)provCtx;
52 #ifdef HITLS_CRYPTO_ASM_CHECK
53     if (CRYPT_ASMCAP_Mac(algId) != CRYPT_SUCCESS) {
54         BSL_ERR_PUSH_ERROR(CRYPT_EAL_ALG_ASM_NOT_SUPPORT);
55         return NULL;
56     }
57 #endif
58 
59     switch (algId) {
60 #ifdef HITLS_CRYPTO_HMAC
61         case CRYPT_MAC_HMAC_MD5:
62         case CRYPT_MAC_HMAC_SHA1:
63         case CRYPT_MAC_HMAC_SHA224:
64         case CRYPT_MAC_HMAC_SHA256:
65         case CRYPT_MAC_HMAC_SHA384:
66         case CRYPT_MAC_HMAC_SHA512:
67         case CRYPT_MAC_HMAC_SHA3_224:
68         case CRYPT_MAC_HMAC_SHA3_256:
69         case CRYPT_MAC_HMAC_SHA3_384:
70         case CRYPT_MAC_HMAC_SHA3_512:
71         case CRYPT_MAC_HMAC_SM3:
72             return CRYPT_HMAC_NewCtx(algId);
73 #endif
74 #ifdef HITLS_CRYPTO_CMAC
75         case CRYPT_MAC_CMAC_AES128:
76         case CRYPT_MAC_CMAC_AES192:
77         case CRYPT_MAC_CMAC_AES256:
78         case CRYPT_MAC_CMAC_SM4:
79             return CRYPT_CMAC_NewCtx(algId);
80 #endif
81 #ifdef HITLS_CRYPTO_CBC_MAC
82         case CRYPT_MAC_CBC_MAC_SM4:
83             return CRYPT_CBC_MAC_NewCtx(algId);
84 #endif
85 #ifdef HITLS_CRYPTO_SIPHASH
86         case CRYPT_MAC_SIPHASH64:
87         case CRYPT_MAC_SIPHASH128:
88             return CRYPT_SIPHASH_NewCtx(algId);
89 #endif
90 #ifdef HITLS_CRYPTO_GMAC
91         case CRYPT_MAC_GMAC_AES128:
92         case CRYPT_MAC_GMAC_AES192:
93         case CRYPT_MAC_GMAC_AES256:
94             return CRYPT_GMAC_NewCtx(algId);
95 #endif
96         default:
97             BSL_ERR_PUSH_ERROR(CRYPT_PROVIDER_NOT_SUPPORT);
98             return NULL;
99     }
100 }
101 
102 #ifdef HITLS_CRYPTO_HMAC
103 MAC_FUNCS(HMAC)
104 #endif
105 
106 #ifdef HITLS_CRYPTO_CMAC
107 MAC_FUNCS(CMAC)
108 #endif
109 
110 #ifdef HITLS_CRYPTO_CBC_MAC
111 MAC_FUNCS(CBC_MAC)
112 #endif
113 
114 #ifdef HITLS_CRYPTO_SIPHASH
115 MAC_FUNCS(SIPHASH)
116 #endif
117 
118 #ifdef HITLS_CRYPTO_GMAC
119 MAC_DEINIT_FUNC(GMAC)
120 #endif
121 const CRYPT_EAL_Func g_defEalMacHmac[] = {
122 #ifdef HITLS_CRYPTO_HMAC
123     {CRYPT_EAL_IMPLMAC_NEWCTX, (CRYPT_EAL_ImplMacNewCtx)CRYPT_EAL_DefMacNewCtx},
124     {CRYPT_EAL_IMPLMAC_INIT, (CRYPT_EAL_ImplMacInit)CRYPT_HMAC_Init},
125     {CRYPT_EAL_IMPLMAC_UPDATE, (CRYPT_EAL_ImplMacUpdate)CRYPT_HMAC_Update},
126     {CRYPT_EAL_IMPLMAC_FINAL, (CRYPT_EAL_ImplMacFinal)CRYPT_HMAC_Final},
127     {CRYPT_EAL_IMPLMAC_DEINITCTX, (CRYPT_EAL_ImplMacDeInitCtx)CRYPT_HMAC_DeinitWrapper},
128     {CRYPT_EAL_IMPLMAC_REINITCTX, (CRYPT_EAL_ImplMacReInitCtx)CRYPT_HMAC_ReinitWrapper},
129     {CRYPT_EAL_IMPLMAC_CTRL, (CRYPT_EAL_ImplMacCtrl)CRYPT_HMAC_Ctrl},
130     {CRYPT_EAL_IMPLMAC_FREECTX, (CRYPT_EAL_ImplMacFreeCtx)CRYPT_HMAC_FreeCtx},
131 #endif
132     CRYPT_EAL_FUNC_END,
133 };
134 
135 const CRYPT_EAL_Func g_defEalMacCmac[] = {
136 #ifdef HITLS_CRYPTO_CMAC
137     {CRYPT_EAL_IMPLMAC_NEWCTX, (CRYPT_EAL_ImplMacNewCtx)CRYPT_EAL_DefMacNewCtx},
138     {CRYPT_EAL_IMPLMAC_INIT, (CRYPT_EAL_ImplMacInit)CRYPT_CMAC_Init},
139     {CRYPT_EAL_IMPLMAC_UPDATE, (CRYPT_EAL_ImplMacUpdate)CRYPT_CMAC_Update},
140     {CRYPT_EAL_IMPLMAC_FINAL, (CRYPT_EAL_ImplMacFinal)CRYPT_CMAC_Final},
141     {CRYPT_EAL_IMPLMAC_DEINITCTX, (CRYPT_EAL_ImplMacDeInitCtx)CRYPT_CMAC_DeinitWrapper},
142     {CRYPT_EAL_IMPLMAC_REINITCTX, (CRYPT_EAL_ImplMacReInitCtx)CRYPT_CMAC_ReinitWrapper},
143     {CRYPT_EAL_IMPLMAC_CTRL, (CRYPT_EAL_ImplMacCtrl)CRYPT_CMAC_Ctrl},
144     {CRYPT_EAL_IMPLMAC_FREECTX, (CRYPT_EAL_ImplMacFreeCtx)CRYPT_CMAC_FreeCtx},
145 #endif
146     CRYPT_EAL_FUNC_END,
147 };
148 
149 const CRYPT_EAL_Func g_defEalMacCbcMac[] = {
150 #ifdef HITLS_CRYPTO_CBC_MAC
151     {CRYPT_EAL_IMPLMAC_NEWCTX, (CRYPT_EAL_ImplMacNewCtx)CRYPT_EAL_DefMacNewCtx},
152     {CRYPT_EAL_IMPLMAC_INIT, (CRYPT_EAL_ImplMacInit)CRYPT_CBC_MAC_Init},
153     {CRYPT_EAL_IMPLMAC_UPDATE, (CRYPT_EAL_ImplMacUpdate)CRYPT_CBC_MAC_Update},
154     {CRYPT_EAL_IMPLMAC_FINAL, (CRYPT_EAL_ImplMacFinal)CRYPT_CBC_MAC_Final},
155     {CRYPT_EAL_IMPLMAC_DEINITCTX, (CRYPT_EAL_ImplMacDeInitCtx)CRYPT_CBC_MAC_DeinitWrapper},
156     {CRYPT_EAL_IMPLMAC_REINITCTX, (CRYPT_EAL_ImplMacReInitCtx)CRYPT_CBC_MAC_ReinitWrapper},
157     {CRYPT_EAL_IMPLMAC_CTRL, (CRYPT_EAL_ImplMacCtrl)CRYPT_CBC_MAC_Ctrl},
158     {CRYPT_EAL_IMPLMAC_FREECTX, (CRYPT_EAL_ImplMacFreeCtx)CRYPT_CBC_MAC_FreeCtx},
159 #endif
160     CRYPT_EAL_FUNC_END,
161 };
162 
163 const CRYPT_EAL_Func g_defEalMacGmac[] = {
164 #ifdef HITLS_CRYPTO_GMAC
165     {CRYPT_EAL_IMPLMAC_NEWCTX, (CRYPT_EAL_ImplMacNewCtx)CRYPT_EAL_DefMacNewCtx},
166     {CRYPT_EAL_IMPLMAC_INIT, (CRYPT_EAL_ImplMacInit)CRYPT_GMAC_Init},
167     {CRYPT_EAL_IMPLMAC_UPDATE, (CRYPT_EAL_ImplMacUpdate)CRYPT_GMAC_Update},
168     {CRYPT_EAL_IMPLMAC_FINAL, (CRYPT_EAL_ImplMacFinal)CRYPT_GMAC_Final},
169     {CRYPT_EAL_IMPLMAC_DEINITCTX, (CRYPT_EAL_ImplMacDeInitCtx)CRYPT_GMAC_DeinitWrapper},
170     {CRYPT_EAL_IMPLMAC_REINITCTX, NULL},
171     {CRYPT_EAL_IMPLMAC_CTRL, (CRYPT_EAL_ImplMacCtrl)CRYPT_GMAC_Ctrl},
172     {CRYPT_EAL_IMPLMAC_FREECTX, (CRYPT_EAL_ImplMacFreeCtx)CRYPT_GMAC_FreeCtx},
173 #endif
174     CRYPT_EAL_FUNC_END,
175 };
176 
177 const CRYPT_EAL_Func g_defEalMacSiphash[] = {
178 #ifdef HITLS_CRYPTO_SIPHASH
179     {CRYPT_EAL_IMPLMAC_NEWCTX, (CRYPT_EAL_ImplMacNewCtx)CRYPT_EAL_DefMacNewCtx},
180     {CRYPT_EAL_IMPLMAC_INIT, (CRYPT_EAL_ImplMacInit)CRYPT_SIPHASH_Init},
181     {CRYPT_EAL_IMPLMAC_UPDATE, (CRYPT_EAL_ImplMacUpdate)CRYPT_SIPHASH_Update},
182     {CRYPT_EAL_IMPLMAC_FINAL, (CRYPT_EAL_ImplMacFinal)CRYPT_SIPHASH_Final},
183     {CRYPT_EAL_IMPLMAC_DEINITCTX, (CRYPT_EAL_ImplMacDeInitCtx)CRYPT_SIPHASH_DeinitWrapper},
184     {CRYPT_EAL_IMPLMAC_REINITCTX, (CRYPT_EAL_ImplMacReInitCtx)CRYPT_SIPHASH_ReinitWrapper},
185     {CRYPT_EAL_IMPLMAC_CTRL, (CRYPT_EAL_ImplMacCtrl)CRYPT_SIPHASH_Ctrl},
186     {CRYPT_EAL_IMPLMAC_FREECTX, (CRYPT_EAL_ImplMacFreeCtx)CRYPT_SIPHASH_FreeCtx},
187 #endif
188     CRYPT_EAL_FUNC_END,
189 };
190 
191 #endif /* HITLS_CRYPTO_PROVIDER */