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