21#include "hitls_build.h"
22#include "cipher_suite.h"
23#include "tls_config.h"
24#include "hitls_error.h"
30#define MAX_DIGEST_SIZE 64UL
32#define DTLS_DEFAULT_PMTU 1500uL
39#define DTLS_SCTP_PMTU 18445uL
41#define IS_DTLS_VERSION(version) (((version) & 0x8u) == 0x8u)
43#define IS_SUPPORT_STREAM(versionBits) (((versionBits) & STREAM_VERSION_BITS) != 0x0u)
44#define IS_SUPPORT_DATAGRAM(versionBits) (((versionBits) & DATAGRAM_VERSION_BITS) != 0x0u)
45#define IS_SUPPORT_TLCP(versionBits) (((versionBits) & TLCP_VERSION_BITS) != 0x0u)
46#define IS_SUPPORT_TLS(versionBits) (((versionBits) & TLS_VERSION_MASK) != 0x0u)
48#define MAC_KEY_LEN 32u
50#define UNPROCESSED_APP_MSG_COUNT_MAX 50
52#define RANDOM_SIZE 32u
54typedef struct TlsCtx TLS_Ctx;
55typedef struct HsCtx HS_Ctx;
56typedef struct CcsCtx CCS_Ctx;
58typedef struct RecCtx REC_Ctx;
62 CCS_CMD_RECV_EXIT_READY,
63 CCS_CMD_RECV_ACTIVE_CIPHER_SPEC,
67typedef bool (*IsRecvCcsCallback)(
const TLS_Ctx *ctx);
69typedef int32_t (*SendCcsCallback)(TLS_Ctx *ctx);
71typedef int32_t (*CtrlCcsCallback)(TLS_Ctx *ctx, CCS_Cmd cmd);
74 ALERT_LEVEL_WARNING = 1,
75 ALERT_LEVEL_FATAL = 2,
76 ALERT_LEVEL_UNKNOWN = 255,
80 ALERT_CLOSE_NOTIFY = 0,
81 ALERT_UNEXPECTED_MESSAGE = 10,
82 ALERT_BAD_RECORD_MAC = 20,
83 ALERT_DECRYPTION_FAILED = 21,
84 ALERT_RECORD_OVERFLOW = 22,
85 ALERT_DECOMPRESSION_FAILURE = 30,
86 ALERT_HANDSHAKE_FAILURE = 40,
87 ALERT_NO_CERTIFICATE_RESERVED = 41,
88 ALERT_BAD_CERTIFICATE = 42,
89 ALERT_UNSUPPORTED_CERTIFICATE = 43,
90 ALERT_CERTIFICATE_REVOKED = 44,
91 ALERT_CERTIFICATE_EXPIRED = 45,
92 ALERT_CERTIFICATE_UNKNOWN = 46,
93 ALERT_ILLEGAL_PARAMETER = 47,
94 ALERT_UNKNOWN_CA = 48,
95 ALERT_ACCESS_DENIED = 49,
96 ALERT_DECODE_ERROR = 50,
97 ALERT_DECRYPT_ERROR = 51,
98 ALERT_EXPORT_RESTRICTION_RESERVED = 60,
99 ALERT_PROTOCOL_VERSION = 70,
100 ALERT_INSUFFICIENT_SECURITY = 71,
101 ALERT_INTERNAL_ERROR = 80,
102 ALERT_INAPPROPRIATE_FALLBACK = 86,
103 ALERT_USER_CANCELED = 90,
104 ALERT_NO_RENEGOTIATION = 100,
105 ALERT_MISSING_EXTENSION = 109,
106 ALERT_UNSUPPORTED_EXTENSION = 110,
107 ALERT_CERTIFICATE_UNOBTAINABLE = 111,
108 ALERT_UNRECOGNIZED_NAME = 112,
109 ALERT_BAD_CERTIFICATE_STATUS_RESPONSE = 113,
110 ALERT_BAD_CERTIFICATE_HASH_VALUE = 114,
111 ALERT_UNKNOWN_PSK_IDENTITY = 115,
112 ALERT_CERTIFICATE_REQUIRED = 116,
113 ALERT_NO_APPLICATION_PROTOCOL = 120,
120 CM_STATE_HANDSHAKING,
121 CM_STATE_TRANSPORTING,
122 CM_STATE_RENEGOTIATION,
125#ifdef HITLS_TLS_PROTO_CLOSE_STATE
143 TRY_SEND_HELLO_REQUEST,
144 TRY_SEND_CLIENT_HELLO,
145 TRY_SEND_HELLO_VERIFY_REQUEST,
146 TRY_SEND_HELLO_RETRY_REQUEST,
147 TRY_SEND_SERVER_HELLO,
148 TRY_SEND_ENCRYPTED_EXTENSIONS,
149 TRY_SEND_CERTIFICATE,
150 TRY_SEND_SERVER_KEY_EXCHANGE,
151 TRY_SEND_CERTIFICATE_REQUEST,
152 TRY_SEND_SERVER_HELLO_DONE,
153 TRY_SEND_CLIENT_KEY_EXCHANGE,
154 TRY_SEND_CERTIFICATE_VERIFY,
155 TRY_SEND_NEW_SESSION_TICKET,
156 TRY_SEND_CHANGE_CIPHER_SPEC,
157 TRY_SEND_END_OF_EARLY_DATA,
160 TRY_RECV_CLIENT_HELLO,
161 TRY_RECV_HELLO_VERIFY_REQUEST,
162 TRY_RECV_SERVER_HELLO,
163 TRY_RECV_ENCRYPTED_EXTENSIONS,
164 TRY_RECV_CERTIFICATE,
165 TRY_RECV_SERVER_KEY_EXCHANGE,
166 TRY_RECV_CERTIFICATE_REQUEST,
167 TRY_RECV_SERVER_HELLO_DONE,
168 TRY_RECV_CLIENT_KEY_EXCHANGE,
169 TRY_RECV_CERTIFICATE_VERIFY,
170 TRY_RECV_NEW_SESSION_TICKET,
171 TRY_RECV_END_OF_EARLY_DATA,
174 TRY_RECV_HELLO_REQUEST,
176} HITLS_HandshakeState;
183typedef void (*SendAlertCallback)(
const TLS_Ctx *ctx, ALERT_Level level, ALERT_Description description);
185typedef void (*ClearAlertCallBack)(TLS_Ctx *ctx, uint32_t recordType);
187typedef bool (*GetAlertFlagCallback)(
const TLS_Ctx *ctx);
189typedef int32_t (*UnexpectMsgHandleCallback)(TLS_Ctx *ctx, uint32_t msgType,
const uint8_t *data, uint32_t dataLen,
201 TLS_Config tlsConfig;
205 uint32_t algRemainTime;
206 uint8_t preMacKey[MAC_KEY_LEN];
207 uint8_t macKey[MAC_KEY_LEN];
212 uint16_t clientVersion;
216 CipherSuiteInfo cipherSuiteInfo;
218 uint8_t *alpnSelected;
219 uint32_t alpnSelectedSize;
220 uint8_t clientVerifyData[MAX_DIGEST_SIZE];
221 uint8_t serverVerifyData[MAX_DIGEST_SIZE];
222 uint8_t clientRandom[RANDOM_SIZE];
223 uint8_t serverRandom[RANDOM_SIZE];
224 uint32_t clientVerifyDataSize;
225 uint32_t serverVerifyDataSize;
226 uint32_t renegotiationNum;
227 uint32_t certReqSendTime;
228 uint32_t tls13BasicKeyExMode;
231 uint16_t negotiatedGroup;
232 uint16_t recordSizeLimit;
233 uint16_t renegoRecordSizeLimit;
234 uint16_t peerRecordSizeLimit;
236 bool isRenegotiation;
238 bool isSecureRenegotiation;
239 bool isExtendedMasterSecret;
240 bool isEncryptThenMac;
241 bool isEncryptThenMacRead;
242 bool isEncryptThenMacWrite;
245#ifdef HITLS_TLS_FEATURE_SNI
247 uint32_t serverNameSize;
254 uint16_t *cipherSuites;
255 uint16_t cipherSuitesSize;
257 uint16_t *signatureAlgorithms;
258 uint16_t signatureAlgorithmsSize;
259 HITLS_ERROR verifyResult;
271 uint32_t shutdownState;
281 IsRecvCcsCallback isRecvCCS;
282 SendCcsCallback sendCCS;
283 CtrlCcsCallback ctrlCCS;
284 SendAlertCallback sendAlert;
285 ClearAlertCallBack clearAlert;
286 GetAlertFlagCallback getAlertFlag;
287 UnexpectMsgHandleCallback unexpectedMsgProcessCb;
291 TLS_CtxConfig config;
292 TLS_Config *globalConfig;
294 HITLS_Session *session;
296 uint8_t clientAppTrafficSecret[MAX_DIGEST_SIZE];
297 uint8_t serverAppTrafficSecret[MAX_DIGEST_SIZE];
298 uint8_t resumptionMasterSecret[MAX_DIGEST_SIZE];
299 uint8_t exporterMasterSecret[MAX_DIGEST_SIZE];
301 uint32_t bytesLeftToRead;
302 uint32_t keyUpdateType;
303 bool isKeyUpdateRequest;
304 bool haveClientPointFormats;
306 bool hasParsedHsMsgHeader;
309 HITLS_HASH_Ctx *phaHash;
310 HITLS_HASH_Ctx *phaCurHash;
312 uint8_t *certificateReqCtx;
313 uint32_t certificateReqCtxSize;
315 bool plainAlertForbid;
331#define LIBCTX_FROM_CTX(ctx) (((ctx) == NULL) ? NULL : (ctx)->config.tlsConfig.libCtx)
332#define ATTRIBUTE_FROM_CTX(ctx) (((ctx) == NULL) ? NULL : (ctx)->config.tlsConfig.attrName)
334#define CUSTOM_EXT_FROM_CTX(ctx) (((ctx) == NULL) ? NULL : (ctx)->config.tlsConfig.customExts)
336#define GET_VERSION_FROM_CTX(ctx) \
337 ((ctx)->negotiatedInfo.version > 0 ? (ctx)->negotiatedInfo.version : (ctx)->config.tlsConfig.maxVersion)
HITLS_SignHashAlgo
Certificate Signature Algorithm Enumeration
定义 hitls_cert_type.h:177
struct BslList HITLS_TrustedCAList
Describes the list of trusted CAs
定义 hitls_cert_type.h:67
Basic time data structure definition.
定义 bsl_sal.h:583
定义 change_cipher_spec.c:32