• 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 
16 /**
17  * @defgroup hitls_errno
18  * @ingroup hitls
19  * @brief error module
20  */
21 
22 #ifndef HITLS_ERROR_H
23 #define HITLS_ERROR_H
24 
25 #include <stdint.h>
26 #include "hitls_type.h"
27 
28 #ifdef __cplusplus
29 extern "C" {
30 #endif
31 
32 
33 #define HITLS_SUCCESS 0
34 #define HITLS_X509_V_OK 0
35 
36 /**
37  * @ingroup hitls_errno
38  * @brief   Indicates that the connection is blocked. You can call HITLS_Connect to continue the connection.
39  * This problem is usually caused by read and write operations.
40  */
41 #define HITLS_WANT_CONNECT 1
42 
43 /**
44  * @ingroup hitls_errno
45  * @brief   Indicates that the connection is blocked and the HITLS_Accept can be called to continue the connection.
46  * This problem is usually caused by read and write operations.
47  */
48 #define HITLS_WANT_ACCEPT 2
49 
50 /**
51  * @ingroup hitls_errno
52  * @brief   indicates that the receiving buffer is empty and the interface can be
53  * called to continue receiving data.
54  */
55 #define HITLS_WANT_READ 3
56 
57 /**
58  * @ingroup hitls_errno
59  * @brief   The sending buffer is full and the interface can be called to continue sending data.
60  */
61 #define HITLS_WANT_WRITE 4
62 
63 /**
64  * @ingroup hitls_errno
65  * @brief   An unrecoverable fatal error occurs in the TLS protocol, usually a protocol error.
66  */
67 #define HITLS_ERR_TLS 5
68 
69 /**
70  * @ingroup hitls_errno
71  * @brief   An unrecoverable I/O error occurs,
72  * which is usually a low level receiving and receiving exception or an unknown error occurs.
73  */
74 #define HITLS_ERR_SYSCALL  6
75 
76 /**
77  * @ingroup hitls_errno
78  *
79  * Error code returned by the TLS module
80  */
81 typedef enum {
82     HITLS_NULL_INPUT = 0x02010001,                 /**< Incorrect null pointer input. */
83     HITLS_INVALID_INPUT,                           /**< Invalid input, the parameter value is out of the valid range.*/
84     HITLS_INTERNAL_EXCEPTION,                      /**< Unexpected internal error, which is unlikely. */
85     HITLS_MEMALLOC_FAIL,                           /**< Failed to apply for memory. */
86     HITLS_MEMCPY_FAIL,                             /**< Memory Copy Failure. */
87     HITLS_UNREGISTERED_CALLBACK,                   /**< Use unregistered callback. */
88 
89     HITLS_CONFIG_FAIL_START = 0x02020001,          /**< config module error code start bit. */
90     HITLS_CONFIG_NO_SUITABLE_CIPHER_SUITE,         /**< No suitable cipher suite is found. */
91     HITLS_CONFIG_UNSUPPORT_CIPHER_SUITE,           /**< Unsupported cipher suites. */
92     HITLS_CONFIG_INVALID_SET,                      /**< Invalid setting. */
93     HITLS_CONFIG_NO_SUITABLE_SIGNATURE_ALGORITHM,  /**< The signature algorithm and the cipher suite are nonmatching. */
94     HITLS_CONFIG_NO_GROUPS,                        /**< The group is not set. */
95     HITLS_CONFIG_UNSUPPORT_SIGNATURE_ALGORITHM,    /**< Unsupported signature algorithm. */
96     HITLS_CONFIG_UNSUPPORT_POINT_FORMATS,          /**< Unsupported the dot format. */
97     HITLS_CONFIG_INVALID_VERSION,                  /**< Unsupported the protocol version. */
98     HITLS_CONFIG_INVALID_LENGTH,                   /**< Invalid length. */
99     HITLS_CONFIG_NO_CERT,                          /**< Unset the certificate. */
100     HITLS_CONFIG_NO_PRIVATE_KEY,                   /**< Unset the certificate private key. */
101     HITLS_CONFIG_DUP_DH_KEY_FAIL,                  /**< Duplicate DH key failure. */
102     HITLS_CFG_ERR_LOAD_CERT_FILE,                  /**< Failed to load the certificate file. */
103     HITLS_CFG_ERR_LOAD_CERT_BUFFER,                /**< Failed to load the certificate buffer. */
104     HITLS_CFG_ERR_LOAD_KEY_FILE,                   /**< Failed to load the key file. */
105     HITLS_CFG_ERR_LOAD_KEY_BUFFER,                 /**< Failed to load the key buffer. */
106     HITLS_CONFIG_ERR_LOAD_GROUP_INFO,              /**< Failed to load the group info. */
107     HITLS_CONFIG_ERR_LOAD_SIGN_SCHEME_INFO,        /**< Failed to load the signature scheme info. */
108     HITLS_CONFIG_DUP_CUSTOM_EXT,                   /**< Duplicate custom extension type detected. */
109 
110     HITLS_CM_FAIL_START = 0x02030001,              /**< Error start bit of the conn module. */
111     HITLS_CM_LINK_FATAL_ALERTED,                   /**< link sent fatal alert. */
112     HITLS_CM_LINK_CLOSED,                          /**< Link has been closed. */
113     HITLS_CM_LINK_UNESTABLISHED,                   /**< The current link is not established.
114                                                         Do not perform other operations, such as read and write. */
115     HITLS_CM_LINK_UNSUPPORT_SECURE_RENEGOTIATION,  /**< The current link Unsupported security renegotiation. */
116 
117     HITLS_MSG_HANDLE_FAIL_START = 0x02040001,      /**< Start bit of the error code processed by the state machine. */
118     HITLS_MSG_HANDLE_UNEXPECTED_MESSAGE,           /**< receives unexpected handshake messages. */
119     HITLS_MSG_HANDLE_RANDOM_SIZE_ERR,              /**< Incorrect random number length. */
120     HITLS_MSG_HANDLE_UNSUPPORT_POINT_FORMAT,       /**< Unsupported the point format. */
121     HITLS_MSG_HANDLE_CIPHER_SUITE_ERR,             /**< cannot find the supported cipher suite. */
122     HITLS_MSG_HANDLE_UNSUPPORT_VERSION,            /**< Unsupported version. */
123     HITLS_MSG_HANDLE_STATE_ILLEGAL,                /**< Handshake status error. */
124     HITLS_MSG_HANDLE_UNSUPPORT_KX_ALG,             /**< Unsupported key exchange algorithm. */
125     HITLS_MSG_HANDLE_UNSUPPORT_CERT,               /**< Unsupported certificate. */
126     HITLS_MSG_HANDLE_UNKNOWN_CURVE_TYPE,           /**< Unsupported elliptic curve type. */
127     HITLS_MSG_HANDLE_VERIFY_FINISHED_FAIL,         /**< Failed to verify the finished message. */
128     HITLS_MSG_HANDLE_VERIFY_SIGN_FAIL,             /**< Failed to verify the finished message. */
129     HITLS_MSG_HANDLE_INCORRECT_DIGEST_LEN,         /**< Incorrect length of the digest. */
130     HITLS_MSG_HANDLE_UNSUPPORT_NAMED_CURVE,        /**< Unsupported ECDH elliptic curves. */
131     HITLS_MSG_HANDLE_UNSUPPORT_EXTENSION_TYPE,     /**< Unsupported the extended type. */
132     HITLS_MSG_HANDLE_UNSUPPORT_CIPHER_SUITE,       /**< Unsupported cipher suites. */
133     HITLS_MSG_HANDLE_COOKIE_ERR,                   /**< Incorrect cookie. */
134     HITLS_MSG_VERIFY_COOKIE_ERR,                   /**< Failed to verify the cookie. */
135     HITLS_MSG_HANDLE_ERR_ENCODE_ECDH_KEY,          /**< Failed to obtain the ECDH public key. */
136     HITLS_MSG_HANDLE_ERR_ENCODE_DH_KEY,            /**< Failed to obtain the DH public key. */
137     HITLS_MSG_HANDLE_ERR_GET_DH_PARAMETERS,        /**< Failed to obtain the DH parameter. */
138     HITLS_MSG_HANDLE_ERR_GET_DH_KEY,               /**< Failed to generate the DH key. */
139     HITLS_MSG_HANDLE_NO_PEER_CERTIFIACATE,         /**< Not receive the peer certificate. */
140     HITLS_MSG_HANDLE_ERR_NO_SERVER_CERTIFICATE,    /**< Server has no certificate to send. */
141     HITLS_MSG_HANDLE_UNMATCHED_SEQUENCE,           /**< Handshake sequence number nonmatch */
142     HITLS_MSG_HANDLE_ILLEGAL_VERSION,              /**< Incorrect version. */
143     HITLS_MSG_HANDLE_ILLEGAL_CIPHER_SUITE,         /**< Incorrect cipher suite. */
144     HITLS_MSG_HANDLE_ILLEGAL_SELECTED_GROUP,       /**< Incorrect selectedGroup. */
145     HITLS_MSG_HANDLE_ILLEGAL_EXTRENED_MASTER_SECRET, /**< Incorrect extended master key. */
146     HITLS_MSG_HANDLE_MISSING_EXTENSION,             /**< Message missing the extended field that must be sent */
147     HITLS_MSG_HANDLE_DUPLICATE_HELLO_RETYR_REQUEST, /**< Duplicate Hello Retry Request messages */
148     HITLS_MSG_HANDLE_ALPN_PROTOCOL_NO_MATCH,        /**< No matching alpn */
149     HITLS_MSG_HANDLE_ILLEGAL_PSK_LEN,               /**< Invalid PSK length */
150     HITLS_MSG_HANDLE_ILLEGAL_IDENTITY_LEN,          /**< Invalid identity length */
151     HITLS_MSG_HANDLE_GET_UNSIGN_DATA_FAIL,          /**< Failed to obtain the unsigned data
152                                                          during signature calculation */
153     HITLS_MSG_HANDLE_ILLEGAL_SESSION_ID,            /**< Receives an incorrect session ID */
154     HITLS_MSG_HANDLE_SNI_UNRECOGNIZED_NAME,         /**< Not accept the extended value of server_name */
155     HITLS_MSG_HANDLE_ALPN_UNRECOGNIZED,             /**< Not accept the extended ALPN value */
156     HITLS_MSG_HANDLE_ILLEGAL_KEY_UPDATE_TYPE,       /**< Receives an incorrect key update type */
157     HITLS_MSG_HANDLE_SYS_TIME_FAIL,                 /**< System time function returns a failure */
158     HITLS_MSG_HANDLE_DTLS_CONNECT_TIMEOUT,           /**< DTLS connection timeout */
159     HITLS_MSG_HANDLE_UNSECURE_VERSION,              /**< Insecure version. */
160     HITLS_MSG_HANDLE_UNSECURE_CIPHER_SUITE,         /**< Insecure cipher suites. */
161     HITLS_MSG_HANDLE_RENEGOTIATION_FAIL,            /**< Renegotiation failure */
162     HITLS_MSG_HANDLE_SESSION_ID_CTX_ILLEGAL,        /**< Session ID ctx mismatch */
163     HITLS_MSG_HANDLE_ENCRYPT_THEN_MAC_ERR,          /**< Failed to change the EncryptThenMac status */
164     HITLS_MSG_HANDLE_ILLEGAL_PSK_IDENTITY,          /**< psk identity error */
165     HITLS_MSG_HANDLE_PSK_USE_SESSION_FAIL,          /**< The TLS1.3 client fails to process the PSK callback. */
166     HITLS_MSG_HANDLE_PSK_FIND_SESSION_FAIL,         /**< The TLS1.3 server fails to process the PSK callback. */
167     HITLS_MSG_HANDLE_PSK_SESSION_INVALID_CIPHER_SUITE, /**< TLS1.3 psk session algorithm suite is incorrect. */
168     HITLS_MSG_HANDLE_PSK_INVALID,                   /**< TLS1.3 psk check failed. */
169     HITLS_MSG_HANDLE_INVALID_CERT_REQ_CTX,          /**< TLS1.3 invalid certificateReqCtx. */
170     HITLS_MSG_HANDLE_HANDSHAKE_FAILURE,             /**< TLS1.3 handshake parameters cannot be negotiated. */
171     HITLS_MSG_HANDLE_INVALID_COMPRESSION_METHOD,    /**< Receives an incorrect compression algorithm. */
172     HITLS_MSG_HANDLE_INVALID_EXTENDED_MASTER_SECRET, /**< The peer Unsupported the extended master key. */
173     HITLS_MSG_HANDLE_ERR_CLIENT_HELLO_FRAGMENT,
174     HITLS_MSG_HANDLE_ERR_INAPPROPRIATE_FALLBACK,    /**< The downgrade negotiation failed, and the client supports
175                                                         a higher version. */
176 
177     HITLS_PACK_FAIL_START = 0x02050001,             /**< Start bit of the pack error code. */
178     HITLS_PACK_UNSUPPORT_VERSION,                   /**< Unsupported version. */
179     HITLS_PACK_UNSECURE_VERSION,                    /**< Insecure version. */
180     HITLS_PACK_UNSUPPORT_HANDSHAKE_MSG,             /**< Unsupported handshake messages. */
181     HITLS_PACK_NOT_ENOUGH_BUF_LENGTH,               /**< Insufficient buffer length. */
182     HITLS_PACK_SESSIONID_ERR,                       /**< Failed to assemble the sessionId. */
183     HITLS_PACK_COOKIE_ERR,                          /**< Failed to assemble the cookie. */
184     HITLS_PACK_CLIENT_CIPHER_SUITE_ERR,             /**< Failed to assemble client_cipher_suite. */
185     HITLS_PACK_UNSUPPORT_KX_ALG,                    /**< Unsupported the key negotiation algorithm. */
186     HITLS_PACK_UNSUPPORT_KX_CURVE_TYPE,             /**< Unsupported ECDH key negotiation algorithm curve. */
187     HITLS_PACK_INVALID_KX_PUBKEY_LENGTH,            /**< Invalid length of the public key for key negotiation */
188     HITLS_PACK_SIGNATURE_ERR,                       /**< Failed to assemble the server_kx message signature data. */
189     HITLS_PACK_PRE_SHARED_KEY_ERR,                  /**< Failed to assemble the PSK. */
190 
191     HITLS_PARSE_FAIL_START = 0x02060001,            /**< Start bit of the parse error code. */
192     HITLS_PARSE_UNSUPPORT_VERSION,                  /**< Unsupported Version. */
193     HITLS_PARSE_UNSUPPORT_HANDSHAKE_MSG,            /**< Unsupported handshake messages. */
194     HITLS_PARSE_INVALID_MSG_LEN,                    /**< Message length error. */
195     HITLS_PARSE_DUPLICATE_EXTENDED_MSG,             /**< Duplicate extended messages. */
196     HITLS_PARSE_COMPRESSION_METHOD_ERR,             /**< Incorrect compression type. */
197     HITLS_PARSE_SERVER_NAME_ERR,                    /**< Failed to parse server_name. */
198     HITLS_PARSE_CERT_ERR,                           /**< Failed to parse the certificate. */
199     HITLS_PARSE_ECDH_PUBKEY_ERR,                    /**< Failed to parse the ecdh public key. */
200     HITLS_PARSE_ECDH_SIGN_ERR,                      /**< Failed to parse the ecdh signature. */
201     HITLS_PARSE_UNSUPPORT_KX_ALG,                   /**< Unsupported the key exchange algorithm. */
202     HITLS_PARSE_UNSUPPORT_KX_CURVE_TYPE,            /**< Unsupported ECC curve type. */
203     HITLS_PARSE_GET_SIGN_PARA_ERR,                  /**< Failed to obtain the signature algorithm and hash algorithm */
204     HITLS_PARSE_UNSUPPORT_SIGN_ALG,                 /**< Unsupported the signature algorithm. */
205     HITLS_PARSE_VERIFY_SIGN_FAIL,                   /**< Failed to verify the signature. */
206     HITLS_PARSE_DH_P_ERR,                           /**< Failed to parse the dh_p. */
207     HITLS_PARSE_DH_G_ERR,                           /**< Failed to parse the dh_g. */
208     HITLS_PARSE_DH_PUBKEY_ERR,                      /**< Failed to parse the DHE public key. */
209     HITLS_PARSE_DH_SIGN_ERR,                        /**< Failed to parse the DHE signature. */
210     HITLS_PARSE_UNSUPPORTED_EXTENSION,              /**< Unsupported extended fields. */
211     HITLS_PARSE_CA_LIST_ERR,                        /**< Failed to parse the CA name list. */
212     HITLS_PARSE_EXCESSIVE_MESSAGE_SIZE,             /**< The length of the parsing exceeds the maximum. */
213     HITLS_PARSE_PRE_SHARED_KEY_FAILED,              /**< Failed to parse the PSK extension. */
214     HITLS_PARSE_DUPLICATED_KEY_SHARE,               /**< duplicated key share entry. */
215 
216     HITLS_REASS_FAIL_START = 0x02070001,            /**< Reassembly module error code start bit. */
217     HITLS_REASS_INVALID_FRAGMENT,                   /**< Receives invalid fragmented messages. */
218 
219     HITLS_CCS_FAIL_START = 0x02080001,              /**< ccs module error code start bit. */
220     HITLS_CCS_INVALID_CMD,                          /**< Invalid command. */
221 
222     HITLS_ALERT_FAIL_START = 0x02090001,            /**< alert module error code start bit. */
223     HITLS_ALERT_NO_WANT_SEND,                       /**< No alert messages to be sent. */
224 
225     HITLS_REC_FAIL_START = 0x020A0001,              /**< record module error start bit. */
226     HITLS_REC_PMTU_TOO_SMALL,                       /**< pmtu is too small to meet the record packet length. */
227     HITLS_REC_ERR_BUFFER_NOT_ENOUGH,                /**< Insufficient buffer. */
228     HITLS_REC_ERR_TOO_BIG_LENGTH,                   /**< The length of the plaintext data to be written
229                                                          exceeds the maximum length of a single record. */
230     HITLS_REC_ERR_NOT_SUPPORT_CIPHER,              /**< Unsupported the cipher suites. */
231     HITLS_REC_ERR_ENCRYPT,                         /**< Encryption failed. */
232     HITLS_REC_ERR_AEAD_NONCE_PARAM,                /**< AEAD nonce input parameter is incorrect. */
233     HITLS_REC_ERR_SN_WRAPPING,                     /**< Sequence number Rewind. */
234     HITLS_REC_ERR_IO_EXCEPTION,                    /**< The low level I/O is abnormal. */
235     HITLS_REC_NORMAL_IO_BUSY,                      /**< Low level I/O is busy, need wait for the next sending. */
236     HITLS_REC_NORMAL_RECV_BUF_EMPTY,               /**< The receiving buffer is empty. */
237     HITLS_REC_NORMAL_RECV_UNEXPECT_MSG,            /**< If REC receives unexpected messages and the receiver is user,
238                                                         needs to recall the previous function. */
239     HITLS_REC_NORMAL_RECV_DISORDER_MSG,            /**< The REC receives disordered records,
240                                                         to receive disordered finished records. */
241     HITLS_REC_INVLAID_RECORD,                      /**< record: invalid record message. */
242     HITLS_REC_INVALID_PROTOCOL_VERSION,            /**< record: Incorrect version. */
243     HITLS_REC_BAD_RECORD_MAC,                      /**< record: Invalid MAC. */
244     HITLS_REC_DECODE_ERROR,                        /**< Decoding failed. */
245     HITLS_REC_RECORD_OVERFLOW,                     /**< Record is too long. */
246     HITLS_REC_ERR_RECV_UNEXPECTED_MSG,             /**< Record: unexpected message */
247     HITLS_REC_ERR_GENERATE_MAC,                    /**< Failed to generate the MAC address. */
248     HITLS_REC_NORMAL_IO_EOF,                       /**< IO object has reached EOF. */
249     HITLS_REC_ENCRYPTED_NUMBER_OVERFLOW,           /**< The number of AES-GCM encryption times cannot exceed 2^24.5. */
250     HITLS_REC_ERR_DATA_BETWEEN_CCS_AND_FINISHED,   /**< When version is below TLS13,
251                                                         must not have data between ccs and finished. */
252 
253     HITLS_UIO_FAIL_START = 0x020B0001,             /**< uio module error code start bit. */
254     HITLS_UIO_FAIL,                                /**< UIO internal failure. */
255     HITLS_UIO_IO_EXCEPTION,                        /**< Low level I/O exception. */
256     HITLS_UIO_SCTP_IS_SND_BUF_EMPTY_FAIL,          /**< Failed to obtain whether the sending buffer
257                                                         of the UIO object is empty. */
258     HITLS_UIO_SCTP_ADD_AUTH_KEY_FAIL,              /**< Failed to add the auth key for the sctp UIO object. */
259     HITLS_UIO_SCTP_ACTIVE_AUTH_KEY_FAIL,           /**< Failed to activate the auth key for the sctp UIO object. */
260     HITLS_UIO_SCTP_DEL_AUTH_KEY_FAIL,              /**< Failed to delete the auth key for the sctp UIO object. */
261 
262     HITLS_CERT_FAIL_START = 0x020C0001,            /**< Certificate module error code start bit. */
263     HITLS_CERT_STORE_CTRL_ERR_SET_VERIFY_DEPTH,
264     HITLS_CERT_STORE_CTRL_ERR_ADD_CERT_LIST,
265     HITLS_CERT_ERR_X509_DUP,                       /**< Failed to duplicate the certificate. */
266     HITLS_CERT_ERR_KEY_DUP,                        /**< Failed to duplicate the key. */
267     HITLS_CERT_ERR_STORE_DUP,                      /**< Failed to duplicate the store. */
268     HITLS_CERT_ERR_CHAIN_DUP,                      /**< Failed to duplicate the certificate chain. */
269     HITLS_CERT_CTRL_ERR_GET_ENCODE_LEN,            /**< Failed to obtain the certificate encoding length. */
270     HITLS_CERT_CTRL_ERR_GET_PUB_KEY,               /**< Failed to obtain the certificate public key. */
271     HITLS_CERT_CTRL_ERR_GET_SIGN_ALGO,             /**< Failed to obtain the signature algorithm. */
272     HITLS_CERT_KEY_CTRL_ERR_GET_SIGN_LEN,          /**< Failed to obtain the signature length. */
273     HITLS_CERT_KEY_CTRL_ERR_GET_TYPE,              /**< Failed to obtain the key type. */
274     HITLS_CERT_KEY_CTRL_ERR_GET_CURVE_NAME,        /**< Failed to obtain the elliptic curve ID. */
275     HITLS_CERT_KEY_CTRL_ERR_GET_POINT_FORMAT,      /**< Failed to obtain the point format. */
276     HITLS_CERT_KEY_CTRL_ERR_GET_SECBITS,           /**< Failed to obtain security bits. */
277     HITLS_CERT_KEY_CTRL_ERR_IS_ENC_USAGE,          /**< Determine whether the certificate fails to be encrypted,
278                                                         Applicable to TCLP scenarios. */
279     HITLS_CERT_KEY_CTRL_ERR_IS_DIGITAL_SIGN_USAGE,  /**< Determine whether the certificate fails to be digital sign. */
280     HITLS_CERT_KEY_CTRL_ERR_IS_KEY_CERT_SIGN_USAGE, /**< Determine whether the certificate fails to be cert sign. */
281     HITLS_CERT_KEY_CTRL_ERR_IS_KEY_AGREEMENT_USAGE, /**< Determine whether the certificate fails to be agreement. */
282     HITLS_CERT_KEY_CTRL_ERR_GET_PARAM_ID,           /**< Failed to obtain the parameter ID. */
283     HITLS_CERT_ERR_INVALID_KEY_TYPE,                /**< Invalid key type */
284     HITLS_CERT_ERR_CHECK_CERT_AND_KEY,              /**< Certificate and private key nonmatch. */
285     HITLS_CERT_ERR_NO_CURVE_MATCH,                  /**< Certificate and elliptic curve ID nonmatch. */
286     HITLS_CERT_ERR_NO_POINT_FORMAT_MATCH,           /**< Certificate and dot format nonmatch. */
287     HITLS_CERT_ERR_NO_SIGN_SCHEME_MATCH,            /**< Certificate and signature algorithm nonmatch. */
288     HITLS_CERT_ERR_SELECT_CERTIFICATE,              /**< Failed to select the certificate. */
289     HITLS_CERT_ERR_BUILD_CHAIN,                     /**< Failed to construct the certificate chain. */
290     HITLS_CERT_ERR_ENCODE_CERT,                     /**< Certificate encoding failure. */
291     HITLS_CERT_ERR_PARSE_MSG,                       /**< Certificate decoding failure. */
292     HITLS_CERT_ERR_VERIFY_CERT_CHAIN,               /**< Certificate chain verification failure. */
293     HITLS_CERT_ERR_CREATE_SIGN,                     /**< Failed to sign using the certificate private key. */
294     HITLS_CERT_ERR_VERIFY_SIGN,                     /**< Failed to use the certificate public key
295                                                          to verify the signature. */
296     HITLS_CERT_ERR_ENCRYPT,                         /**< Failed to encrypt the RSA certificate public key. */
297     HITLS_CERT_ERR_DECRYPT,                         /**< Failed to decrypt using the RSA Certificate Private Key */
298     HITLS_CERT_ERR_ADD_CHAIN_CERT,                  /**< Failed to add the certificate chain. */
299     HITLS_CERT_ERR_MGR_DUP,                         /**< Failed to duplicate the certificate management structure. */
300     HITLS_CERT_ERR_INSECURE_SIG_ALG,                /**< Insecure signature algorithm strength. */
301     HITLS_CERT_ERR_CA_KEY_WITH_INSECURE_SECBITS,    /**< Insecure CA certificate key security bits. */
302     HITLS_CERT_ERR_EE_KEY_WITH_INSECURE_SECBITS,    /**< Insecure EE certificate key security bits. */
303     HITLS_CERT_ERR_EXP_CERT,                        /**< No expected certificate included. */
304     HITLS_CERT_ERR_ENCODE,                          /**< Failed to encode the certificate. */
305     HITLS_CERT_ERR_KEYUSAGE,                        /**< Failed to verify the certificate keyusage. */
306     HITLS_CERT_ERR_INVALID_STORE_TYPE,              /**< Invalid store type */
307     HITLS_CERT_ERR_X509_REF,                        /**< Certificate reference counting error. */
308     HITLS_CERT_ERR_INSERT_CERTPAIR,                 /**< Certificate insert certPair error. */
309     HITLS_CERT_ERR_NO_KEYUSAGE,                     /**< No keyusage. */
310     HITLS_CERT_KEY_CTRL_ERR_IS_DATA_ENC_USAGE,      /**< Determine whether the certificate fails to be data enc. */
311     HITLS_CERT_KEY_CTRL_ERR_IS_NON_REPUDIATION_USAGE, /**< Determine whether the certificate fails to be
312                                                            non-repudiation. */
313 
314     HITLS_CRYPT_FAIL_START = 0x020D0001,           /**< Crypt adaptation module error code start bit. */
315     HITLS_CRYPT_ERR_GENERATE_RANDOM,               /**< Failed to generate a random number. */
316     HITLS_CRYPT_ERR_HMAC,                          /**< HMAC operation failure. */
317     HITLS_CRYPT_ERR_DIGEST,                        /**< Hash operation failure. */
318     HITLS_CRYPT_ERR_ENCRYPT,                       /**< Encryption failure. */
319     HITLS_CRYPT_ERR_DECRYPT,                       /**< Decryption failure. */
320     HITLS_CRYPT_ERR_ENCODE_ECDH_KEY,               /**< Failed to obtain the ECDH public key. */
321     HITLS_CRYPT_ERR_CALC_SHARED_KEY,               /**< Failed to calculate the ECDH shared key. */
322     HITLS_CRYPT_ERR_ENCODE_DH_KEY,                 /**< Failed to obtain the DH public key. */
323     HITLS_CRYPT_ERR_HKDF_EXTRACT,                  /**< HKDF-Extract calculation error. */
324     HITLS_CRYPT_ERR_HKDF_EXPAND,                   /**< HKDF-Expand calculation error. */
325     HITLS_CRYPT_ERR_KEM_ENCAPSULATE,               /**< KEM-Encapsulate calculation error. */
326     HITLS_CRYPT_ERR_KEM_DECAPSULATE,               /**< KEM-Decapsulate calculation error. */
327     HITLS_CRYPT_ERR_DH,                            /**< DH failure. */
328 
329     HITLS_APP_FAIL_START = 0x020E0001,             /**< APP module error code start bit. */
330     HITLS_APP_ERR_TOO_LONG_TO_WRITE,               /**< APP Data written is too long. */
331     HITLS_APP_ERR_ZERO_READ_BUF_LEN,               /**< The buffer size read by the APP cannot be 0. */
332     HITLS_APP_ERR_WRITE_BAD_RETRY,                 /**< The addresses of the buffers sent twice are inconsistent. */
333 
334     HITLS_CLIENT_HELLO_CHECK_ERROR,                /**< ClientHello callback detection failure. */
335 
336     HITLS_SESS_FAIL_START = 0x02100001,            /**< Session feature error code start bit. */
337     HITLS_SESS_ERR_SESSION_ID_GENRATE,             /**< Session id output error. */
338     HITLS_SESS_ERR_DECODE_TICKET,                  /**< Error decoding session ticket object. */
339     HITLS_SESS_ERR_SESSION_TICKET_SIZE_INCORRECT,  /**< Session ticket length is incorrect. */
340     HITLS_SESS_ERR_SESSION_TICKET_HMAC_FAIL,       /**< Failed to calculate the session ticket hmac. */
341     HITLS_SESS_ERR_SESSION_TICKET_KEY_FAIL,        /**< Failed to obtain the ticket key, and then link
342                                                         establishment failed, so needs to sent alert. */
343     HITLS_SESS_ERR_ENC_VERIFY_RESULT_FAIL,         /**< Failed to verify the encoding result. */
344     HITLS_SESS_ERR_ENC_MASTER_SECRET_FAIL,         /**< Failed to encode the master secret. */
345     HITLS_SESS_ERR_ENC_EXT_MASTER_SECRET_FAIL,     /**< Failed to encode the extend master secret. */
346     HITLS_SESS_ERR_ENC_SESSION_ID_FAIL,            /**< Failed to encode the session ID. */
347     HITLS_SESS_ERR_ENC_SESSION_ID_CTX_FAIL,        /**< Failed to encode the session ID context. */
348     HITLS_SESS_ERR_ENC_HOST_NAME_FAIL,             /**< Failed to encode the host name. */
349     HITLS_SESS_ERR_ENC_TIME_OUT_FAIL,              /**< Failed to encode the time out. */
350     HITLS_SESS_ERR_ENC_VERSION_FAIL,               /**< Failed to encode the version. */
351     HITLS_SESS_ERR_ENC_CIPHER_SUITE_FAIL,          /**< Failed to encode the ciphersuite. */
352     HITLS_SESS_ERR_ENC_START_TIME_FAIL,            /**< Failed to encode the start time. */
353     HITLS_SESS_ERR_ENC_PSK_IDENTITY_FAIL,          /**< Failed to encode the PSK identity. */
354     HITLS_SESS_ERR_DEC_VERIFY_RESULT_FAIL,         /**< Failed to decode the verify result. */
355     HITLS_SESS_ERR_DEC_VERSION_FAIL,               /**< Failed to decode the version. */
356     HITLS_SESS_ERR_DEC_CIPHER_SUITE_FAIL,          /**< Fails to decode the cipher suite. */
357     HITLS_SESS_ERR_DEC_MASTER_SECRET_FAIL,         /**< Failed to decode the master secret. */
358     HITLS_SESS_ERR_DEC_PSK_IDENTITY_FAIL,          /**< Failed to decode the PSK identity. */
359     HITLS_SESS_ERR_DEC_START_TIME_FAIL,            /**< Failed to decode the start time. */
360     HITLS_SESS_ERR_DEC_TIME_OUT_FAIL,              /**< Failed to decode the time out. */
361     HITLS_SESS_ERR_DEC_HOST_NAME_FAIL,             /**< Failed to decode the host name. */
362     HITLS_SESS_ERR_DEC_SESSION_ID_CTX_FAIL,        /**< Failed to decode the session ID context. */
363     HITLS_SESS_ERR_DEC_SESSION_ID_FAIL,            /**< Failed to decode the session ID. */
364     HITLS_SESS_ERR_DEC_EXT_MASTER_SECRET_FAIL,     /**< Failed to decode the extended master secret. */
365     HITLS_SESS_ERR_ENC_PEER_CERT_FAIL,             /**< Failed to encode the peercert. */
366     HITLS_SESS_ERR_DEC_PEER_CERT_FAIL,             /**< Failed to decode the peercert. */
367 
368     HITLS_X509_FAIL_START = 0x02120001,            /**< The X509 feature error code start bit of. */
369     HITLS_X509_V_ERR_UNSPECIFIED,
370     HITLS_X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT,
371     HITLS_X509_V_ERR_UNABLE_TO_GET_CRL,
372     HITLS_X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE,
373     HITLS_X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE,
374     HITLS_X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY,
375     HITLS_X509_V_ERR_CERT_SIGNATURE_FAILURE,
376     HITLS_X509_V_ERR_CRL_SIGNATURE_FAILURE,
377     HITLS_X509_V_ERR_CERT_NOT_YET_VALID,
378     HITLS_X509_V_ERR_CERT_HAS_EXPIRED,
379     HITLS_X509_V_ERR_CRL_NOT_YET_VALID,
380     HITLS_X509_V_ERR_CRL_HAS_EXPIRED,
381     HITLS_X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD,
382     HITLS_X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD,
383     HITLS_X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD,
384     HITLS_X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD,
385     HITLS_X509_V_ERR_OUT_OF_MEM,
386     HITLS_X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT,
387     HITLS_X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN,
388     HITLS_X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY,
389     HITLS_X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE,
390     HITLS_X509_V_ERR_CERT_CHAIN_TOO_LONG,
391     HITLS_X509_V_ERR_CERT_REVOKED,
392     HITLS_X509_V_ERR_INVALID_CA,
393     HITLS_X509_V_ERR_PATH_LENGTH_EXCEEDED,
394     HITLS_X509_V_ERR_INVALID_PURPOSE,
395     HITLS_X509_V_ERR_CERT_UNTRUSTED,
396     HITLS_X509_V_ERR_CERT_REJECTED,
397     HITLS_X509_V_ERR_SUBJECT_ISSUER_MISMATCH,
398     HITLS_X509_V_ERR_AKID_SKID_MISMATCH,
399     HITLS_X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH,
400     HITLS_X509_V_ERR_KEYUSAGE_NO_CERTSIGN,
401     HITLS_X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER,
402     HITLS_X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION,
403     HITLS_X509_V_ERR_KEYUSAGE_NO_CRL_SIGN,
404     HITLS_X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION,
405     HITLS_X509_V_ERR_INVALID_NON_CA,
406     HITLS_X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED,
407     HITLS_X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE,
408     HITLS_X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED,
409     HITLS_X509_V_ERR_INVALID_EXTENSION,
410     HITLS_X509_V_ERR_INVALID_POLICY_EXTENSION,
411     HITLS_X509_V_ERR_NO_EXPLICIT_POLICY,
412     HITLS_X509_V_ERR_DIFFERENT_CRL_SCOPE,
413     HITLS_X509_V_ERR_ERROR_IN_CMP_CERT_NOT_AFTER_FIELD,
414     HITLS_X509_V_ERR_ERROR_IN_CMP_CRL_THIS_UPDATE_FIELD,
415     HITLS_X509_V_ERR_ERROR_IN_CMP_CRL_NEXT_UPDATE_FIELD,
416     HITLS_X509_V_ERR_ERROR_IN_CMP_CERT_NOT_BEFORE_FIELD,
417     HITLS_X509_V_ERR_CRL_PATH_VALIDATION_ERROR,
418 
419     HITLS_CERT_SELF_ADAPT_ERR = 0x02130001,
420     HITLS_CERT_SELF_ADAPT_INVALID_TIME,
421     HITLS_CERT_SELF_ADAPT_UNSUPPORT_FORMAT,
422     HITLS_CERT_SELF_ADAPT_BUILD_CERT_CHAIN_ERR,
423 } HITLS_ERROR;
424 
425 /**
426  * @ingroup hitls_error
427  * @brief   Obtain the TLS operation error code.
428  *
429  * @param   ctx [IN] TLS context
430  * @param   ret [IN] Return value of the TLS interface called
431  * @retval  HITLS_SUCCESS, No error.
432  * @retval  HITLS_WANT_CONNECT, indicates that the connection is blocked.
433  * You can call HITLS_Connect to continue the connection, This problem is usually caused
434  * by the read and write operation failure.
435  * @retval  HITLS_WANT_ACCEPT, indicates that the connection is blocked and the HITLS_Accept
436  * can be called to continue the connection. This problem is usually caused by the read and write operation failure.
437  * @retval  HITLS_WANT_READ, indicates that the receiving buffer is empty and the interface
438  * can be called to continue receiving data.
439  * @retval  HITLS_WANT_WRITE, indicates that the sending buffer is full and the interface
440  * can be called to continue sending data.
441  * @retval  HITLS_ERR_TLS, An unrecoverable fatal error occurs in the TLS protocol, usually a protocol error.
442  * @retval  HITLS_ERR_SYSCALL, An unrecoverable I/O error occurs. Generally, the I/O error is caused
443  * by the Low level receiving and receiving exception and an unknown error occurs.
444  */
445 int32_t HITLS_GetError(const HITLS_Ctx *ctx, int32_t ret);
446 
447 #ifdef __cplusplus
448 }
449 #endif /* __cplusplus */
450 
451 #endif /* end HITLS_ERROR_H */
452