diff options
author | robot-contrib <robot-contrib@yandex-team.com> | 2022-12-29 11:19:28 +0300 |
---|---|---|
committer | robot-contrib <robot-contrib@yandex-team.com> | 2022-12-29 11:19:28 +0300 |
commit | fed8d432668e1993b6d0d429398d65aa40f3f5fe (patch) | |
tree | 5b837c62d01f3fcdafb6a31ae4914f530053c5b9 /contrib/restricted/aws/s2n/tls/s2n_handshake_io.c | |
parent | d6e1a495bd3ea25012ef907b23327e085f36be1c (diff) | |
download | ydb-fed8d432668e1993b6d0d429398d65aa40f3f5fe.tar.gz |
Update contrib/restricted/aws/s2n to 1.3.31
Diffstat (limited to 'contrib/restricted/aws/s2n/tls/s2n_handshake_io.c')
-rw-r--r-- | contrib/restricted/aws/s2n/tls/s2n_handshake_io.c | 78 |
1 files changed, 36 insertions, 42 deletions
diff --git a/contrib/restricted/aws/s2n/tls/s2n_handshake_io.c b/contrib/restricted/aws/s2n/tls/s2n_handshake_io.c index fb7de64ae8..08656c98b1 100644 --- a/contrib/restricted/aws/s2n/tls/s2n_handshake_io.c +++ b/contrib/restricted/aws/s2n/tls/s2n_handshake_io.c @@ -13,34 +13,29 @@ * permissions and limitations under the License. */ +#include <errno.h> #include <sys/param.h> -#include <errno.h> #include "api/s2n.h" - -#include "error/s2n_errno.h" - #include "crypto/s2n_fips.h" - +#include "error/s2n_errno.h" +#include "stuffer/s2n_stuffer.h" +#include "tls/s2n_alerts.h" #include "tls/s2n_async_pkey.h" #include "tls/s2n_cipher_suites.h" #include "tls/s2n_connection.h" +#include "tls/s2n_kex.h" +#include "tls/s2n_post_handshake.h" #include "tls/s2n_record.h" #include "tls/s2n_resume.h" -#include "tls/s2n_alerts.h" #include "tls/s2n_tls.h" #include "tls/s2n_tls13.h" #include "tls/s2n_tls13_handshake.h" #include "tls/s2n_tls13_key_schedule.h" -#include "tls/s2n_kex.h" -#include "tls/s2n_post_handshake.h" - -#include "stuffer/s2n_stuffer.h" - +#include "utils/s2n_bitmap.h" +#include "utils/s2n_random.h" #include "utils/s2n_safety.h" #include "utils/s2n_socket.h" -#include "utils/s2n_random.h" -#include "utils/s2n_bitmap.h" /* clang-format off */ struct s2n_handshake_action { @@ -805,9 +800,9 @@ static message_type_t tls13_handshakes[S2N_HANDSHAKES_COUNT][S2N_MAX_HANDSHAKE_L /* clang-format on */ #define MAX_HANDSHAKE_TYPE_LEN 142 -static char handshake_type_str[S2N_HANDSHAKES_COUNT][MAX_HANDSHAKE_TYPE_LEN] = {0}; +static char handshake_type_str[S2N_HANDSHAKES_COUNT][MAX_HANDSHAKE_TYPE_LEN] = { 0 }; -static const char* tls12_handshake_type_names[] = { +static const char *tls12_handshake_type_names[] = { "NEGOTIATED|", "FULL_HANDSHAKE|", "CLIENT_AUTH|", @@ -818,7 +813,7 @@ static const char* tls12_handshake_type_names[] = { "WITH_NPN|", }; -static const char* tls13_handshake_type_names[] = { +static const char *tls13_handshake_type_names[] = { "NEGOTIATED|", "FULL_HANDSHAKE|", "CLIENT_AUTH|", @@ -829,22 +824,24 @@ static const char* tls13_handshake_type_names[] = { "EARLY_CLIENT_CCS|", }; -#define IS_TLS13_HANDSHAKE( conn ) ((conn)->actual_protocol_version == S2N_TLS13) +#define IS_TLS13_HANDSHAKE(conn) ((conn)->actual_protocol_version == S2N_TLS13) -#define ACTIVE_STATE_MACHINE( conn ) (IS_TLS13_HANDSHAKE(conn) ? tls13_state_machine : state_machine) -#define ACTIVE_HANDSHAKES( conn ) (IS_TLS13_HANDSHAKE(conn) ? tls13_handshakes : handshakes) +#define ACTIVE_STATE_MACHINE(conn) (IS_TLS13_HANDSHAKE(conn) ? tls13_state_machine : state_machine) +#define ACTIVE_HANDSHAKES(conn) (IS_TLS13_HANDSHAKE(conn) ? tls13_handshakes : handshakes) -#define ACTIVE_MESSAGE( conn ) ACTIVE_HANDSHAKES(conn)[ (conn)->handshake.handshake_type ][ (conn)->handshake.message_number ] +#define ACTIVE_MESSAGE(conn) ACTIVE_HANDSHAKES(conn)[(conn)->handshake.handshake_type][(conn)->handshake.message_number] -#define ACTIVE_STATE( conn ) ACTIVE_STATE_MACHINE(conn)[ ACTIVE_MESSAGE( (conn) ) ] -#define CCS_STATE( conn ) (((conn)->mode == S2N_CLIENT) ? ACTIVE_STATE_MACHINE(conn)[SERVER_CHANGE_CIPHER_SPEC] \ - : ACTIVE_STATE_MACHINE(conn)[CLIENT_CHANGE_CIPHER_SPEC] ) +#define ACTIVE_STATE(conn) ACTIVE_STATE_MACHINE(conn)[ACTIVE_MESSAGE((conn))] -#define EXPECTED_RECORD_TYPE( conn ) ACTIVE_STATE( conn ).record_type -#define EXPECTED_MESSAGE_TYPE( conn ) ACTIVE_STATE( conn ).message_type +#define CCS_STATE(conn) (((conn)->mode == S2N_CLIENT) ? \ + ACTIVE_STATE_MACHINE(conn)[SERVER_CHANGE_CIPHER_SPEC] : \ + ACTIVE_STATE_MACHINE(conn)[CLIENT_CHANGE_CIPHER_SPEC]) -#define CONNECTION_WRITER( conn ) (conn->mode == S2N_CLIENT ? 'C' : 'S') -#define CONNECTION_IS_WRITER( conn ) (ACTIVE_STATE(conn).writer == CONNECTION_WRITER(conn)) +#define EXPECTED_RECORD_TYPE(conn) ACTIVE_STATE(conn).record_type +#define EXPECTED_MESSAGE_TYPE(conn) ACTIVE_STATE(conn).message_type + +#define CONNECTION_WRITER(conn) (conn->mode == S2N_CLIENT ? 'C' : 'S') +#define CONNECTION_IS_WRITER(conn) (ACTIVE_STATE(conn).writer == CONNECTION_WRITER(conn)) /* Only used in our test cases. */ message_type_t s2n_conn_get_current_message_type(struct s2n_connection *conn) @@ -862,9 +859,7 @@ static int s2n_advance_message(struct s2n_connection *conn) conn->handshake.message_number++; /* When reading and using TLS1.3, skip optional change_cipher_spec states. */ - if (ACTIVE_STATE(conn).writer != this_mode && - EXPECTED_RECORD_TYPE(conn) == TLS_CHANGE_CIPHER_SPEC && - IS_TLS13_HANDSHAKE(conn)) { + if (ACTIVE_STATE(conn).writer != this_mode && EXPECTED_RECORD_TYPE(conn) == TLS_CHANGE_CIPHER_SPEC && IS_TLS13_HANDSHAKE(conn)) { conn->handshake.message_number++; } @@ -942,9 +937,7 @@ int s2n_set_hello_retry_required(struct s2n_connection *conn) bool s2n_is_hello_retry_message(struct s2n_connection *conn) { - return (conn != NULL && - s2n_result_is_ok(s2n_handshake_validate(&(conn->handshake))) && - ACTIVE_MESSAGE(conn) == HELLO_RETRY_MSG); + return (conn != NULL && s2n_result_is_ok(s2n_handshake_validate(&(conn->handshake))) && ACTIVE_MESSAGE(conn) == HELLO_RETRY_MSG); } bool s2n_is_hello_retry_handshake(struct s2n_connection *conn) @@ -952,7 +945,8 @@ bool s2n_is_hello_retry_handshake(struct s2n_connection *conn) return IS_HELLO_RETRY_HANDSHAKE(conn); } -static S2N_RESULT s2n_conn_set_tls13_handshake_type(struct s2n_connection *conn) { +static S2N_RESULT s2n_conn_set_tls13_handshake_type(struct s2n_connection *conn) +{ RESULT_ENSURE_REF(conn); /* Most handshake type flags should be reset before we calculate the handshake type, @@ -1132,7 +1126,7 @@ const char *s2n_connection_get_handshake_type_name(struct s2n_connection *conn) return "INITIAL"; } - const char** handshake_type_names = tls13_handshake_type_names; + const char **handshake_type_names = tls13_handshake_type_names; size_t handshake_type_names_len = s2n_array_len(tls13_handshake_type_names); if (s2n_connection_get_protocol_version(conn) < S2N_TLS13) { handshake_type_names = tls12_handshake_type_names; @@ -1190,14 +1184,14 @@ static int s2n_handshake_write_io(struct s2n_connection *conn) if (record_type == TLS_HANDSHAKE) { POSIX_GUARD(s2n_handshake_write_header(&conn->handshake.io, ACTIVE_STATE(conn).message_type)); } - POSIX_GUARD(ACTIVE_STATE(conn).handler[conn->mode] (conn)); + POSIX_GUARD(ACTIVE_STATE(conn).handler[conn->mode](conn)); if (record_type == TLS_HANDSHAKE) { POSIX_GUARD(s2n_handshake_finish_header(&conn->handshake.io)); } } /* Write the handshake data to records in fragment sized chunks */ - struct s2n_blob out = {0}; + struct s2n_blob out = { 0 }; while (s2n_stuffer_data_available(&conn->handshake.io) > 0) { uint16_t max_payload_size = 0; POSIX_GUARD_RESULT(s2n_record_max_write_payload_size(conn, &max_payload_size)); @@ -1287,7 +1281,7 @@ static int s2n_handshake_conn_update_hashes(struct s2n_connection *conn) POSIX_GUARD(s2n_stuffer_reread(&conn->handshake.io)); POSIX_GUARD_RESULT(s2n_handshake_parse_header(&conn->handshake.io, &message_type, &handshake_message_length)); - struct s2n_blob handshake_record = {0}; + struct s2n_blob handshake_record = { 0 }; handshake_record.data = conn->handshake.io.blob.data; handshake_record.size = TLS_HANDSHAKE_HEADER_LENGTH + handshake_message_length; POSIX_ENSURE_REF(handshake_record.data); @@ -1303,7 +1297,7 @@ static int s2n_handshake_handle_sslv2(struct s2n_connection *conn) S2N_ERROR_IF(ACTIVE_MESSAGE(conn) != CLIENT_HELLO, S2N_ERR_BAD_MESSAGE); /* Add the message to our handshake hashes */ - struct s2n_blob hashed = {.data = conn->header_in.blob.data + 2,.size = 3 }; + struct s2n_blob hashed = { .data = conn->header_in.blob.data + 2, .size = 3 }; POSIX_GUARD(s2n_conn_update_handshake_hashes(conn, &hashed)); hashed.data = conn->in.blob.data; @@ -1452,7 +1446,7 @@ static int s2n_handshake_read_io(struct s2n_connection *conn) S2N_ERROR_IF(s2n_stuffer_data_available(&conn->in) != 1, S2N_ERR_BAD_MESSAGE); POSIX_GUARD(s2n_stuffer_copy(&conn->in, &conn->handshake.io, s2n_stuffer_data_available(&conn->in))); - POSIX_GUARD(CCS_STATE(conn).handler[conn->mode] (conn)); + POSIX_GUARD(CCS_STATE(conn).handler[conn->mode](conn)); POSIX_GUARD(s2n_stuffer_wipe(&conn->handshake.io)); /* We're done with the record, wipe it */ @@ -1531,7 +1525,7 @@ static int s2n_handshake_read_io(struct s2n_connection *conn) POSIX_ENSURE(!CONNECTION_IS_WRITER(conn), S2N_ERR_BAD_MESSAGE); /* Call the relevant handler */ - WITH_ERROR_BLINDING(conn, POSIX_GUARD(ACTIVE_STATE(conn).handler[conn->mode] (conn))); + WITH_ERROR_BLINDING(conn, POSIX_GUARD(ACTIVE_STATE(conn).handler[conn->mode](conn))); /* Advance the state machine */ POSIX_GUARD_RESULT(s2n_finish_read(conn)); @@ -1549,7 +1543,7 @@ static int s2n_handle_retry_state(struct s2n_connection *conn) * handler right away. We aren't going to read more handshake data yet or proceed * to the next handler because the current message has not finished processing. */ s2n_errno = S2N_ERR_OK; - const int r = ACTIVE_STATE(conn).handler[conn->mode] (conn); + const int r = ACTIVE_STATE(conn).handler[conn->mode](conn); if (r < S2N_SUCCESS && S2N_ERROR_IS_BLOCKING(s2n_errno)) { /* If the handler is still waiting for data, return control to the caller. */ |