Reformat dtls1.h.
Change-Id: If035f44febec2a2717c3aba03f6d05ae290d247b Reviewed-on: https://boringssl-review.googlesource.com/3217 Reviewed-by: Adam Langley <agl@google.com>
This commit is contained in:
parent
b3774b9619
commit
c39be857a8
@ -1,7 +1,7 @@
|
|||||||
/* ssl/dtls1.h */
|
/* ssl/dtls1.h */
|
||||||
/*
|
/*
|
||||||
* DTLS implementation written by Nagendra Modadugu
|
* DTLS implementation written by Nagendra Modadugu
|
||||||
* (nagendra@cs.stanford.edu) for the OpenSSL project 2005.
|
* (nagendra@cs.stanford.edu) for the OpenSSL project 2005.
|
||||||
*/
|
*/
|
||||||
/* ====================================================================
|
/* ====================================================================
|
||||||
* Copyright (c) 1999-2005 The OpenSSL Project. All rights reserved.
|
* Copyright (c) 1999-2005 The OpenSSL Project. All rights reserved.
|
||||||
@ -11,7 +11,7 @@
|
|||||||
* are met:
|
* are met:
|
||||||
*
|
*
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer.
|
* notice, this list of conditions and the following disclaimer.
|
||||||
*
|
*
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in
|
* notice, this list of conditions and the following disclaimer in
|
||||||
@ -55,173 +55,155 @@
|
|||||||
* (eay@cryptsoft.com). This product includes software written by Tim
|
* (eay@cryptsoft.com). This product includes software written by Tim
|
||||||
* Hudson (tjh@cryptsoft.com). */
|
* Hudson (tjh@cryptsoft.com). */
|
||||||
|
|
||||||
#ifndef HEADER_DTLS1_H
|
#ifndef OPENSSL_HEADER_DTLS1_H
|
||||||
#define HEADER_DTLS1_H
|
#define OPENSSL_HEADER_DTLS1_H
|
||||||
|
|
||||||
#include <openssl/base.h>
|
#include <openssl/base.h>
|
||||||
#include <openssl/buf.h>
|
#include <openssl/buf.h>
|
||||||
#include <openssl/pqueue.h>
|
#include <openssl/pqueue.h>
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#define DTLS1_VERSION 0xFEFF
|
#define DTLS1_VERSION 0xFEFF
|
||||||
#define DTLS1_2_VERSION 0xFEFD
|
#define DTLS1_2_VERSION 0xFEFD
|
||||||
|
|
||||||
/* lengths of messages */
|
/* lengths of messages */
|
||||||
#define DTLS1_COOKIE_LENGTH 256
|
#define DTLS1_COOKIE_LENGTH 256
|
||||||
|
|
||||||
#define DTLS1_RT_HEADER_LENGTH 13
|
#define DTLS1_RT_HEADER_LENGTH 13
|
||||||
|
|
||||||
#define DTLS1_HM_HEADER_LENGTH 12
|
#define DTLS1_HM_HEADER_LENGTH 12
|
||||||
|
|
||||||
#define DTLS1_HM_BAD_FRAGMENT -2
|
#define DTLS1_HM_BAD_FRAGMENT -2
|
||||||
#define DTLS1_HM_FRAGMENT_RETRY -3
|
#define DTLS1_HM_FRAGMENT_RETRY -3
|
||||||
|
|
||||||
#define DTLS1_CCS_HEADER_LENGTH 1
|
#define DTLS1_CCS_HEADER_LENGTH 1
|
||||||
|
|
||||||
#define DTLS1_AL_HEADER_LENGTH 2
|
#define DTLS1_AL_HEADER_LENGTH 2
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_SSL_INTERN
|
typedef struct dtls1_bitmap_st {
|
||||||
|
/* map is a bit mask of the last 64 sequence numbers. Bit
|
||||||
|
* |1<<i| corresponds to |max_seq_num - i|. */
|
||||||
|
uint64_t map;
|
||||||
|
/* max_seq_num is the largest sequence number seen so far. It
|
||||||
|
* is a 64-bit value in big-endian encoding. */
|
||||||
|
uint8_t max_seq_num[8];
|
||||||
|
} DTLS1_BITMAP;
|
||||||
|
|
||||||
|
struct dtls1_retransmit_state {
|
||||||
|
SSL_AEAD_CTX *aead_write_ctx;
|
||||||
|
SSL_SESSION *session;
|
||||||
|
uint16_t epoch;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct hm_header_st {
|
||||||
|
uint8_t type;
|
||||||
|
unsigned long msg_len;
|
||||||
|
uint16_t seq;
|
||||||
|
unsigned long frag_off;
|
||||||
|
unsigned long frag_len;
|
||||||
|
unsigned int is_ccs;
|
||||||
|
struct dtls1_retransmit_state saved_retransmit_state;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ccs_header_st {
|
||||||
|
uint8_t type;
|
||||||
|
uint16_t seq;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct record_pqueue_st {
|
||||||
|
uint16_t epoch;
|
||||||
|
pqueue q;
|
||||||
|
} record_pqueue;
|
||||||
|
|
||||||
|
typedef struct hm_fragment_st {
|
||||||
|
struct hm_header_st msg_header;
|
||||||
|
uint8_t *fragment;
|
||||||
|
uint8_t *reassembly;
|
||||||
|
} hm_fragment;
|
||||||
|
|
||||||
|
typedef struct dtls1_state_st {
|
||||||
|
/* send_cookie is true if we are resending the ClientHello
|
||||||
|
* with a cookie from a HelloVerifyRequest. */
|
||||||
|
unsigned int send_cookie;
|
||||||
|
|
||||||
|
uint8_t cookie[DTLS1_COOKIE_LENGTH];
|
||||||
|
size_t cookie_len;
|
||||||
|
|
||||||
|
/* The current data and handshake epoch. This is initially undefined, and
|
||||||
|
* starts at zero once the initial handshake is completed. */
|
||||||
|
uint16_t r_epoch;
|
||||||
|
uint16_t w_epoch;
|
||||||
|
|
||||||
|
/* records being received in the current epoch */
|
||||||
|
DTLS1_BITMAP bitmap;
|
||||||
|
|
||||||
|
/* renegotiation starts a new set of sequence numbers */
|
||||||
|
DTLS1_BITMAP next_bitmap;
|
||||||
|
|
||||||
|
/* handshake message numbers */
|
||||||
|
uint16_t handshake_write_seq;
|
||||||
|
uint16_t next_handshake_write_seq;
|
||||||
|
|
||||||
|
uint16_t handshake_read_seq;
|
||||||
|
|
||||||
|
/* save last sequence number for retransmissions */
|
||||||
|
uint8_t last_write_sequence[8];
|
||||||
|
|
||||||
|
/* Received handshake records (processed and unprocessed) */
|
||||||
|
record_pqueue unprocessed_rcds;
|
||||||
|
record_pqueue processed_rcds;
|
||||||
|
|
||||||
|
/* Buffered handshake messages */
|
||||||
|
pqueue buffered_messages;
|
||||||
|
|
||||||
|
/* Buffered (sent) handshake records */
|
||||||
|
pqueue sent_messages;
|
||||||
|
|
||||||
|
/* Buffered application records. Only for records between CCS and Finished to
|
||||||
|
* prevent either protocol violation or unnecessary message loss. */
|
||||||
|
record_pqueue buffered_app_data;
|
||||||
|
|
||||||
|
unsigned int mtu; /* max DTLS packet size */
|
||||||
|
|
||||||
|
struct hm_header_st w_msg_hdr;
|
||||||
|
struct hm_header_st r_msg_hdr;
|
||||||
|
|
||||||
|
/* num_timeouts is the number of times the retransmit timer has fired since
|
||||||
|
* the last time it was reset. */
|
||||||
|
unsigned int num_timeouts;
|
||||||
|
|
||||||
|
/* Indicates when the last handshake msg or heartbeat sent will
|
||||||
|
* timeout. Because of header issues on Windows, this cannot actually be a
|
||||||
|
* struct timeval. */
|
||||||
|
OPENSSL_timeval next_timeout;
|
||||||
|
|
||||||
|
/* Timeout duration */
|
||||||
|
unsigned short timeout_duration;
|
||||||
|
|
||||||
|
/* storage for Alert/Handshake protocol data received but not yet processed by
|
||||||
|
* ssl3_read_bytes: */
|
||||||
|
uint8_t alert_fragment[DTLS1_AL_HEADER_LENGTH];
|
||||||
|
unsigned int alert_fragment_len;
|
||||||
|
uint8_t handshake_fragment[DTLS1_HM_HEADER_LENGTH];
|
||||||
|
unsigned int handshake_fragment_len;
|
||||||
|
|
||||||
|
unsigned int change_cipher_spec_ok;
|
||||||
|
} DTLS1_STATE;
|
||||||
|
|
||||||
|
typedef struct dtls1_record_data_st {
|
||||||
|
uint8_t *packet;
|
||||||
|
unsigned int packet_length;
|
||||||
|
SSL3_BUFFER rbuf;
|
||||||
|
SSL3_RECORD rrec;
|
||||||
|
} DTLS1_RECORD_DATA;
|
||||||
|
|
||||||
|
|
||||||
typedef struct dtls1_bitmap_st
|
#ifdef __cplusplus
|
||||||
{
|
} /* extern C */
|
||||||
/* map is a bit mask of the last 64 sequence numbers. Bit
|
|
||||||
* |1<<i| corresponds to |max_seq_num - i|. */
|
|
||||||
uint64_t map;
|
|
||||||
/* max_seq_num is the largest sequence number seen so far. It
|
|
||||||
* is a 64-bit value in big-endian encoding. */
|
|
||||||
uint8_t max_seq_num[8];
|
|
||||||
} DTLS1_BITMAP;
|
|
||||||
|
|
||||||
struct dtls1_retransmit_state
|
|
||||||
{
|
|
||||||
SSL_AEAD_CTX *aead_write_ctx;
|
|
||||||
SSL_SESSION *session;
|
|
||||||
unsigned short epoch;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct hm_header_st
|
|
||||||
{
|
|
||||||
unsigned char type;
|
|
||||||
unsigned long msg_len;
|
|
||||||
unsigned short seq;
|
|
||||||
unsigned long frag_off;
|
|
||||||
unsigned long frag_len;
|
|
||||||
unsigned int is_ccs;
|
|
||||||
struct dtls1_retransmit_state saved_retransmit_state;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct ccs_header_st
|
|
||||||
{
|
|
||||||
unsigned char type;
|
|
||||||
unsigned short seq;
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct record_pqueue_st
|
|
||||||
{
|
|
||||||
unsigned short epoch;
|
|
||||||
pqueue q;
|
|
||||||
} record_pqueue;
|
|
||||||
|
|
||||||
typedef struct hm_fragment_st
|
|
||||||
{
|
|
||||||
struct hm_header_st msg_header;
|
|
||||||
unsigned char *fragment;
|
|
||||||
unsigned char *reassembly;
|
|
||||||
} hm_fragment;
|
|
||||||
|
|
||||||
typedef struct dtls1_state_st
|
|
||||||
{
|
|
||||||
/* send_cookie is true if we are resending the ClientHello
|
|
||||||
* with a cookie from a HelloVerifyRequest. */
|
|
||||||
unsigned int send_cookie;
|
|
||||||
|
|
||||||
uint8_t cookie[DTLS1_COOKIE_LENGTH];
|
|
||||||
size_t cookie_len;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The current data and handshake epoch. This is initially
|
|
||||||
* undefined, and starts at zero once the initial handshake is
|
|
||||||
* completed
|
|
||||||
*/
|
|
||||||
unsigned short r_epoch;
|
|
||||||
unsigned short w_epoch;
|
|
||||||
|
|
||||||
/* records being received in the current epoch */
|
|
||||||
DTLS1_BITMAP bitmap;
|
|
||||||
|
|
||||||
/* renegotiation starts a new set of sequence numbers */
|
|
||||||
DTLS1_BITMAP next_bitmap;
|
|
||||||
|
|
||||||
/* handshake message numbers */
|
|
||||||
unsigned short handshake_write_seq;
|
|
||||||
unsigned short next_handshake_write_seq;
|
|
||||||
|
|
||||||
unsigned short handshake_read_seq;
|
|
||||||
|
|
||||||
/* save last sequence number for retransmissions */
|
|
||||||
unsigned char last_write_sequence[8];
|
|
||||||
|
|
||||||
/* Received handshake records (processed and unprocessed) */
|
|
||||||
record_pqueue unprocessed_rcds;
|
|
||||||
record_pqueue processed_rcds;
|
|
||||||
|
|
||||||
/* Buffered handshake messages */
|
|
||||||
pqueue buffered_messages;
|
|
||||||
|
|
||||||
/* Buffered (sent) handshake records */
|
|
||||||
pqueue sent_messages;
|
|
||||||
|
|
||||||
/* Buffered application records.
|
|
||||||
* Only for records between CCS and Finished
|
|
||||||
* to prevent either protocol violation or
|
|
||||||
* unnecessary message loss.
|
|
||||||
*/
|
|
||||||
record_pqueue buffered_app_data;
|
|
||||||
|
|
||||||
unsigned int mtu; /* max DTLS packet size */
|
|
||||||
|
|
||||||
struct hm_header_st w_msg_hdr;
|
|
||||||
struct hm_header_st r_msg_hdr;
|
|
||||||
|
|
||||||
/* num_timeouts is the number of times the retransmit timer
|
|
||||||
* has fired since the last time it was reset. */
|
|
||||||
unsigned int num_timeouts;
|
|
||||||
|
|
||||||
/* Indicates when the last handshake msg or heartbeat sent will
|
|
||||||
* timeout. Because of header issues on Windows, this cannot actually
|
|
||||||
* be a struct timeval. */
|
|
||||||
OPENSSL_timeval next_timeout;
|
|
||||||
|
|
||||||
/* Timeout duration */
|
|
||||||
unsigned short timeout_duration;
|
|
||||||
|
|
||||||
/* storage for Alert/Handshake protocol data received but not
|
|
||||||
* yet processed by ssl3_read_bytes: */
|
|
||||||
unsigned char alert_fragment[DTLS1_AL_HEADER_LENGTH];
|
|
||||||
unsigned int alert_fragment_len;
|
|
||||||
unsigned char handshake_fragment[DTLS1_HM_HEADER_LENGTH];
|
|
||||||
unsigned int handshake_fragment_len;
|
|
||||||
|
|
||||||
unsigned int change_cipher_spec_ok;
|
|
||||||
} DTLS1_STATE;
|
|
||||||
|
|
||||||
typedef struct dtls1_record_data_st
|
|
||||||
{
|
|
||||||
unsigned char *packet;
|
|
||||||
unsigned int packet_length;
|
|
||||||
SSL3_BUFFER rbuf;
|
|
||||||
SSL3_RECORD rrec;
|
|
||||||
} DTLS1_RECORD_DATA;
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#endif /* OPENSSL_HEADER_DTLS1_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user