LCOV - code coverage report
Current view: top level - error - s2n_errno.h (source / functions) Hit Total Coverage
Test: unit_test_coverage.info Lines: 27 27 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 <stdbool.h>
      19                 :            : #include <stdio.h>
      20                 :            : #include <string.h>
      21                 :            : 
      22                 :            : #include "api/s2n.h"
      23                 :            : #include "utils/s2n_ensure.h"
      24                 :            : 
      25                 :            : /*
      26                 :            :  * To easily retrieve error types, we split error values into two parts.
      27                 :            :  * The upper 6 bits describe the error type and the lower bits describe the value within the category.
      28                 :            :  * [ Error Type Bits(31-26) ][ Value Bits(25-0) ]
      29                 :            :  */
      30                 :     635699 : #define S2N_ERR_NUM_VALUE_BITS 26
      31                 :            : 
      32                 :            : /* Start value for each error type. */
      33                 :            : #define S2N_ERR_T_OK_START       (S2N_ERR_T_OK << S2N_ERR_NUM_VALUE_BITS)
      34                 :            : #define S2N_ERR_T_IO_START       (S2N_ERR_T_IO << S2N_ERR_NUM_VALUE_BITS)
      35                 :            : #define S2N_ERR_T_CLOSED_START   (S2N_ERR_T_CLOSED << S2N_ERR_NUM_VALUE_BITS)
      36                 :            : #define S2N_ERR_T_BLOCKED_START  (S2N_ERR_T_BLOCKED << S2N_ERR_NUM_VALUE_BITS)
      37                 :            : #define S2N_ERR_T_ALERT_START    (S2N_ERR_T_ALERT << S2N_ERR_NUM_VALUE_BITS)
      38                 :            : #define S2N_ERR_T_PROTO_START    (S2N_ERR_T_PROTO << S2N_ERR_NUM_VALUE_BITS)
      39                 :            : #define S2N_ERR_T_INTERNAL_START (S2N_ERR_T_INTERNAL << S2N_ERR_NUM_VALUE_BITS)
      40                 :            : #define S2N_ERR_T_USAGE_START    (S2N_ERR_T_USAGE << S2N_ERR_NUM_VALUE_BITS)
      41                 :            : 
      42                 :            : /* Order of values in this enum is important. New error values should be placed at the end of their respective category.
      43                 :            :  * For example, a new TLS protocol related error belongs in the S2N_ERR_T_PROTO category. It should be placed
      44                 :            :  * immediately before S2N_ERR_T_INTERNAL_START(the first value of he next category).
      45                 :            :  */
      46                 :            : typedef enum {
      47                 :            :     /* S2N_ERR_T_OK */
      48                 :            :     S2N_ERR_OK = S2N_ERR_T_OK_START,
      49                 :            :     S2N_ERR_T_OK_END,
      50                 :            : 
      51                 :            :     /* S2N_ERR_T_IO */
      52                 :            :     S2N_ERR_IO = S2N_ERR_T_IO_START,
      53                 :            :     S2N_ERR_T_IO_END,
      54                 :            : 
      55                 :            :     /* S2N_ERR_T_CLOSED */
      56                 :            :     S2N_ERR_CLOSED = S2N_ERR_T_CLOSED_START,
      57                 :            :     S2N_ERR_T_CLOSED_END,
      58                 :            : 
      59                 :            :     /* S2N_ERR_T_BLOCKED */
      60                 :            :     S2N_ERR_IO_BLOCKED = S2N_ERR_T_BLOCKED_START,
      61                 :            :     S2N_ERR_ASYNC_BLOCKED,
      62                 :            :     S2N_ERR_EARLY_DATA_BLOCKED,
      63                 :            :     S2N_ERR_APP_DATA_BLOCKED,
      64                 :            :     S2N_ERR_T_BLOCKED_END,
      65                 :            : 
      66                 :            :     /* S2N_ERR_T_ALERT */
      67                 :            :     S2N_ERR_ALERT = S2N_ERR_T_ALERT_START,
      68                 :            :     S2N_ERR_T_ALERT_END,
      69                 :            : 
      70                 :            :     /* S2N_ERR_T_PROTO */
      71                 :            :     S2N_ERR_ENCRYPT = S2N_ERR_T_PROTO_START,
      72                 :            :     S2N_ERR_DECRYPT,
      73                 :            :     S2N_ERR_BAD_MESSAGE,
      74                 :            :     S2N_ERR_UNEXPECTED_CERT_REQUEST,
      75                 :            :     S2N_ERR_MISSING_CERT_REQUEST,
      76                 :            :     S2N_ERR_MISSING_CLIENT_CERT,
      77                 :            :     S2N_ERR_KEY_INIT,
      78                 :            :     S2N_ERR_KEY_DESTROY,
      79                 :            :     S2N_ERR_DH_SERIALIZING,
      80                 :            :     S2N_ERR_DH_SHARED_SECRET,
      81                 :            :     S2N_ERR_DH_WRITING_PUBLIC_KEY,
      82                 :            :     S2N_ERR_DH_FAILED_SIGNING,
      83                 :            :     S2N_ERR_DH_COPYING_PARAMETERS,
      84                 :            :     S2N_ERR_DH_GENERATING_PARAMETERS,
      85                 :            :     S2N_ERR_CIPHER_NOT_SUPPORTED,
      86                 :            :     S2N_ERR_NO_APPLICATION_PROTOCOL,
      87                 :            :     S2N_ERR_FALLBACK_DETECTED,
      88                 :            :     S2N_ERR_HASH_DIGEST_FAILED,
      89                 :            :     S2N_ERR_HASH_INIT_FAILED,
      90                 :            :     S2N_ERR_HASH_UPDATE_FAILED,
      91                 :            :     S2N_ERR_HASH_COPY_FAILED,
      92                 :            :     S2N_ERR_HASH_WIPE_FAILED,
      93                 :            :     S2N_ERR_HASH_NOT_READY,
      94                 :            :     S2N_ERR_ALLOW_MD5_FOR_FIPS_FAILED,
      95                 :            :     S2N_ERR_DECODE_CERTIFICATE,
      96                 :            :     S2N_ERR_DECODE_PRIVATE_KEY,
      97                 :            :     S2N_ERR_INVALID_HELLO_RETRY,
      98                 :            :     S2N_ERR_INVALID_SIGNATURE_ALGORITHM,
      99                 :            :     S2N_ERR_INVALID_SIGNATURE_SCHEME,
     100                 :            :     S2N_ERR_NO_VALID_SIGNATURE_SCHEME,
     101                 :            :     S2N_ERR_CBC_VERIFY,
     102                 :            :     S2N_ERR_DH_COPYING_PUBLIC_KEY,
     103                 :            :     S2N_ERR_SIGN,
     104                 :            :     S2N_ERR_VERIFY_SIGNATURE,
     105                 :            :     S2N_ERR_ECDHE_GEN_KEY,
     106                 :            :     S2N_ERR_ECDHE_SHARED_SECRET,
     107                 :            :     S2N_ERR_ECDHE_UNSUPPORTED_CURVE,
     108                 :            :     S2N_ERR_ECDHE_INVALID_PUBLIC_KEY,
     109                 :            :     S2N_ERR_ECDHE_INVALID_PUBLIC_KEY_FIPS,
     110                 :            :     S2N_ERR_ECDSA_UNSUPPORTED_CURVE,
     111                 :            :     S2N_ERR_ECDHE_SERIALIZING,
     112                 :            :     S2N_ERR_KEM_UNSUPPORTED_PARAMS,
     113                 :            :     S2N_ERR_SHUTDOWN_RECORD_TYPE,
     114                 :            :     S2N_ERR_SHUTDOWN_CLOSED,
     115                 :            :     S2N_ERR_NON_EMPTY_RENEGOTIATION_INFO,
     116                 :            :     S2N_ERR_RECORD_LIMIT,
     117                 :            :     S2N_ERR_CERT_UNTRUSTED,
     118                 :            :     S2N_ERR_CERT_REVOKED,
     119                 :            :     S2N_ERR_CERT_NOT_YET_VALID,
     120                 :            :     S2N_ERR_CERT_EXPIRED,
     121                 :            :     S2N_ERR_CERT_TYPE_UNSUPPORTED,
     122                 :            :     S2N_ERR_CERT_INVALID,
     123                 :            :     S2N_ERR_CERT_MAX_CHAIN_DEPTH_EXCEEDED,
     124                 :            :     S2N_ERR_CERT_REJECTED,
     125                 :            :     S2N_ERR_CERT_UNHANDLED_CRITICAL_EXTENSION,
     126                 :            :     S2N_ERR_CRL_LOOKUP_FAILED,
     127                 :            :     S2N_ERR_CRL_SIGNATURE,
     128                 :            :     S2N_ERR_CRL_ISSUER,
     129                 :            :     S2N_ERR_CRL_UNHANDLED_CRITICAL_EXTENSION,
     130                 :            :     S2N_ERR_CRL_INVALID_THIS_UPDATE,
     131                 :            :     S2N_ERR_CRL_INVALID_NEXT_UPDATE,
     132                 :            :     S2N_ERR_CRL_NOT_YET_VALID,
     133                 :            :     S2N_ERR_CRL_EXPIRED,
     134                 :            :     S2N_ERR_INVALID_MAX_FRAG_LEN,
     135                 :            :     S2N_ERR_MAX_FRAG_LEN_MISMATCH,
     136                 :            :     S2N_ERR_PROTOCOL_VERSION_UNSUPPORTED,
     137                 :            :     S2N_ERR_BAD_KEY_SHARE,
     138                 :            :     S2N_ERR_CANCELLED,
     139                 :            :     S2N_ERR_PROTOCOL_DOWNGRADE_DETECTED,
     140                 :            :     S2N_ERR_MAX_INNER_PLAINTEXT_SIZE,
     141                 :            :     S2N_ERR_RECORD_STUFFER_SIZE,
     142                 :            :     S2N_ERR_FRAGMENT_LENGTH_TOO_LARGE,
     143                 :            :     S2N_ERR_FRAGMENT_LENGTH_TOO_SMALL,
     144                 :            :     S2N_ERR_RECORD_STUFFER_NEEDS_DRAINING,
     145                 :            :     S2N_ERR_MISSING_EXTENSION,
     146                 :            :     S2N_ERR_UNSUPPORTED_EXTENSION,
     147                 :            :     S2N_ERR_DUPLICATE_EXTENSION,
     148                 :            :     S2N_ERR_MAX_EARLY_DATA_SIZE,
     149                 :            :     S2N_ERR_EARLY_DATA_TRIAL_DECRYPT,
     150                 :            :     S2N_ERR_NO_RENEGOTIATION,
     151                 :            :     S2N_ERR_KTLS_KEYUPDATE,
     152                 :            :     S2N_ERR_T_PROTO_END,
     153                 :            : 
     154                 :            :     /* S2N_ERR_T_INTERNAL */
     155                 :            :     S2N_ERR_MADVISE = S2N_ERR_T_INTERNAL_START,
     156                 :            :     S2N_ERR_ALLOC,
     157                 :            :     S2N_ERR_MLOCK,
     158                 :            :     S2N_ERR_MUNLOCK,
     159                 :            :     S2N_ERR_FSTAT,
     160                 :            :     S2N_ERR_OPEN,
     161                 :            :     S2N_ERR_MMAP,
     162                 :            :     S2N_ERR_ATEXIT,
     163                 :            :     S2N_ERR_NOMEM,
     164                 :            :     S2N_ERR_NULL,
     165                 :            :     S2N_ERR_SAFETY,
     166                 :            :     S2N_ERR_INITIALIZED,
     167                 :            :     S2N_ERR_NOT_INITIALIZED,
     168                 :            :     S2N_ERR_RANDOM_UNINITIALIZED,
     169                 :            :     S2N_ERR_OPEN_RANDOM,
     170                 :            :     S2N_ERR_RESIZE_STATIC_STUFFER,
     171                 :            :     S2N_ERR_RESIZE_TAINTED_STUFFER,
     172                 :            :     S2N_ERR_STUFFER_OUT_OF_DATA,
     173                 :            :     S2N_ERR_STUFFER_IS_FULL,
     174                 :            :     S2N_ERR_STUFFER_NOT_FOUND,
     175                 :            :     S2N_ERR_STUFFER_HAS_UNPROCESSED_DATA,
     176                 :            :     S2N_ERR_HASH_INVALID_ALGORITHM,
     177                 :            :     S2N_ERR_PRF_INVALID_ALGORITHM,
     178                 :            :     S2N_ERR_PRF_INVALID_SEED,
     179                 :            :     S2N_ERR_PRF_DERIVE,
     180                 :            :     S2N_ERR_P_HASH_INVALID_ALGORITHM,
     181                 :            :     S2N_ERR_P_HASH_INIT_FAILED,
     182                 :            :     S2N_ERR_P_HASH_UPDATE_FAILED,
     183                 :            :     S2N_ERR_P_HASH_FINAL_FAILED,
     184                 :            :     S2N_ERR_P_HASH_WIPE_FAILED,
     185                 :            :     S2N_ERR_HMAC_INVALID_ALGORITHM,
     186                 :            :     S2N_ERR_HKDF_OUTPUT_SIZE,
     187                 :            :     S2N_ERR_HKDF,
     188                 :            :     S2N_ERR_ALERT_PRESENT,
     189                 :            :     S2N_ERR_HANDSHAKE_STATE,
     190                 :            :     S2N_ERR_SHUTDOWN_PAUSED,
     191                 :            :     S2N_ERR_SIZE_MISMATCH,
     192                 :            :     S2N_ERR_DRBG,
     193                 :            :     S2N_ERR_DRBG_REQUEST_SIZE,
     194                 :            :     S2N_ERR_KEY_CHECK,
     195                 :            :     S2N_ERR_CIPHER_TYPE,
     196                 :            :     S2N_ERR_MAP_DUPLICATE,
     197                 :            :     S2N_ERR_MAP_IMMUTABLE,
     198                 :            :     S2N_ERR_MAP_MUTABLE,
     199                 :            :     S2N_ERR_MAP_INVALID_MAP_SIZE,
     200                 :            :     S2N_ERR_INITIAL_HMAC,
     201                 :            :     S2N_ERR_INVALID_NONCE_TYPE,
     202                 :            :     S2N_ERR_UNIMPLEMENTED,
     203                 :            :     S2N_ERR_HANDSHAKE_UNREACHABLE,
     204                 :            :     S2N_ERR_READ,
     205                 :            :     S2N_ERR_WRITE,
     206                 :            :     S2N_ERR_BAD_FD,
     207                 :            :     S2N_ERR_RDRAND_FAILED,
     208                 :            :     S2N_ERR_FAILED_CACHE_RETRIEVAL,
     209                 :            :     S2N_ERR_X509_TRUST_STORE,
     210                 :            :     S2N_ERR_UNKNOWN_PROTOCOL_VERSION,
     211                 :            :     S2N_ERR_NULL_CN_NAME,
     212                 :            :     S2N_ERR_NULL_SANS,
     213                 :            :     S2N_ERR_CLIENT_HELLO_VERSION,
     214                 :            :     S2N_ERR_CLIENT_PROTOCOL_VERSION,
     215                 :            :     S2N_ERR_SERVER_PROTOCOL_VERSION,
     216                 :            :     S2N_ERR_ACTUAL_PROTOCOL_VERSION,
     217                 :            :     S2N_ERR_POLLING_FROM_SOCKET,
     218                 :            :     S2N_ERR_RECV_STUFFER_FROM_CONN,
     219                 :            :     S2N_ERR_SEND_STUFFER_TO_CONN,
     220                 :            :     S2N_ERR_PRECONDITION_VIOLATION,
     221                 :            :     S2N_ERR_POSTCONDITION_VIOLATION,
     222                 :            :     S2N_ERR_INTEGER_OVERFLOW,
     223                 :            :     S2N_ERR_ARRAY_INDEX_OOB,
     224                 :            :     S2N_ERR_FREE_STATIC_BLOB,
     225                 :            :     S2N_ERR_RESIZE_STATIC_BLOB,
     226                 :            :     S2N_ERR_RECORD_LENGTH_TOO_LARGE,
     227                 :            :     S2N_ERR_SET_DUPLICATE_VALUE,
     228                 :            :     S2N_ERR_INVALID_PARSED_EXTENSIONS,
     229                 :            :     S2N_ERR_ASYNC_CALLBACK_FAILED,
     230                 :            :     S2N_ERR_ASYNC_MORE_THAN_ONE,
     231                 :            :     S2N_ERR_PQ_CRYPTO,
     232                 :            :     S2N_ERR_INVALID_CERT_STATE,
     233                 :            :     S2N_ERR_INVALID_EARLY_DATA_STATE,
     234                 :            :     S2N_ERR_PKEY_CTX_INIT,
     235                 :            :     S2N_ERR_FORK_DETECTION_INIT,
     236                 :            :     S2N_ERR_RETRIEVE_FORK_GENERATION_NUMBER,
     237                 :            :     S2N_ERR_LIBCRYPTO_VERSION_NUMBER_MISMATCH,
     238                 :            :     S2N_ERR_LIBCRYPTO_VERSION_NAME_MISMATCH,
     239                 :            :     S2N_ERR_INTERNAL_LIBCRYPTO_ERROR,
     240                 :            :     S2N_ERR_OSSL_PROVIDER,
     241                 :            :     S2N_ERR_BAD_HEX,
     242                 :            :     S2N_ERR_TEST_ASSERTION,
     243                 :            :     S2N_ERR_CONFIG_NULL_BEFORE_CH_CALLBACK,
     244                 :            :     S2N_ERR_ZERO_LIFETIME_TICKET,
     245                 :            :     S2N_ERR_T_INTERNAL_END,
     246                 :            : 
     247                 :            :     /* S2N_ERR_T_USAGE */
     248                 :            :     S2N_ERR_NO_ALERT = S2N_ERR_T_USAGE_START,
     249                 :            :     S2N_ERR_SERVER_MODE,
     250                 :            :     S2N_ERR_CLIENT_MODE,
     251                 :            :     S2N_ERR_CLIENT_MODE_DISABLED,
     252                 :            :     S2N_ERR_TOO_MANY_CERTIFICATES,
     253                 :            :     S2N_ERR_TOO_MANY_SIGNATURE_SCHEMES,
     254                 :            :     S2N_ERR_CLIENT_AUTH_NOT_SUPPORTED_IN_FIPS_MODE,
     255                 :            :     S2N_ERR_INVALID_BASE64,
     256                 :            :     S2N_ERR_INVALID_HEX,
     257                 :            :     S2N_ERR_INVALID_PEM,
     258                 :            :     S2N_ERR_DH_PARAMS_CREATE,
     259                 :            :     S2N_ERR_DH_TOO_SMALL,
     260                 :            :     S2N_ERR_DH_PARAMETER_CHECK,
     261                 :            :     S2N_ERR_INVALID_PKCS3,
     262                 :            :     S2N_ERR_NO_CERTIFICATE_IN_PEM,
     263                 :            :     S2N_ERR_SERVER_NAME_TOO_LONG,
     264                 :            :     S2N_ERR_NUM_DEFAULT_CERTIFICATES,
     265                 :            :     S2N_ERR_MULTIPLE_DEFAULT_CERTIFICATES_PER_AUTH_TYPE,
     266                 :            :     S2N_ERR_INVALID_CIPHER_PREFERENCES,
     267                 :            :     S2N_ERR_INVALID_APPLICATION_PROTOCOL,
     268                 :            :     S2N_ERR_KEY_MISMATCH,
     269                 :            :     S2N_ERR_SEND_SIZE,
     270                 :            :     S2N_ERR_CORK_SET_ON_UNMANAGED,
     271                 :            :     S2N_ERR_UNRECOGNIZED_EXTENSION,
     272                 :            :     S2N_ERR_EXTENSION_NOT_RECEIVED,
     273                 :            :     S2N_ERR_INVALID_SCT_LIST,
     274                 :            :     S2N_ERR_INVALID_OCSP_RESPONSE,
     275                 :            :     S2N_ERR_UPDATING_EXTENSION,
     276                 :            :     S2N_ERR_INVALID_SERIALIZED_SESSION_STATE,
     277                 :            :     S2N_ERR_SERIALIZED_SESSION_STATE_TOO_LONG,
     278                 :            :     S2N_ERR_SESSION_ID_TOO_LONG,
     279                 :            :     S2N_ERR_CLIENT_AUTH_NOT_SUPPORTED_IN_SESSION_RESUMPTION_MODE,
     280                 :            :     S2N_ERR_INVALID_TICKET_KEY_LENGTH,
     281                 :            :     S2N_ERR_INVALID_TICKET_KEY_NAME_OR_NAME_LENGTH,
     282                 :            :     S2N_ERR_TICKET_KEY_NOT_UNIQUE,
     283                 :            :     S2N_ERR_TICKET_KEY_LIMIT,
     284                 :            :     S2N_ERR_NO_TICKET_ENCRYPT_DECRYPT_KEY,
     285                 :            :     S2N_ERR_ENCRYPT_DECRYPT_KEY_SELECTION_FAILED,
     286                 :            :     S2N_ERR_KEY_USED_IN_SESSION_TICKET_NOT_FOUND,
     287                 :            :     S2N_ERR_SENDING_NST,
     288                 :            :     S2N_ERR_INVALID_DYNAMIC_THRESHOLD,
     289                 :            :     S2N_ERR_INVALID_ARGUMENT,
     290                 :            :     S2N_ERR_NOT_IN_UNIT_TEST,
     291                 :            :     S2N_ERR_NOT_IN_TEST,
     292                 :            :     S2N_ERR_UNSUPPORTED_CPU,
     293                 :            :     S2N_ERR_SESSION_ID_TOO_SHORT,
     294                 :            :     S2N_ERR_CONNECTION_CACHING_DISALLOWED,
     295                 :            :     S2N_ERR_SESSION_TICKET_NOT_SUPPORTED,
     296                 :            :     S2N_ERR_OCSP_NOT_SUPPORTED,
     297                 :            :     S2N_ERR_INVALID_SIGNATURE_ALGORITHMS_PREFERENCES,
     298                 :            :     S2N_ERR_RSA_PSS_NOT_SUPPORTED,
     299                 :            :     S2N_ERR_INVALID_ECC_PREFERENCES,
     300                 :            :     S2N_ERR_DEPRECATED_SECURITY_POLICY,
     301                 :            :     S2N_ERR_INVALID_SECURITY_POLICY,
     302                 :            :     S2N_ERR_INVALID_KEM_PREFERENCES,
     303                 :            :     S2N_ERR_ASYNC_ALREADY_PERFORMED,
     304                 :            :     S2N_ERR_ASYNC_NOT_PERFORMED,
     305                 :            :     S2N_ERR_ASYNC_WRONG_CONNECTION,
     306                 :            :     S2N_ERR_ASYNC_ALREADY_APPLIED,
     307                 :            :     S2N_ERR_UNSUPPORTED_WITH_QUIC,
     308                 :            :     S2N_ERR_DUPLICATE_PSK_IDENTITIES,
     309                 :            :     S2N_ERR_OFFERED_PSKS_TOO_LONG,
     310                 :            :     S2N_ERR_INVALID_SESSION_TICKET,
     311                 :            :     S2N_ERR_REENTRANCY,
     312                 :            :     S2N_ERR_INVALID_STATE,
     313                 :            :     S2N_ERR_EARLY_DATA_NOT_ALLOWED,
     314                 :            :     S2N_ERR_NO_CERT_FOUND,
     315                 :            :     S2N_ERR_CERT_NOT_VALIDATED,
     316                 :            :     S2N_ERR_NO_PRIVATE_KEY,
     317                 :            :     S2N_ERR_PSK_MODE,
     318                 :            :     S2N_ERR_X509_EXTENSION_VALUE_NOT_FOUND,
     319                 :            :     S2N_ERR_INVALID_X509_EXTENSION_TYPE,
     320                 :            :     S2N_ERR_INSUFFICIENT_MEM_SIZE,
     321                 :            :     S2N_ERR_KEYING_MATERIAL_EXPIRED,
     322                 :            :     S2N_ERR_SECRET_SCHEDULE_STATE,
     323                 :            :     S2N_ERR_CERT_OWNERSHIP,
     324                 :            :     S2N_ERR_HANDSHAKE_NOT_COMPLETE,
     325                 :            :     S2N_ERR_KTLS_MANAGED_IO,
     326                 :            :     S2N_ERR_KTLS_UNSUPPORTED_PLATFORM,
     327                 :            :     S2N_ERR_KTLS_UNSUPPORTED_CONN,
     328                 :            :     S2N_ERR_KTLS_ENABLE,
     329                 :            :     S2N_ERR_KTLS_BAD_CMSG,
     330                 :            :     S2N_ERR_KTLS_RENEG,
     331                 :            :     S2N_ERR_ATOMIC,
     332                 :            :     S2N_ERR_KTLS_KEY_LIMIT,
     333                 :            :     S2N_ERR_SECURITY_POLICY_INCOMPATIBLE_CERT,
     334                 :            :     S2N_ERR_INVALID_SERIALIZED_CONNECTION,
     335                 :            :     S2N_ERR_TOO_MANY_CAS,
     336                 :            :     S2N_ERR_API_UNSUPPORTED_BY_LIBCRYPTO,
     337                 :            :     S2N_ERR_FIPS_MODE_UNSUPPORTED,
     338                 :            :     S2N_ERR_T_USAGE_END,
     339                 :            : } s2n_error;
     340                 :            : 
     341                 :            : #define S2N_DEBUG_STR_LEN 128
     342                 :            : 
     343                 :            : struct s2n_debug_info {
     344                 :            :     const char *debug_str;
     345                 :            :     const char *source;
     346                 :            : };
     347                 :            : 
     348                 :            : extern __thread struct s2n_debug_info _s2n_debug_info;
     349                 :            : 
     350                 :    3858206 : #define TO_STRING(s)   #s
     351                 :    3858206 : #define STRING_(s)     TO_STRING(s)
     352                 :    3858206 : #define STRING__LINE__ STRING_(__LINE__)
     353                 :            : 
     354                 :            : /* gets the basename of a file path */
     355                 :            : /* _S2N_EXTRACT_BASENAME("Error encountered in /path/to/my/file.c") -> "file.c" */
     356                 :            : #if !(defined(CBMC) || defined(__TIMING_CONTRACTS__))
     357                 :>1844*10^16 :     #define _S2N_RSPLIT(subject, c)     (strrchr((subject), c) ? strrchr((subject), c) + 1 : (subject))
     358                 :    3858206 :     #define _S2N_EXTRACT_BASENAME(path) _S2N_RSPLIT((path) + strlen(_S2N_DEBUG_LINE_PREFIX), '/')
     359                 :            : #else
     360                 :            :     #define _S2N_EXTRACT_BASENAME(path) path
     361                 :            : #endif
     362                 :            : 
     363                 :    3858206 : #define _S2N_DEBUG_LINE_PREFIX "Error encountered in "
     364                 :    3858206 : #define _S2N_DEBUG_LINE        _S2N_DEBUG_LINE_PREFIX __FILE__ ":" STRING__LINE__
     365                 :            : 
     366                 :            : #define _S2N_ERROR(x)                                                              \
     367                 :    3858206 :     do {                                                                           \
     368                 :    3858206 :         _s2n_debug_info.debug_str = _S2N_DEBUG_LINE;                               \
     369                 :    3858206 :         _s2n_debug_info.source = _S2N_EXTRACT_BASENAME(_s2n_debug_info.debug_str); \
     370                 :    3858206 :         s2n_errno = (x);                                                           \
     371                 :    3858206 :         s2n_calculate_stacktrace();                                                \
     372                 :    3858206 :     } while (0)
     373                 :            : #define S2N_ERROR_PRESERVE_ERRNO() \
     374                 :     350773 :     do {                           \
     375                 :     350773 :         return -1;                 \
     376                 :     350773 :     } while (0)
     377                 :     310713 : #define S2N_ERROR_IS_BLOCKING(x) (s2n_error_get_type(x) == S2N_ERR_T_BLOCKED)
     378                 :            : 
     379                 :            : /* DEPRECATED: use POSIX_BAIL instead */
     380                 :            : #define S2N_ERROR(x)     \
     381                 :    3193310 :     do {                 \
     382                 :    3193310 :         _S2N_ERROR((x)); \
     383                 :    3193310 :         return -1;       \
     384                 :    3193310 :     } while (0)
     385                 :            : 
     386                 :            : /* DEPRECATED: use PTR_BAIL instead */
     387                 :            : #define S2N_ERROR_PTR(x) \
     388                 :            :     do {                 \
     389                 :            :         _S2N_ERROR((x)); \
     390                 :            :         return NULL;     \
     391                 :            :     } while (0)
     392                 :            : 
     393                 :            : /* DEPRECATED: use POSIX_ENSURE instead */
     394                 :            : #define S2N_ERROR_IF(cond, x) \
     395                 :   35579482 :     do {                      \
     396                 :   63569276 :         if (cond) {           \
     397                 :    3193310 :             S2N_ERROR(x);     \
     398                 :    3193310 :         }                     \
     399                 :   35579482 :     } while (0)
     400                 :            : 
     401                 :            : /** Calculate and print stacktraces */
     402                 :            : struct s2n_stacktrace {
     403                 :            :     char **trace;
     404                 :            :     int trace_size;
     405                 :            : };
     406                 :            : 
     407                 :            : bool s2n_stack_traces_enabled();
     408                 :            : int s2n_stack_traces_enabled_set(bool newval);
     409                 :            : 
     410                 :            : int s2n_calculate_stacktrace(void);
     411                 :            : int s2n_print_stacktrace(FILE *fptr);
     412                 :            : int s2n_free_stacktrace(void);
     413                 :            : int s2n_get_stacktrace(struct s2n_stacktrace *trace);
     414                 :            : void s2n_debug_info_reset(void);

Generated by: LCOV version 1.14