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 #ifndef SESSION_TYPE_H 17 #define SESSION_TYPE_H 18 19 #include <stdbool.h> 20 #include <stdint.h> 21 #include "hitls_type.h" 22 #include "hitls_session.h" 23 #include "tls_config.h" 24 #include "cert.h" 25 #include "session.h" 26 27 #ifdef __cplusplus 28 extern "C" { 29 #endif 30 31 struct TlsSessionManager { 32 void *lock; /* Thread lock */ 33 int32_t references; /* Reference times */ 34 35 void *hash; /* hash table */ 36 37 uint64_t sessTimeout; /* Session timeout interval, in seconds */ 38 #ifdef HITLS_TLS_FEATURE_SESSION 39 uint32_t sessCacheSize; /* session cache size: maximum number of sessions */ 40 HITLS_SESS_CACHE_MODE sessCacheMode; /* session cache mode */ 41 42 /* TLS1.2 session ticket */ 43 HITLS_TicketKeyCb ticketKeyCb; /* allows users to customize ticket keys through callback */ 44 #endif 45 /* key_name: is used to identify a specific set of keys used to protect tickets */ 46 uint8_t ticketKeyName[HITLS_TICKET_KEY_NAME_SIZE]; 47 uint8_t ticketAesKey[HITLS_TICKET_KEY_SIZE]; /* aes key */ 48 uint8_t ticketHmacKey[HITLS_TICKET_KEY_SIZE]; /* hmac key */ 49 }; 50 51 struct TlsSessCtx { 52 void *lock; /* Thread lock */ 53 /* certificate management context. The certificate interface depends on this field */ 54 CERT_MgrCtx *certMgrCtx; 55 56 int32_t references; /* Reference times */ 57 58 bool enable; /* Whether to enable the session */ 59 bool haveExtMasterSecret; /* Whether an extended master key exists */ 60 bool reserved[2]; /* Four-byte alignment */ 61 62 uint64_t startTime; /* Start time */ 63 uint64_t timeout; /* Timeout interval */ 64 #ifdef HITLS_TLS_FEATURE_SNI 65 uint32_t hostNameSize; /* Length of the host name */ 66 uint8_t *hostName; /* Host name */ 67 #endif 68 69 uint32_t sessionIdCtxSize; /* Session ID Context Length */ 70 uint8_t sessionIdCtx[HITLS_SESSION_ID_CTX_MAX_SIZE]; /* Session ID Context */ 71 72 uint32_t sessionIdSize; /* Session ID length */ 73 uint8_t sessionId[HITLS_SESSION_ID_MAX_SIZE]; /* session ID */ 74 int32_t verifyResult; /* Authentication result */ 75 76 CERT_Pair *peerCert; /* Peer certificate */ 77 78 uint16_t version; /* Version */ 79 uint16_t cipherSuite; /* Cipher suite */ 80 uint32_t masterKeySize; /* length of the master key */ 81 uint8_t masterKey[MAX_MASTER_KEY_SIZE]; /* Master Key */ 82 83 uint32_t ticketSize; /* Session ticket length */ 84 uint8_t *ticket; /* Session ticket */ 85 uint32_t ticketLifetime; /* Timeout interval of the ticket */ 86 uint32_t ticketAgeAdd; /* A random number generated each time a ticket is issued */ 87 }; 88 89 #define LIBCTX_FROM_SESSION_CTX(sessCtx) (sessCtx == NULL) ? NULL : ((sessCtx)->certMgrCtx == NULL ? NULL : (sessCtx)->certMgrCtx->libCtx) 90 #define ATTRIBUTE_FROM_SESSION_CTX(sessCtx) (sessCtx == NULL) ? NULL : ((sessCtx)->certMgrCtx == NULL ? NULL : (sessCtx)->certMgrCtx->attrName) 91 92 #ifdef __cplusplus 93 } 94 #endif 95 96 #endif 97