LCOV - code coverage report
Current view: top level - tls - s2n_record.h (source / functions) Hit Total Coverage
Test: unit_test_coverage.info Lines: 14 14 100.0 %
Date: 2025-08-15 07:28:39 Functions: 0 0 -
Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : /*
       2                 :            :  * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
       3                 :            :  *
       4                 :            :  * Licensed under the Apache License, Version 2.0 (the "License").
       5                 :            :  * You may not use this file except in compliance with the License.
       6                 :            :  * A copy of the License is located at
       7                 :            :  *
       8                 :            :  *  http://aws.amazon.com/apache2.0
       9                 :            :  *
      10                 :            :  * or in the "license" file accompanying this file. This file is distributed
      11                 :            :  * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
      12                 :            :  * express or implied. See the License for the specific language governing
      13                 :            :  * permissions and limitations under the License.
      14                 :            :  */
      15                 :            : 
      16                 :            : #pragma once
      17                 :            : 
      18                 :            : #include <stdint.h>
      19                 :            : 
      20                 :            : #include "crypto/s2n_hmac.h"
      21                 :            : #include "stuffer/s2n_stuffer.h"
      22                 :            : 
      23                 :   11966478 : #define S2N_TLS_CONTENT_TYPE_LENGTH 1
      24                 :            : 
      25                 :     370462 : #define S2N_TLS_SSLV2_HEADER_FLAG        (0x80)
      26                 :        193 : #define S2N_TLS_SSLV2_HEADER_FLAG_UINT16 (S2N_TLS_SSLV2_HEADER_FLAG << 8)
      27                 :            : 
      28                 :            : /* All versions of TLS define the record header the same:
      29                 :            :  * ContentType + ProtocolVersion + length
      30                 :            :  */
      31                 :   11637342 : #define S2N_TLS_RECORD_HEADER_LENGTH (S2N_TLS_CONTENT_TYPE_LENGTH + S2N_TLS_PROTOCOL_VERSION_LEN + 2)
      32                 :            : 
      33                 :            : /*
      34                 :            :  * All versions of TLS limit the data fragment to 2^14 bytes.
      35                 :            :  *
      36                 :            :  *= https://www.rfc-editor.org/rfc/rfc5246#section-6.2.1
      37                 :            :  *# The record layer fragments information blocks into TLSPlaintext
      38                 :            :  *# records carrying data in chunks of 2^14 bytes or less.
      39                 :            :  *
      40                 :            :  *= https://www.rfc-editor.org/rfc/rfc8446#section-5.1
      41                 :            :  *# The record layer fragments information blocks into TLSPlaintext
      42                 :            :  *# records carrying data in chunks of 2^14 bytes or less.
      43                 :            :  */
      44                 :        543 : #define S2N_TLS_MAXIMUM_FRAGMENT_LENGTH (1 << 14)
      45                 :            : 
      46                 :            : /* The TLS1.2 record length allows for 1024 bytes of compression expansion and
      47                 :            :  * 1024 bytes of encryption expansion and padding.
      48                 :            :  * Since S2N does not support compression, we can ignore the compression overhead.
      49                 :            :  */
      50                 :    6797321 : #define S2N_TLS12_ENCRYPTION_OVERHEAD_SIZE 1024
      51                 :            : #define S2N_TLS12_MAX_RECORD_LEN_FOR(frag) \
      52                 :   10400352 :     ((frag) + S2N_TLS12_ENCRYPTION_OVERHEAD_SIZE + S2N_TLS_RECORD_HEADER_LENGTH)
      53                 :            : #define S2N_TLS12_MAXIMUM_RECORD_LENGTH S2N_TLS12_MAX_RECORD_LEN_FOR(S2N_TLS_MAXIMUM_FRAGMENT_LENGTH)
      54                 :            : 
      55                 :            : /*
      56                 :            :  *= https://www.rfc-editor.org/rfc/rfc8446#section-5.2
      57                 :            :  *# An AEAD algorithm used in TLS 1.3 MUST NOT produce an expansion
      58                 :            :  *# greater than 255 octets.
      59                 :            :  */
      60                 :     112526 : #define S2N_TLS13_ENCRYPTION_OVERHEAD_SIZE 255
      61                 :     112526 : #define S2N_TLS13_MAX_RECORD_LEN_FOR(frag) ((frag) + S2N_TLS_CONTENT_TYPE_LENGTH \
      62                 :     112526 :         + S2N_TLS13_ENCRYPTION_OVERHEAD_SIZE                                     \
      63                 :     112526 :         + S2N_TLS_RECORD_HEADER_LENGTH)
      64                 :     108271 : #define S2N_TLS13_MAXIMUM_RECORD_LENGTH S2N_TLS13_MAX_RECORD_LEN_FOR(S2N_TLS_MAXIMUM_FRAGMENT_LENGTH)
      65                 :            : 
      66                 :            : /* Currently, TLS1.2 records may be larger than TLS1.3 records.
      67                 :            :  * If the protocol is unknown, assume TLS1.2.
      68                 :            :  */
      69                 :    6794968 : #define S2N_TLS_MAX_RECORD_LEN_FOR(frag) S2N_TLS12_MAX_RECORD_LEN_FOR(frag)
      70                 :    3603031 : #define S2N_TLS_MAXIMUM_RECORD_LENGTH    S2N_TLS_MAX_RECORD_LEN_FOR(S2N_TLS_MAXIMUM_FRAGMENT_LENGTH)
      71                 :            : 
      72                 :            : S2N_RESULT s2n_record_max_write_size(struct s2n_connection *conn, uint16_t max_fragment_size, uint16_t *max_record_size);
      73                 :            : S2N_RESULT s2n_record_max_write_payload_size(struct s2n_connection *conn, uint16_t *max_fragment_size);
      74                 :            : S2N_RESULT s2n_record_min_write_payload_size(struct s2n_connection *conn, uint16_t *payload_size);
      75                 :            : S2N_RESULT s2n_record_write(struct s2n_connection *conn, uint8_t content_type, struct s2n_blob *in);
      76                 :            : int s2n_record_writev(struct s2n_connection *conn, uint8_t content_type, const struct iovec *in, int in_count, size_t offs, size_t to_write);
      77                 :            : int s2n_record_parse(struct s2n_connection *conn);
      78                 :            : int s2n_record_header_parse(struct s2n_connection *conn, uint8_t *content_type, uint16_t *fragment_length);
      79                 :            : int s2n_tls13_parse_record_type(struct s2n_stuffer *stuffer, uint8_t *record_type);
      80                 :            : int s2n_sslv2_record_header_parse(struct s2n_connection *conn, uint8_t *record_type, uint8_t *client_protocol_version, uint16_t *fragment_length);
      81                 :            : int s2n_verify_cbc(struct s2n_connection *conn, struct s2n_hmac_state *hmac, struct s2n_blob *decrypted);
      82                 :            : S2N_RESULT s2n_aead_aad_init(const struct s2n_connection *conn, uint8_t *sequence_number, uint8_t content_type, uint16_t record_length, struct s2n_blob *ad);
      83                 :            : S2N_RESULT s2n_tls13_aead_aad_init(uint16_t record_length, uint8_t tag_length, struct s2n_blob *ad);
      84                 :            : S2N_RESULT s2n_record_wipe(struct s2n_connection *conn);

Generated by: LCOV version 1.14