epoc32/include/stdapis/openssl/dtls1.h
author William Roberts <williamr@symbian.org>
Tue, 16 Mar 2010 16:12:26 +0000
branchSymbian2
changeset 2 2fe1408b6811
parent 0 061f57f2323e
permissions -rw-r--r--
Final list of Symbian^2 public API header files
williamr@2
     1
/* ssl/dtls1.h */
williamr@2
     2
/* 
williamr@2
     3
 * DTLS implementation written by Nagendra Modadugu
williamr@2
     4
 * (nagendra@cs.stanford.edu) for the OpenSSL project 2005.  
williamr@2
     5
 */
williamr@2
     6
/* ====================================================================
williamr@2
     7
 * Copyright (c) 1999-2005 The OpenSSL Project.  All rights reserved.
williamr@2
     8
 *
williamr@2
     9
 * Redistribution and use in source and binary forms, with or without
williamr@2
    10
 * modification, are permitted provided that the following conditions
williamr@2
    11
 * are met:
williamr@2
    12
 *
williamr@2
    13
 * 1. Redistributions of source code must retain the above copyright
williamr@2
    14
 *    notice, this list of conditions and the following disclaimer. 
williamr@2
    15
 *
williamr@2
    16
 * 2. Redistributions in binary form must reproduce the above copyright
williamr@2
    17
 *    notice, this list of conditions and the following disclaimer in
williamr@2
    18
 *    the documentation and/or other materials provided with the
williamr@2
    19
 *    distribution.
williamr@2
    20
 *
williamr@2
    21
 * 3. All advertising materials mentioning features or use of this
williamr@2
    22
 *    software must display the following acknowledgment:
williamr@2
    23
 *    "This product includes software developed by the OpenSSL Project
williamr@2
    24
 *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
williamr@2
    25
 *
williamr@2
    26
 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
williamr@2
    27
 *    endorse or promote products derived from this software without
williamr@2
    28
 *    prior written permission. For written permission, please contact
williamr@2
    29
 *    openssl-core@OpenSSL.org.
williamr@2
    30
 *
williamr@2
    31
 * 5. Products derived from this software may not be called "OpenSSL"
williamr@2
    32
 *    nor may "OpenSSL" appear in their names without prior written
williamr@2
    33
 *    permission of the OpenSSL Project.
williamr@2
    34
 *
williamr@2
    35
 * 6. Redistributions of any form whatsoever must retain the following
williamr@2
    36
 *    acknowledgment:
williamr@2
    37
 *    "This product includes software developed by the OpenSSL Project
williamr@2
    38
 *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
williamr@2
    39
 *
williamr@2
    40
 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
williamr@2
    41
 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
williamr@2
    42
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
williamr@2
    43
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
williamr@2
    44
 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
williamr@2
    45
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
williamr@2
    46
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
williamr@2
    47
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
williamr@2
    48
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
williamr@2
    49
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
williamr@2
    50
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
williamr@2
    51
 * OF THE POSSIBILITY OF SUCH DAMAGE.
williamr@2
    52
 * ====================================================================
williamr@2
    53
 *
williamr@2
    54
 * This product includes cryptographic software written by Eric Young
williamr@2
    55
 * (eay@cryptsoft.com).  This product includes software written by Tim
williamr@2
    56
 * Hudson (tjh@cryptsoft.com).
williamr@2
    57
 *
williamr@2
    58
 */
williamr@2
    59
williamr@2
    60
#ifndef HEADER_DTLS1_H 
williamr@2
    61
#define HEADER_DTLS1_H 
williamr@2
    62
williamr@2
    63
#include <openssl/buffer.h>
williamr@2
    64
#include <openssl/pqueue.h>
williamr@2
    65
williamr@2
    66
#ifdef  __cplusplus
williamr@2
    67
extern "C" {
williamr@2
    68
#endif
williamr@2
    69
williamr@2
    70
#define DTLS1_VERSION			0xFEFF
williamr@2
    71
#define DTLS1_BAD_VER			0x0100
williamr@2
    72
williamr@2
    73
#define DTLS1_AD_MISSING_HANDSHAKE_MESSAGE    110
williamr@2
    74
williamr@2
    75
/* lengths of messages */
williamr@2
    76
#define DTLS1_COOKIE_LENGTH                     32
williamr@2
    77
williamr@2
    78
#define DTLS1_RT_HEADER_LENGTH                  13
williamr@2
    79
williamr@2
    80
#define DTLS1_HM_HEADER_LENGTH                  12
williamr@2
    81
williamr@2
    82
#define DTLS1_HM_BAD_FRAGMENT                   -2
williamr@2
    83
#define DTLS1_HM_FRAGMENT_RETRY                 -3
williamr@2
    84
williamr@2
    85
#define DTLS1_CCS_HEADER_LENGTH                  1
williamr@2
    86
williamr@2
    87
#define DTLS1_AL_HEADER_LENGTH                   7
williamr@2
    88
williamr@2
    89
williamr@2
    90
typedef struct dtls1_bitmap_st
williamr@2
    91
	{
williamr@2
    92
	PQ_64BIT map;
williamr@2
    93
	unsigned long length;     /* sizeof the bitmap in bits */
williamr@2
    94
	PQ_64BIT max_seq_num;  /* max record number seen so far */
williamr@2
    95
	} DTLS1_BITMAP;
williamr@2
    96
williamr@2
    97
struct hm_header_st
williamr@2
    98
	{
williamr@2
    99
	unsigned char type;
williamr@2
   100
	unsigned long msg_len;
williamr@2
   101
	unsigned short seq;
williamr@2
   102
	unsigned long frag_off;
williamr@2
   103
	unsigned long frag_len;
williamr@2
   104
	unsigned int is_ccs;
williamr@2
   105
	};
williamr@2
   106
williamr@2
   107
struct ccs_header_st
williamr@2
   108
	{
williamr@2
   109
	unsigned char type;
williamr@2
   110
	unsigned short seq;
williamr@2
   111
	};
williamr@2
   112
williamr@2
   113
struct dtls1_timeout_st
williamr@2
   114
	{
williamr@2
   115
	/* Number of read timeouts so far */
williamr@2
   116
	unsigned int read_timeouts;
williamr@2
   117
	
williamr@2
   118
	/* Number of write timeouts so far */
williamr@2
   119
	unsigned int write_timeouts;
williamr@2
   120
	
williamr@2
   121
	/* Number of alerts received so far */
williamr@2
   122
	unsigned int num_alerts;
williamr@2
   123
	};
williamr@2
   124
williamr@2
   125
typedef struct record_pqueue_st
williamr@2
   126
	{
williamr@2
   127
	unsigned short epoch;
williamr@2
   128
	pqueue q;
williamr@2
   129
	} record_pqueue;
williamr@2
   130
williamr@2
   131
typedef struct hm_fragment_st
williamr@2
   132
	{
williamr@2
   133
	struct hm_header_st msg_header;
williamr@2
   134
	unsigned char *fragment;
williamr@2
   135
	} hm_fragment;
williamr@2
   136
williamr@2
   137
typedef struct dtls1_state_st
williamr@2
   138
	{
williamr@2
   139
	unsigned int send_cookie;
williamr@2
   140
	unsigned char cookie[DTLS1_COOKIE_LENGTH];
williamr@2
   141
	unsigned char rcvd_cookie[DTLS1_COOKIE_LENGTH];
williamr@2
   142
	unsigned int cookie_len;
williamr@2
   143
williamr@2
   144
	/* 
williamr@2
   145
	 * The current data and handshake epoch.  This is initially
williamr@2
   146
	 * undefined, and starts at zero once the initial handshake is
williamr@2
   147
	 * completed 
williamr@2
   148
	 */
williamr@2
   149
	unsigned short r_epoch;
williamr@2
   150
	unsigned short w_epoch;
williamr@2
   151
williamr@2
   152
	/* records being received in the current epoch */
williamr@2
   153
	DTLS1_BITMAP bitmap;
williamr@2
   154
williamr@2
   155
	/* renegotiation starts a new set of sequence numbers */
williamr@2
   156
	DTLS1_BITMAP next_bitmap;
williamr@2
   157
williamr@2
   158
	/* handshake message numbers */
williamr@2
   159
	unsigned short handshake_write_seq;
williamr@2
   160
	unsigned short next_handshake_write_seq;
williamr@2
   161
williamr@2
   162
	unsigned short handshake_read_seq;
williamr@2
   163
williamr@2
   164
	/* Received handshake records (processed and unprocessed) */
williamr@2
   165
	record_pqueue unprocessed_rcds;
williamr@2
   166
	record_pqueue processed_rcds;
williamr@2
   167
williamr@2
   168
	/* Buffered handshake messages */
williamr@2
   169
	pqueue buffered_messages;
williamr@2
   170
williamr@2
   171
	/* Buffered (sent) handshake records */
williamr@2
   172
	pqueue sent_messages;
williamr@2
   173
williamr@2
   174
	unsigned int mtu; /* max wire packet size */
williamr@2
   175
williamr@2
   176
	struct hm_header_st w_msg_hdr;
williamr@2
   177
	struct hm_header_st r_msg_hdr;
williamr@2
   178
williamr@2
   179
	struct dtls1_timeout_st timeout;
williamr@2
   180
	
williamr@2
   181
	/* storage for Alert/Handshake protocol data received but not
williamr@2
   182
	 * yet processed by ssl3_read_bytes: */
williamr@2
   183
	unsigned char alert_fragment[DTLS1_AL_HEADER_LENGTH];
williamr@2
   184
	unsigned int alert_fragment_len;
williamr@2
   185
	unsigned char handshake_fragment[DTLS1_HM_HEADER_LENGTH];
williamr@2
   186
	unsigned int handshake_fragment_len;
williamr@2
   187
williamr@2
   188
	unsigned int retransmitting;
williamr@2
   189
williamr@2
   190
	} DTLS1_STATE;
williamr@2
   191
williamr@2
   192
typedef struct dtls1_record_data_st
williamr@2
   193
	{
williamr@2
   194
	unsigned char *packet;
williamr@2
   195
	unsigned int   packet_length;
williamr@2
   196
	SSL3_BUFFER    rbuf;
williamr@2
   197
	SSL3_RECORD    rrec;
williamr@2
   198
	} DTLS1_RECORD_DATA;
williamr@2
   199
williamr@2
   200
williamr@2
   201
/* Timeout multipliers (timeout slice is defined in apps/timeouts.h */
williamr@2
   202
#define DTLS1_TMO_READ_COUNT                      2
williamr@2
   203
#define DTLS1_TMO_WRITE_COUNT                     2
williamr@2
   204
williamr@2
   205
#define DTLS1_TMO_ALERT_COUNT                     12
williamr@2
   206
williamr@2
   207
#ifdef  __cplusplus
williamr@2
   208
}
williamr@2
   209
#endif
williamr@2
   210
#endif
williamr@2
   211