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 #include "hitls_build.h"
16 #ifdef HITLS_TLS_PROTO_TLS13
17 #include "securec.h"
18 #include "tls.h"
19 #include "bsl_err_internal.h"
20 #include "hitls_error.h"
21 #include "config_default.h"
22 #ifdef HITLS_TLS_FEATURE_PSK
23 #include "hitls_psk.h"
24 #endif
25
HITLS_CFG_NewTLS13Config(void)26 HITLS_Config *HITLS_CFG_NewTLS13Config(void)
27 {
28 return HITLS_CFG_ProviderNewTLS13Config(NULL, NULL);
29 }
30
HITLS_CFG_ProviderNewTLS13Config(HITLS_Lib_Ctx * libCtx,const char * attrName)31 HITLS_Config *HITLS_CFG_ProviderNewTLS13Config(HITLS_Lib_Ctx *libCtx, const char *attrName)
32 {
33 HITLS_Config *newConfig = CreateConfig();
34 if (newConfig == NULL) {
35 return NULL;
36 }
37 newConfig->version |= TLS13_VERSION_BIT; // Enable TLS1.3
38
39 newConfig->libCtx = libCtx;
40 newConfig->attrName = attrName;
41
42 if (DefaultTLS13Config(newConfig) != HITLS_SUCCESS) {
43 BSL_SAL_FREE(newConfig);
44 return NULL;
45 }
46 newConfig->originVersionMask = newConfig->version;
47 return newConfig;
48 }
49
HITLS_CFG_ClearTLS13CipherSuites(HITLS_Config * config)50 int32_t HITLS_CFG_ClearTLS13CipherSuites(HITLS_Config *config)
51 {
52 if (config == NULL) {
53 return HITLS_NULL_INPUT;
54 }
55
56 BSL_SAL_FREE(config->tls13CipherSuites);
57 config->tls13cipherSuitesSize = 0;
58 return HITLS_SUCCESS;
59 }
60
HITLS_CFG_SetKeyExchMode(HITLS_Config * config,uint32_t mode)61 int32_t HITLS_CFG_SetKeyExchMode(HITLS_Config *config, uint32_t mode)
62 {
63 if (config == NULL) {
64 return HITLS_NULL_INPUT;
65 }
66 if (((mode & TLS13_KE_MODE_PSK_ONLY) == TLS13_KE_MODE_PSK_ONLY) ||
67 ((mode & TLS13_KE_MODE_PSK_WITH_DHE) == TLS13_KE_MODE_PSK_WITH_DHE)) {
68 config->keyExchMode = (mode & (TLS13_KE_MODE_PSK_ONLY | TLS13_KE_MODE_PSK_WITH_DHE));
69 return HITLS_SUCCESS;
70 }
71 return HITLS_CONFIG_INVALID_SET;
72 }
73
HITLS_CFG_GetKeyExchMode(HITLS_Config * config)74 uint32_t HITLS_CFG_GetKeyExchMode(HITLS_Config *config)
75 {
76 if (config == NULL) {
77 return HITLS_NULL_INPUT;
78 }
79 return config->keyExchMode;
80 }
81
82 #ifdef HITLS_TLS_FEATURE_PSK
HITLS_CFG_SetPskFindSessionCallback(HITLS_Config * config,HITLS_PskFindSessionCb callback)83 int32_t HITLS_CFG_SetPskFindSessionCallback(HITLS_Config *config, HITLS_PskFindSessionCb callback)
84 {
85 if (config == NULL) {
86 return HITLS_NULL_INPUT;
87 }
88
89 config->pskFindSessionCb = callback;
90 return HITLS_SUCCESS;
91 }
92
HITLS_CFG_SetPskUseSessionCallback(HITLS_Config * config,HITLS_PskUseSessionCb callback)93 int32_t HITLS_CFG_SetPskUseSessionCallback(HITLS_Config *config, HITLS_PskUseSessionCb callback)
94 {
95 if (config == NULL) {
96 return HITLS_NULL_INPUT;
97 }
98
99 config->pskUseSessionCb = callback;
100 return HITLS_SUCCESS;
101 }
102 #endif
103
104 #ifdef HITLS_TLS_FEATURE_PHA
HITLS_CFG_SetPostHandshakeAuthSupport(HITLS_Config * config,bool support)105 int32_t HITLS_CFG_SetPostHandshakeAuthSupport(HITLS_Config *config, bool support)
106 {
107 if (config == NULL) {
108 return HITLS_NULL_INPUT;
109 }
110 config->isSupportPostHandshakeAuth = support;
111 return HITLS_SUCCESS;
112 }
HITLS_CFG_GetPostHandshakeAuthSupport(HITLS_Config * config,uint8_t * isSupport)113 int32_t HITLS_CFG_GetPostHandshakeAuthSupport(HITLS_Config *config, uint8_t *isSupport)
114 {
115 if (config == NULL || isSupport == NULL) {
116 return HITLS_NULL_INPUT;
117 }
118
119 *isSupport = (uint8_t)config->isSupportPostHandshakeAuth;
120 return HITLS_SUCCESS;
121 }
122 #endif
123 #endif /* HITLS_TLS_PROTO_TLS13 */