1656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* ssl/dtls1.h */
2656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*
3656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * DTLS implementation written by Nagendra Modadugu
4656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * (nagendra@cs.stanford.edu) for the OpenSSL project 2005.
5656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */
6656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* ====================================================================
7656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Copyright (c) 1999-2005 The OpenSSL Project.  All rights reserved.
8656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
9656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Redistribution and use in source and binary forms, with or without
10656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * modification, are permitted provided that the following conditions
11656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * are met:
12656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
13656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 1. Redistributions of source code must retain the above copyright
14656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    notice, this list of conditions and the following disclaimer.
15656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
16656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright
17656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    notice, this list of conditions and the following disclaimer in
18656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    the documentation and/or other materials provided with the
19656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    distribution.
20656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
21656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 3. All advertising materials mentioning features or use of this
22656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    software must display the following acknowledgment:
23656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    "This product includes software developed by the OpenSSL Project
24656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
25656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
26656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
27656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    endorse or promote products derived from this software without
28656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    prior written permission. For written permission, please contact
29656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    openssl-core@OpenSSL.org.
30656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
31656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 5. Products derived from this software may not be called "OpenSSL"
32656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    nor may "OpenSSL" appear in their names without prior written
33656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    permission of the OpenSSL Project.
34656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
35656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 6. Redistributions of any form whatsoever must retain the following
36656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    acknowledgment:
37656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    "This product includes software developed by the OpenSSL Project
38656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
39656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
40656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
41656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
42656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
43656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
44656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
45656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
46656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
47656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
49656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
50656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
51656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * OF THE POSSIBILITY OF SUCH DAMAGE.
52656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ====================================================================
53656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
54656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This product includes cryptographic software written by Eric Young
55656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * (eay@cryptsoft.com).  This product includes software written by Tim
56656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Hudson (tjh@cryptsoft.com).
57656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
58656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */
59656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
6004ef91b390dfcc6125913e2f2af502d23d7a5112Brian Carlstrom#ifndef HEADER_DTLS1_H
6104ef91b390dfcc6125913e2f2af502d23d7a5112Brian Carlstrom#define HEADER_DTLS1_H
62656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
63656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/buffer.h>
64656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/pqueue.h>
6598d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom#ifdef OPENSSL_SYS_VMS
6698d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom#include <resource.h>
6798d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom#include <sys/timeb.h>
6898d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom#endif
6998d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom#ifdef OPENSSL_SYS_WIN32
7098d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom/* Needed for struct timeval */
7198d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom#include <winsock.h>
7298d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom#elif defined(OPENSSL_SYS_NETWARE) && !defined(_WINSOCK2API_)
7398d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom#include <sys/timeval.h>
7498d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom#else
7504ef91b390dfcc6125913e2f2af502d23d7a5112Brian Carlstrom#if defined(OPENSSL_SYS_VXWORKS)
7604ef91b390dfcc6125913e2f2af502d23d7a5112Brian Carlstrom#include <sys/times.h>
7704ef91b390dfcc6125913e2f2af502d23d7a5112Brian Carlstrom#else
7898d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom#include <sys/time.h>
7998d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom#endif
8004ef91b390dfcc6125913e2f2af502d23d7a5112Brian Carlstrom#endif
81656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
82656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef  __cplusplus
83656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectextern "C" {
84656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
85656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
86656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define DTLS1_VERSION			0xFEFF
879a68a8fb86e7440763286e3ea8578099abd598e7Bodo Moeller#define DTLS_MAX_VERSION		DTLS1_VERSION
889a68a8fb86e7440763286e3ea8578099abd598e7Bodo Moeller
89656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define DTLS1_BAD_VER			0x0100
90656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
91e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu#if 0
92e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu/* this alert description is not specified anywhere... */
93656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define DTLS1_AD_MISSING_HANDSHAKE_MESSAGE    110
94e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu#endif
95656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
96656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* lengths of messages */
9798d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom#define DTLS1_COOKIE_LENGTH                     256
98656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
99656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define DTLS1_RT_HEADER_LENGTH                  13
100656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
101656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define DTLS1_HM_HEADER_LENGTH                  12
102656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
103656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define DTLS1_HM_BAD_FRAGMENT                   -2
104656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define DTLS1_HM_FRAGMENT_RETRY                 -3
105656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
106656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define DTLS1_CCS_HEADER_LENGTH                  1
107656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
108e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu#ifdef DTLS1_AD_MISSING_HANDSHAKE_MESSAGE
109656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define DTLS1_AL_HEADER_LENGTH                   7
110e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu#else
111e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu#define DTLS1_AL_HEADER_LENGTH                   2
112e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu#endif
113656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
114392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#ifndef OPENSSL_NO_SSL_INTERN
115392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
116392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#ifndef OPENSSL_NO_SCTP
117392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#define DTLS1_SCTP_AUTH_LABEL	"EXPORTER_DTLS_OVER_SCTP"
118392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
119656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
120656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef struct dtls1_bitmap_st
121656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
122221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	unsigned long map;		/* track 32 packets on 32-bit systems
123221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom					   and 64 - on 64-bit systems */
124221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	unsigned char max_seq_num[8];	/* max record number seen so far,
125221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom					   64-bit value in big-endian
126221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom					   encoding */
127656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	} DTLS1_BITMAP;
128656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
12998d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstromstruct dtls1_retransmit_state
13098d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom	{
13198d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom	EVP_CIPHER_CTX *enc_write_ctx;	/* cryptographic state */
132221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	EVP_MD_CTX *write_hash;			/* used for mac generation */
13398d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom#ifndef OPENSSL_NO_COMP
13498d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom	COMP_CTX *compress;				/* compression */
13598d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom#else
13698d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom	char *compress;
13798d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom#endif
13898d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom	SSL_SESSION *session;
13998d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom	unsigned short epoch;
14098d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom	};
14198d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom
142656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstruct hm_header_st
143656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
144656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned char type;
145656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned long msg_len;
146656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned short seq;
147656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned long frag_off;
148656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned long frag_len;
149656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned int is_ccs;
15098d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom	struct dtls1_retransmit_state saved_retransmit_state;
151656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	};
152656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
153656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstruct ccs_header_st
154656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
155656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned char type;
156656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned short seq;
157656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	};
158656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
159656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstruct dtls1_timeout_st
160656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
161656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	/* Number of read timeouts so far */
162656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned int read_timeouts;
163656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
164656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	/* Number of write timeouts so far */
165656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned int write_timeouts;
166656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
167656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	/* Number of alerts received so far */
168656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned int num_alerts;
169656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	};
170656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
171656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef struct record_pqueue_st
172656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
173656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned short epoch;
174656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	pqueue q;
175656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	} record_pqueue;
176656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
177656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef struct hm_fragment_st
178656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
179656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	struct hm_header_st msg_header;
180656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned char *fragment;
1813d3a1b8fcf46ca3bdb3d8f09acd6ef604624a30dBrian Carlstrom	unsigned char *reassembly;
182656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	} hm_fragment;
183656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
184656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef struct dtls1_state_st
185656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
186656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned int send_cookie;
187656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned char cookie[DTLS1_COOKIE_LENGTH];
188656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned char rcvd_cookie[DTLS1_COOKIE_LENGTH];
189656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned int cookie_len;
190656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
191656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	/*
192656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	 * The current data and handshake epoch.  This is initially
193656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	 * undefined, and starts at zero once the initial handshake is
194656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	 * completed
195656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	 */
196656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned short r_epoch;
197656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned short w_epoch;
198656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
199656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	/* records being received in the current epoch */
200656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	DTLS1_BITMAP bitmap;
201656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
202656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	/* renegotiation starts a new set of sequence numbers */
203656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	DTLS1_BITMAP next_bitmap;
204656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
205656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	/* handshake message numbers */
206656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned short handshake_write_seq;
207656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned short next_handshake_write_seq;
208656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
209656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned short handshake_read_seq;
210656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
21198d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom	/* save last sequence number for retransmissions */
21298d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom	unsigned char last_write_sequence[8];
21398d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom
214656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	/* Received handshake records (processed and unprocessed) */
215656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	record_pqueue unprocessed_rcds;
216656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	record_pqueue processed_rcds;
217656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
218656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	/* Buffered handshake messages */
219656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	pqueue buffered_messages;
220656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
221656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	/* Buffered (sent) handshake records */
222656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	pqueue sent_messages;
223656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
22498d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom	/* Buffered application records.
22598d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom	 * Only for records between CCS and Finished
22698d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom	 * to prevent either protocol violation or
22798d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom	 * unnecessary message loss.
22898d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom	 */
22998d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom	record_pqueue buffered_app_data;
23098d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom
23198d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom	/* Is set when listening for new connections with dtls1_listen() */
23298d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom	unsigned int listen;
23398d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom
23498d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom	unsigned int mtu; /* max DTLS packet size */
235656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
236656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	struct hm_header_st w_msg_hdr;
237656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	struct hm_header_st r_msg_hdr;
238656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
239656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	struct dtls1_timeout_st timeout;
24098d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom
241392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	/* Indicates when the last handshake msg or heartbeat sent will timeout */
24298d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom	struct timeval next_timeout;
24398d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom
24498d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom	/* Timeout duration */
24598d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom	unsigned short timeout_duration;
24698d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom
247656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	/* storage for Alert/Handshake protocol data received but not
248656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	 * yet processed by ssl3_read_bytes: */
249656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned char alert_fragment[DTLS1_AL_HEADER_LENGTH];
250656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned int alert_fragment_len;
251656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned char handshake_fragment[DTLS1_HM_HEADER_LENGTH];
252656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned int handshake_fragment_len;
253656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
254656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned int retransmitting;
25598d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom	unsigned int change_cipher_spec_ok;
256656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
257392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#ifndef OPENSSL_NO_SCTP
258392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	/* used when SSL_ST_XX_FLUSH is entered */
259392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	int next_state;
260392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
261392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	int shutdown_received;
262392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
263392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
264656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	} DTLS1_STATE;
265656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
266656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef struct dtls1_record_data_st
267656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
268656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned char *packet;
269656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	unsigned int   packet_length;
270656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	SSL3_BUFFER    rbuf;
271656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	SSL3_RECORD    rrec;
272392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#ifndef OPENSSL_NO_SCTP
273392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	struct bio_dgram_sctp_rcvinfo recordinfo;
274392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
275656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	} DTLS1_RECORD_DATA;
276656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
277392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
278656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
279656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Timeout multipliers (timeout slice is defined in apps/timeouts.h */
280656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define DTLS1_TMO_READ_COUNT                      2
281656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define DTLS1_TMO_WRITE_COUNT                     2
282656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
283656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define DTLS1_TMO_ALERT_COUNT                     12
284656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
285656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef  __cplusplus
286656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project}
287656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
288656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
289