• 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 #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