blob: d619d80ed9d2004a40b6a3f6420c8d336adbb3ea [file] [log] [blame]
Jerry Yu3cc4c2a2021-08-06 16:29:08 +08001/*
2 * TLS 1.3 client-side functions
3 *
4 * Copyright The Mbed TLS Contributors
5 * SPDX-License-Identifier: Apache-2.0
6 *
7 * Licensed under the Apache License, Version 2.0 (the "License"); you may
8 * not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
15 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 *
19 * This file is part of mbed TLS ( https://tls.mbed.org )
20 */
21
22#include "common.h"
23
24#if defined(MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL)
25
26#if defined(MBEDTLS_SSL_CLI_C)
27
28#include "ssl_misc.h"
Jerry Yua13c7e72021-08-17 10:44:40 +080029#include <mbedtls/debug.h>
30
31static int ssl_client_hello_process( mbedtls_ssl_context* ssl );
Jerry Yu3cc4c2a2021-08-06 16:29:08 +080032
Jerry Yub9930e72021-08-06 17:11:51 +080033int mbedtls_ssl_handshake_client_step_tls1_3( mbedtls_ssl_context *ssl )
34{
Jerry Yua13c7e72021-08-17 10:44:40 +080035 int ret = 0;
36
37 if( ssl->state == MBEDTLS_SSL_HANDSHAKE_OVER || ssl->handshake == NULL )
38 {
39 MBEDTLS_SSL_DEBUG_MSG( 2, ( "Handshake completed but ssl->handshake is NULL.\n" ) );
40 return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA );
41 }
42
43 MBEDTLS_SSL_DEBUG_MSG( 2, ( "client state: %d", ssl->state ) );
44
45 switch( ssl->state )
46 {
47 case MBEDTLS_SSL_HELLO_REQUEST:
48 mbedtls_ssl_handshake_set_state( ssl, MBEDTLS_SSL_CLIENT_HELLO );
49 break;
50
51 case MBEDTLS_SSL_CLIENT_HELLO:
52 ret = ssl_client_hello_process( ssl );
53 break;
54
55 case MBEDTLS_SSL_SERVER_HELLO:
56 // Stop here : we haven't finished whole flow
57 ret=MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE;
58 mbedtls_ssl_handshake_set_state( ssl, MBEDTLS_SSL_ENCRYPTED_EXTENSIONS );
59 break;
60
61 default:
62 MBEDTLS_SSL_DEBUG_MSG( 1, ( "invalid state %d", ssl->state ) );
63 return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA );
64 }
65
66 return( ret );
67}
68
69static int ssl_client_hello_process( mbedtls_ssl_context* ssl )
70{
71 int ret = 0;
72
73 MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> write client hello" ) );
74
75 mbedtls_ssl_handshake_set_state( ssl, MBEDTLS_SSL_SERVER_HELLO );
76
77 MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write client hello" ) );
78 /* client_hello_process haven't finished */
79 ret=MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE;
80 return ret;
Jerry Yub9930e72021-08-06 17:11:51 +080081}
Jerry Yu3cc4c2a2021-08-06 16:29:08 +080082
83#endif /* MBEDTLS_SSL_CLI_C */
84
85#endif /* MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL */