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 #if defined(HITLS_CRYPTO_EAL) && defined(HITLS_CRYPTO_KDF)
18
19 #include "crypt_local_types.h"
20 #include "crypt_algid.h"
21 #ifdef HITLS_CRYPTO_PBKDF2
22 #include "crypt_pbkdf2.h"
23 #endif
24 #ifdef HITLS_CRYPTO_HKDF
25 #include "crypt_hkdf.h"
26 #endif
27 #ifdef HITLS_CRYPTO_KDFTLS12
28 #include "crypt_kdf_tls12.h"
29 #endif
30 #ifdef HITLS_CRYPTO_SCRYPT
31 #include "crypt_scrypt.h"
32 #endif
33 #include "bsl_err_internal.h"
34 #include "eal_common.h"
35 #include "bsl_sal.h"
36
37 #define CRYPT_KDF_IMPL_METHOD_DECLARE(name) \
38 EAL_KdfMethod g_kdfMethod_##name = { \
39 (KdfNewCtx)CRYPT_##name##_NewCtx, (KdfSetParam)CRYPT_##name##_SetParam, \
40 (KdfDerive)CRYPT_##name##_Derive, (KdfDeinit)CRYPT_##name##_Deinit, \
41 (KdfFreeCtx)CRYPT_##name##_FreeCtx, NULL \
42 }
43
44 #ifdef HITLS_CRYPTO_PBKDF2
45 CRYPT_KDF_IMPL_METHOD_DECLARE(PBKDF2);
46 #endif
47
48 #ifdef HITLS_CRYPTO_HKDF
49 CRYPT_KDF_IMPL_METHOD_DECLARE(HKDF);
50 #endif
51
52 #ifdef HITLS_CRYPTO_KDFTLS12
53 CRYPT_KDF_IMPL_METHOD_DECLARE(KDFTLS12);
54 #endif
55
56 #ifdef HITLS_CRYPTO_SCRYPT
57 CRYPT_KDF_IMPL_METHOD_DECLARE(SCRYPT);
58 #endif
59
60 static const EAL_CidToKdfMeth ID_TO_KDF_METH_TABLE[] = {
61 #ifdef HITLS_CRYPTO_PBKDF2
62 {CRYPT_KDF_PBKDF2, &g_kdfMethod_PBKDF2},
63 #endif
64 #ifdef HITLS_CRYPTO_HKDF
65 {CRYPT_KDF_HKDF, &g_kdfMethod_HKDF},
66 #endif
67 #ifdef HITLS_CRYPTO_KDFTLS12
68 {CRYPT_KDF_KDFTLS12, &g_kdfMethod_KDFTLS12},
69 #endif
70 #ifdef HITLS_CRYPTO_SCRYPT
71 {CRYPT_KDF_SCRYPT, &g_kdfMethod_SCRYPT},
72 #endif
73 };
74
EAL_KdfFindMethod(CRYPT_KDF_AlgId id)75 const EAL_KdfMethod *EAL_KdfFindMethod(CRYPT_KDF_AlgId id)
76 {
77 EAL_KdfMethod *pKdfMeth = NULL;
78 uint32_t num = sizeof(ID_TO_KDF_METH_TABLE) / sizeof(ID_TO_KDF_METH_TABLE[0]);
79
80 for (uint32_t i = 0; i < num; i++) {
81 if (ID_TO_KDF_METH_TABLE[i].id == id) {
82 pKdfMeth = ID_TO_KDF_METH_TABLE[i].kdfMeth;
83 return pKdfMeth;
84 }
85 }
86
87 return NULL;
88 }
89
90 #endif