60 #ifndef HEADER_DTLS1_H
61 # define HEADER_DTLS1_H
63 # include <openssl/buffer.h>
64 # include <openssl/pqueue.h>
65 # ifdef OPENSSL_SYS_VMS
66 # include <resource.h>
67 # include <sys/timeb.h>
69 # ifdef OPENSSL_SYS_WIN32
72 # elif defined(OPENSSL_SYS_NETWARE) && !defined(_WINSOCK2API_)
73 # include <sys/timeval.h>
75 # if defined(OPENSSL_SYS_VXWORKS)
76 # include <sys/times.h>
78 # include <sys/time.h>
86 # define DTLS1_VERSION 0xFEFF
87 # define DTLS1_2_VERSION 0xFEFD
88 # define DTLS_MAX_VERSION DTLS1_2_VERSION
89 # define DTLS1_VERSION_MAJOR 0xFE
91 # define DTLS1_BAD_VER 0x0100
94 # define DTLS_ANY_VERSION 0x1FFFF
98 # define DTLS1_AD_MISSING_HANDSHAKE_MESSAGE 110
102 # define DTLS1_COOKIE_LENGTH 256
104 # define DTLS1_RT_HEADER_LENGTH 13
106 # define DTLS1_HM_HEADER_LENGTH 12
108 # define DTLS1_HM_BAD_FRAGMENT -2
109 # define DTLS1_HM_FRAGMENT_RETRY -3
111 # define DTLS1_CCS_HEADER_LENGTH 1
113 # ifdef DTLS1_AD_MISSING_HANDSHAKE_MESSAGE
114 # define DTLS1_AL_HEADER_LENGTH 7
116 # define DTLS1_AL_HEADER_LENGTH 2
119 # ifndef OPENSSL_NO_SSL_INTERN
121 # ifndef OPENSSL_NO_SCTP
122 # define DTLS1_SCTP_AUTH_LABEL "EXPORTER_DTLS_OVER_SCTP"
126 # define DTLS1_MAX_MTU_OVERHEAD 48
128 typedef struct dtls1_bitmap_st {
131 unsigned char max_seq_num[8];
135 struct dtls1_retransmit_state {
136 EVP_CIPHER_CTX *enc_write_ctx;
137 EVP_MD_CTX *write_hash;
138 # ifndef OPENSSL_NO_COMP
143 SSL_SESSION *session;
144 unsigned short epoch;
147 struct hm_header_st {
149 unsigned long msg_len;
151 unsigned long frag_off;
152 unsigned long frag_len;
154 struct dtls1_retransmit_state saved_retransmit_state;
157 struct ccs_header_st {
162 struct dtls1_timeout_st {
164 unsigned int read_timeouts;
166 unsigned int write_timeouts;
168 unsigned int num_alerts;
171 typedef struct record_pqueue_st {
172 unsigned short epoch;
176 typedef struct hm_fragment_st {
177 struct hm_header_st msg_header;
178 unsigned char *fragment;
179 unsigned char *reassembly;
182 typedef struct dtls1_state_st {
183 unsigned int send_cookie;
184 unsigned char cookie[DTLS1_COOKIE_LENGTH];
185 unsigned char rcvd_cookie[DTLS1_COOKIE_LENGTH];
186 unsigned int cookie_len;
192 unsigned short r_epoch;
193 unsigned short w_epoch;
197 DTLS1_BITMAP next_bitmap;
199 unsigned short handshake_write_seq;
200 unsigned short next_handshake_write_seq;
201 unsigned short handshake_read_seq;
203 unsigned char last_write_sequence[8];
205 record_pqueue unprocessed_rcds;
206 record_pqueue processed_rcds;
208 pqueue buffered_messages;
210 pqueue sent_messages;
216 record_pqueue buffered_app_data;
219 unsigned int link_mtu;
221 struct hm_header_st w_msg_hdr;
222 struct hm_header_st r_msg_hdr;
223 struct dtls1_timeout_st timeout;
227 struct timeval next_timeout;
229 unsigned short timeout_duration;
234 unsigned char alert_fragment[DTLS1_AL_HEADER_LENGTH];
235 unsigned int alert_fragment_len;
236 unsigned char handshake_fragment[DTLS1_HM_HEADER_LENGTH];
237 unsigned int handshake_fragment_len;
238 unsigned int retransmitting;
243 unsigned int change_cipher_spec_ok;
244 # ifndef OPENSSL_NO_SCTP
247 int shutdown_received;
251 typedef struct dtls1_record_data_st {
252 unsigned char *packet;
253 unsigned int packet_length;
256 # ifndef OPENSSL_NO_SCTP
257 struct bio_dgram_sctp_rcvinfo recordinfo;
264 # define DTLS1_TMO_READ_COUNT 2
265 # define DTLS1_TMO_WRITE_COUNT 2
267 # define DTLS1_TMO_ALERT_COUNT 12