Reformatting of several DTLS source files.

This change has no semantic effect (I hope!). It's just a reformatting
of a few files in ssl/. This is just a start – the other files in ssl/
should follow in the coming days.

Change-Id: I5eb3f4b18d0d46349d0f94d3fe5ab2003db5364e
diff --git a/ssl/d1_both.c b/ssl/d1_both.c
index c75bad8..dec9bc4 100644
--- a/ssl/d1_both.c
+++ b/ssl/d1_both.c
@@ -128,809 +128,768 @@
 
 #define RSMBLY_BITMASK_SIZE(msg_len) (((msg_len) + 7) / 8)
 
-#define RSMBLY_BITMASK_MARK(bitmask, start, end) { \
-			if ((end) - (start) <= 8) { \
-				long ii; \
-				for (ii = (start); ii < (end); ii++) bitmask[((ii) >> 3)] |= (1 << ((ii) & 7)); \
-			} else { \
-				long ii; \
-				bitmask[((start) >> 3)] |= bitmask_start_values[((start) & 7)]; \
-				for (ii = (((start) >> 3) + 1); ii < ((((end) - 1)) >> 3); ii++) bitmask[ii] = 0xff; \
-				bitmask[(((end) - 1) >> 3)] |= bitmask_end_values[((end) & 7)]; \
-			} }
+#define RSMBLY_BITMASK_MARK(bitmask, start, end)                     \
+  {                                                                  \
+    if ((end) - (start) <= 8) {                                      \
+      long ii;                                                       \
+      for (ii = (start); ii < (end); ii++)                           \
+        bitmask[((ii) >> 3)] |= (1 << ((ii)&7));                     \
+    } else {                                                         \
+      long ii;                                                       \
+      bitmask[((start) >> 3)] |= bitmask_start_values[((start)&7)];  \
+      for (ii = (((start) >> 3) + 1); ii < ((((end)-1)) >> 3); ii++) \
+        bitmask[ii] = 0xff;                                          \
+      bitmask[(((end)-1) >> 3)] |= bitmask_end_values[((end)&7)];    \
+    }                                                                \
+  }
 
-#define RSMBLY_BITMASK_IS_COMPLETE(bitmask, msg_len, is_complete) { \
-			long ii; \
-			assert((msg_len) > 0); \
-			is_complete = 1; \
-			if (bitmask[(((msg_len) - 1) >> 3)] != bitmask_end_values[((msg_len) & 7)]) is_complete = 0; \
-			if (is_complete) for (ii = (((msg_len) - 1) >> 3) - 1; ii >= 0 ; ii--) \
-				if (bitmask[ii] != 0xff) { is_complete = 0; break; } }
+#define RSMBLY_BITMASK_IS_COMPLETE(bitmask, msg_len, is_complete)           \
+  {                                                                         \
+    long ii;                                                                \
+    assert((msg_len) > 0);                                                  \
+    is_complete = 1;                                                        \
+    if (bitmask[(((msg_len)-1) >> 3)] != bitmask_end_values[((msg_len)&7)]) \
+      is_complete = 0;                                                      \
+    if (is_complete)                                                        \
+      for (ii = (((msg_len)-1) >> 3) - 1; ii >= 0; ii--)                    \
+        if (bitmask[ii] != 0xff) {                                          \
+          is_complete = 0;                                                  \
+          break;                                                            \
+        }                                                                   \
+  }
 
-#if 0
-#define RSMBLY_BITMASK_PRINT(bitmask, msg_len) { \
-			long ii; \
-			printf("bitmask: "); for (ii = 0; ii < (msg_len); ii++) \
-			printf("%d ", (bitmask[ii >> 3] & (1 << (ii & 7))) >> (ii & 7)); \
-			printf("\n"); }
-#endif
-
-static const uint8_t bitmask_start_values[] = {0xff, 0xfe, 0xfc, 0xf8, 0xf0, 0xe0, 0xc0, 0x80};
-static const uint8_t bitmask_end_values[]   = {0xff, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f};
+static const uint8_t bitmask_start_values[] = {0xff, 0xfe, 0xfc, 0xf8,
+                                               0xf0, 0xe0, 0xc0, 0x80};
+static const uint8_t bitmask_end_values[] = {0xff, 0x01, 0x03, 0x07,
+                                             0x0f, 0x1f, 0x3f, 0x7f};
 
 /* XDTLS:  figure out the right values */
 static const unsigned int g_probable_mtu[] = {1500 - 28, 512 - 28, 256 - 28};
 
 static unsigned int dtls1_guess_mtu(unsigned int curr_mtu);
-static void dtls1_fix_message_header(SSL *s, unsigned long frag_off, 
-	unsigned long frag_len);
-static unsigned char *dtls1_write_message_header(SSL *s,
-	unsigned char *p);
+static void dtls1_fix_message_header(SSL *s, unsigned long frag_off,
+                                     unsigned long frag_len);
+static unsigned char *dtls1_write_message_header(SSL *s, unsigned char *p);
 static void dtls1_set_message_header_int(SSL *s, unsigned char mt,
-	unsigned long len, unsigned short seq_num, unsigned long frag_off, 
-	unsigned long frag_len);
-static long dtls1_get_message_fragment(SSL *s, int stn, 
-	long max, int *ok);
+                                         unsigned long len,
+                                         unsigned short seq_num,
+                                         unsigned long frag_off,
+                                         unsigned long frag_len);
+static long dtls1_get_message_fragment(SSL *s, int stn, long max, int *ok);
 
-static hm_fragment *
-dtls1_hm_fragment_new(unsigned long frag_len, int reassembly)
-	{
-	hm_fragment *frag = NULL;
-	unsigned char *buf = NULL;
-	unsigned char *bitmask = NULL;
+static hm_fragment *dtls1_hm_fragment_new(unsigned long frag_len,
+                                          int reassembly) {
+  hm_fragment *frag = NULL;
+  unsigned char *buf = NULL;
+  unsigned char *bitmask = NULL;
 
-	frag = (hm_fragment *)OPENSSL_malloc(sizeof(hm_fragment));
-	if ( frag == NULL)
-		return NULL;
+  frag = (hm_fragment *)OPENSSL_malloc(sizeof(hm_fragment));
+  if (frag == NULL) {
+    return NULL;
+  }
 
-	if (frag_len)
-		{
-		buf = (unsigned char *)OPENSSL_malloc(frag_len);
-		if ( buf == NULL)
-			{
-			OPENSSL_free(frag);
-			return NULL;
-			}
-		}
+  if (frag_len) {
+    buf = (unsigned char *)OPENSSL_malloc(frag_len);
+    if (buf == NULL) {
+      OPENSSL_free(frag);
+      return NULL;
+    }
+  }
 
-	/* zero length fragment gets zero frag->fragment */
-	frag->fragment = buf;
+  /* zero length fragment gets zero frag->fragment */
+  frag->fragment = buf;
 
-	/* Initialize reassembly bitmask if necessary */
-	if (reassembly)
-		{
-		bitmask = (unsigned char *)OPENSSL_malloc(RSMBLY_BITMASK_SIZE(frag_len));
-		if (bitmask == NULL)
-			{
-			if (buf != NULL) OPENSSL_free(buf);
-			OPENSSL_free(frag);
-			return NULL;
-			}
-		memset(bitmask, 0, RSMBLY_BITMASK_SIZE(frag_len));
-		}
+  /* Initialize reassembly bitmask if necessary */
+  if (reassembly) {
+    bitmask = (unsigned char *)OPENSSL_malloc(RSMBLY_BITMASK_SIZE(frag_len));
+    if (bitmask == NULL) {
+      if (buf != NULL) {
+        OPENSSL_free(buf);
+      }
+      OPENSSL_free(frag);
+      return NULL;
+    }
+    memset(bitmask, 0, RSMBLY_BITMASK_SIZE(frag_len));
+  }
 
-	frag->reassembly = bitmask;
+  frag->reassembly = bitmask;
 
-	return frag;
-	}
+  return frag;
+}
 
-void dtls1_hm_fragment_free(hm_fragment *frag)
-	{
+void dtls1_hm_fragment_free(hm_fragment *frag) {
+  if (frag->msg_header.is_ccs) {
+    EVP_CIPHER_CTX_free(frag->msg_header.saved_retransmit_state.enc_write_ctx);
+    EVP_MD_CTX_destroy(frag->msg_header.saved_retransmit_state.write_hash);
+  }
+  if (frag->fragment) {
+    OPENSSL_free(frag->fragment);
+  }
+  if (frag->reassembly) {
+    OPENSSL_free(frag->reassembly);
+  }
+  OPENSSL_free(frag);
+}
 
-	if (frag->msg_header.is_ccs)
-		{
-		EVP_CIPHER_CTX_free(frag->msg_header.saved_retransmit_state.enc_write_ctx);
-		EVP_MD_CTX_destroy(frag->msg_header.saved_retransmit_state.write_hash);
-		}
-	if (frag->fragment) OPENSSL_free(frag->fragment);
-	if (frag->reassembly) OPENSSL_free(frag->reassembly);
-	OPENSSL_free(frag);
-	}
+/* send s->init_buf in records of type 'type' (SSL3_RT_HANDSHAKE or
+ * SSL3_RT_CHANGE_CIPHER_SPEC) */
+int dtls1_do_write(
+    SSL *s, int type,
+    enum should_add_to_finished_hash should_add_to_finished_hash) {
+  int ret;
+  int curr_mtu;
+  unsigned int len, frag_off, mac_size = 0, blocksize = 0;
 
-/* send s->init_buf in records of type 'type' (SSL3_RT_HANDSHAKE or SSL3_RT_CHANGE_CIPHER_SPEC) */
-int dtls1_do_write(SSL *s, int type, enum should_add_to_finished_hash should_add_to_finished_hash)
-	{
-	int ret;
-	int curr_mtu;
-	unsigned int len, frag_off, mac_size, blocksize;
+  /* AHA!  Figure out the MTU, and stick to the right size */
+  if (s->d1->mtu < dtls1_min_mtu() &&
+      !(SSL_get_options(s) & SSL_OP_NO_QUERY_MTU)) {
+    s->d1->mtu = BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_QUERY_MTU, 0, NULL);
 
-	/* AHA!  Figure out the MTU, and stick to the right size */
-	if (s->d1->mtu < dtls1_min_mtu() && !(SSL_get_options(s) & SSL_OP_NO_QUERY_MTU))
-		{
-		s->d1->mtu = 
-			BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_QUERY_MTU, 0, NULL);
+    /* I've seen the kernel return bogus numbers when it doesn't know
+     * (initial write), so just make sure we have a reasonable number */
+    if (s->d1->mtu < dtls1_min_mtu()) {
+      s->d1->mtu = 0;
+      s->d1->mtu = dtls1_guess_mtu(s->d1->mtu);
+      BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SET_MTU, s->d1->mtu, NULL);
+    }
+  }
 
-		/* I've seen the kernel return bogus numbers when it doesn't know
-		 * (initial write), so just make sure we have a reasonable number */
-		if (s->d1->mtu < dtls1_min_mtu())
-			{
-			s->d1->mtu = 0;
-			s->d1->mtu = dtls1_guess_mtu(s->d1->mtu);
-			BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SET_MTU, 
-				s->d1->mtu, NULL);
-			}
-		}
-#if 0 
-	mtu = s->d1->mtu;
+  /* should have something reasonable now */
+  assert(s->d1->mtu >= dtls1_min_mtu());
 
-	fprintf(stderr, "using MTU = %d\n", mtu);
+  if (s->init_off == 0 && type == SSL3_RT_HANDSHAKE) {
+    assert(s->init_num ==
+           (int)s->d1->w_msg_hdr.msg_len + DTLS1_HM_HEADER_LENGTH);
+  }
 
-	mtu -= (DTLS1_HM_HEADER_LENGTH + DTLS1_RT_HEADER_LENGTH);
+  if (s->write_hash &&
+      (s->enc_write_ctx == NULL ||
+       EVP_CIPHER_CTX_mode(s->enc_write_ctx) != EVP_CIPH_GCM_MODE)) {
+    mac_size = EVP_MD_CTX_size(s->write_hash);
+  }
 
-	curr_mtu = mtu - BIO_wpending(SSL_get_wbio(s));
+  if (s->enc_write_ctx &&
+      (EVP_CIPHER_CTX_mode(s->enc_write_ctx) == EVP_CIPH_CBC_MODE)) {
+    blocksize = 2 * EVP_CIPHER_block_size(s->enc_write_ctx->cipher);
+  }
 
-	if ( curr_mtu > 0)
-		mtu = curr_mtu;
-	else if ( ( ret = BIO_flush(SSL_get_wbio(s))) <= 0)
-		return ret;
+  frag_off = 0;
+  while (s->init_num) {
+    curr_mtu = s->d1->mtu - BIO_wpending(SSL_get_wbio(s)) -
+               DTLS1_RT_HEADER_LENGTH - mac_size - blocksize;
 
-	if ( BIO_wpending(SSL_get_wbio(s)) + s->init_num >= mtu)
-		{
-		ret = BIO_flush(SSL_get_wbio(s));
-		if ( ret <= 0)
-			return ret;
-		mtu = s->d1->mtu - (DTLS1_HM_HEADER_LENGTH + DTLS1_RT_HEADER_LENGTH);
-		}
-#endif
+    if (curr_mtu <= DTLS1_HM_HEADER_LENGTH) {
+      /* grr.. we could get an error if MTU picked was wrong */
+      ret = BIO_flush(SSL_get_wbio(s));
+      if (ret <= 0) {
+        return ret;
+      }
+      curr_mtu = s->d1->mtu - DTLS1_RT_HEADER_LENGTH - mac_size - blocksize;
+    }
 
-	assert(s->d1->mtu >= dtls1_min_mtu());  /* should have something reasonable now */
+    if (s->init_num > curr_mtu) {
+      len = curr_mtu;
+    } else {
+      len = s->init_num;
+    }
 
-	if ( s->init_off == 0  && type == SSL3_RT_HANDSHAKE)
-		assert(s->init_num == 
-			(int)s->d1->w_msg_hdr.msg_len + DTLS1_HM_HEADER_LENGTH);
+    /* XDTLS: this function is too long.  split out the CCS part */
+    if (type == SSL3_RT_HANDSHAKE) {
+      if (s->init_off != 0) {
+        assert(s->init_off > DTLS1_HM_HEADER_LENGTH);
+        s->init_off -= DTLS1_HM_HEADER_LENGTH;
+        s->init_num += DTLS1_HM_HEADER_LENGTH;
 
-	if (s->write_hash)
-		{
-		if (s->enc_write_ctx && EVP_CIPHER_CTX_mode(s->enc_write_ctx) == EVP_CIPH_GCM_MODE)
-			mac_size = 0;
-		else
-			mac_size = EVP_MD_CTX_size(s->write_hash);
-		}
-	else
-		mac_size = 0;
+        if (s->init_num > curr_mtu) {
+          len = curr_mtu;
+        } else {
+          len = s->init_num;
+        }
+      }
 
-	if (s->enc_write_ctx && 
-		(EVP_CIPHER_CTX_mode(s->enc_write_ctx) == EVP_CIPH_CBC_MODE))
-		blocksize = 2 * EVP_CIPHER_block_size(s->enc_write_ctx->cipher);
-	else
-		blocksize = 0;
+      dtls1_fix_message_header(s, frag_off, len - DTLS1_HM_HEADER_LENGTH);
 
-	frag_off = 0;
-	while( s->init_num)
-		{
-		curr_mtu = s->d1->mtu - BIO_wpending(SSL_get_wbio(s)) - 
-			DTLS1_RT_HEADER_LENGTH - mac_size - blocksize;
+      dtls1_write_message_header(
+          s, (uint8_t *)&s->init_buf->data[s->init_off]);
 
-		if ( curr_mtu <= DTLS1_HM_HEADER_LENGTH)
-			{
-			/* grr.. we could get an error if MTU picked was wrong */
-			ret = BIO_flush(SSL_get_wbio(s));
-			if ( ret <= 0)
-				return ret;
-			curr_mtu = s->d1->mtu - DTLS1_RT_HEADER_LENGTH -
-				mac_size - blocksize;
-			}
+      assert(len >= DTLS1_HM_HEADER_LENGTH);
+    }
 
-		if ( s->init_num > curr_mtu)
-			len = curr_mtu;
-		else
-			len = s->init_num;
+    ret = dtls1_write_bytes(s, type, &s->init_buf->data[s->init_off], len);
+    if (ret < 0) {
+      /* might need to update MTU here, but we don't know which previous packet
+       * caused the failure -- so can't really retransmit anything.  continue
+       * as if everything is fine and wait for an alert to handle the
+       * retransmit. */
+      if (BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_MTU_EXCEEDED, 0, NULL) > 0) {
+        s->d1->mtu =
+            BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_QUERY_MTU, 0, NULL);
+      } else {
+        return (-1);
+      }
+    } else {
+      /* bad if this assert fails, only part of the handshake message got sent.
+       * But why would this happen? */
+      assert(len == (unsigned int)ret);
+
+      if (type == SSL3_RT_HANDSHAKE && !s->d1->retransmitting &&
+          should_add_to_finished_hash == add_to_finished_hash) {
+        /* should not be done for 'Hello Request's, but in that case
+         * we'll ignore the result anyway */
+        uint8_t *p = (uint8_t *)&s->init_buf->data[s->init_off];
+        const struct hm_header_st *msg_hdr = &s->d1->w_msg_hdr;
+        int xlen;
+
+        if (frag_off == 0) {
+          /* reconstruct message header is if it
+           * is being sent in single fragment */
+          *p++ = msg_hdr->type;
+          l2n3(msg_hdr->msg_len, p);
+          s2n(msg_hdr->seq, p);
+          l2n3(0, p);
+          l2n3(msg_hdr->msg_len, p);
+          p -= DTLS1_HM_HEADER_LENGTH;
+          xlen = ret;
+        } else {
+          p += DTLS1_HM_HEADER_LENGTH;
+          xlen = ret - DTLS1_HM_HEADER_LENGTH;
+        }
+
+        ssl3_finish_mac(s, p, xlen);
+      }
+
+      if (ret == s->init_num) {
+        if (s->msg_callback) {
+          s->msg_callback(1, s->version, type, s->init_buf->data,
+                          (size_t)(s->init_off + s->init_num), s,
+                          s->msg_callback_arg);
+        }
+
+        s->init_off = 0; /* done writing this message */
+        s->init_num = 0;
+
+        return 1;
+      }
+      s->init_off += ret;
+      s->init_num -= ret;
+      frag_off += (ret -= DTLS1_HM_HEADER_LENGTH);
+    }
+  }
+
+  return 0;
+}
 
 
-		/* XDTLS: this function is too long.  split out the CCS part */
-		if ( type == SSL3_RT_HANDSHAKE)
-			{
-			if ( s->init_off != 0)
-				{
-				assert(s->init_off > DTLS1_HM_HEADER_LENGTH);
-				s->init_off -= DTLS1_HM_HEADER_LENGTH;
-				s->init_num += DTLS1_HM_HEADER_LENGTH;
+/* Obtain handshake message of message type 'mt' (any if mt == -1), maximum
+ * acceptable body length 'max'. Read an entire handshake message. Handshake
+ * messages arrive in fragments. */
+long dtls1_get_message(SSL *s, int st1, int stn, int mt, long max,
+                       int hash_message, int *ok) {
+  int i, al;
+  struct hm_header_st *msg_hdr;
+  uint8_t *p;
+  unsigned long msg_len;
 
-				if ( s->init_num > curr_mtu)
-					len = curr_mtu;
-				else
-					len = s->init_num;
-				}
+  /* s3->tmp is used to store messages that are unexpected, caused
+   * by the absence of an optional handshake message */
+  if (s->s3->tmp.reuse_message) {
+    /* A SSL_GET_MESSAGE_DONT_HASH_MESSAGE call cannot be combined
+     * with reuse_message; the SSL_GET_MESSAGE_DONT_HASH_MESSAGE
+     * would have to have been applied to the previous call. */
+    assert(hash_message != SSL_GET_MESSAGE_DONT_HASH_MESSAGE);
+    s->s3->tmp.reuse_message = 0;
+    if (mt >= 0 && s->s3->tmp.message_type != mt) {
+      al = SSL_AD_UNEXPECTED_MESSAGE;
+      OPENSSL_PUT_ERROR(SSL, dtls1_get_message, SSL_R_UNEXPECTED_MESSAGE);
+      goto f_err;
+    }
+    *ok = 1;
+    s->init_msg = (uint8_t *)s->init_buf->data + DTLS1_HM_HEADER_LENGTH;
+    s->init_num = (int)s->s3->tmp.message_size;
+    return s->init_num;
+  }
 
-			dtls1_fix_message_header(s, frag_off, 
-				len - DTLS1_HM_HEADER_LENGTH);
-
-			dtls1_write_message_header(s, (unsigned char *)&s->init_buf->data[s->init_off]);
-
-			assert(len >= DTLS1_HM_HEADER_LENGTH);
-			}
-
-		ret=dtls1_write_bytes(s,type,&s->init_buf->data[s->init_off],
-			len);
-		if (ret < 0)
-			{
-			/* might need to update MTU here, but we don't know
-			 * which previous packet caused the failure -- so can't
-			 * really retransmit anything.  continue as if everything
-			 * is fine and wait for an alert to handle the
-			 * retransmit 
-			 */
-			if ( BIO_ctrl(SSL_get_wbio(s),
-				BIO_CTRL_DGRAM_MTU_EXCEEDED, 0, NULL) > 0 )
-				s->d1->mtu = BIO_ctrl(SSL_get_wbio(s),
-					BIO_CTRL_DGRAM_QUERY_MTU, 0, NULL);
-			else
-				return(-1);
-			}
-		else
-			{
-
-			/* bad if this assert fails, only part of the handshake
-			 * message got sent.  but why would this happen? */
-			assert(len == (unsigned int)ret);
-
-			if (type == SSL3_RT_HANDSHAKE && !s->d1->retransmitting &&
-			    should_add_to_finished_hash == add_to_finished_hash)
-				{
-				/* should not be done for 'Hello Request's, but in that case
-				 * we'll ignore the result anyway */
-				unsigned char *p = (unsigned char *)&s->init_buf->data[s->init_off];
-				const struct hm_header_st *msg_hdr = &s->d1->w_msg_hdr;
-				int xlen;
-
-				if (frag_off == 0)
-					{
-					/* reconstruct message header is if it
-					 * is being sent in single fragment */
-					*p++ = msg_hdr->type;
-					l2n3(msg_hdr->msg_len,p);
-					s2n (msg_hdr->seq,p);
-					l2n3(0,p);
-					l2n3(msg_hdr->msg_len,p);
-					p  -= DTLS1_HM_HEADER_LENGTH;
-					xlen = ret;
-					}
-				else
-					{
-					p  += DTLS1_HM_HEADER_LENGTH;
-					xlen = ret - DTLS1_HM_HEADER_LENGTH;
-					}
-
-				ssl3_finish_mac(s, p, xlen);
-				}
-
-			if (ret == s->init_num)
-				{
-				if (s->msg_callback)
-					s->msg_callback(1, s->version, type, s->init_buf->data, 
-						(size_t)(s->init_off + s->init_num), s, 
-						s->msg_callback_arg);
-
-				s->init_off = 0;  /* done writing this message */
-				s->init_num = 0;
-
-				return(1);
-				}
-			s->init_off+=ret;
-			s->init_num-=ret;
-			frag_off += (ret -= DTLS1_HM_HEADER_LENGTH);
-			}
-		}
-	return(0);
-	}
-
-
-/* Obtain handshake message of message type 'mt' (any if mt == -1),
- * maximum acceptable body length 'max'.
- * Read an entire handshake message.  Handshake messages arrive in
- * fragments.
- */
-long dtls1_get_message(SSL *s, int st1, int stn, int mt, long max, int hash_message, int *ok)
-	{
-	int i, al;
-	struct hm_header_st *msg_hdr;
-	unsigned char *p;
-	unsigned long msg_len;
-
-	/* s3->tmp is used to store messages that are unexpected, caused
-	 * by the absence of an optional handshake message */
-	if (s->s3->tmp.reuse_message)
-		{
-		/* A SSL_GET_MESSAGE_DONT_HASH_MESSAGE call cannot be combined
-		 * with reuse_message; the SSL_GET_MESSAGE_DONT_HASH_MESSAGE
-		 * would have to have been applied to the previous call. */
-		assert(hash_message != SSL_GET_MESSAGE_DONT_HASH_MESSAGE);
-		s->s3->tmp.reuse_message=0;
-		if ((mt >= 0) && (s->s3->tmp.message_type != mt))
-			{
-			al=SSL_AD_UNEXPECTED_MESSAGE;
-			OPENSSL_PUT_ERROR(SSL, dtls1_get_message, SSL_R_UNEXPECTED_MESSAGE);
-			goto f_err;
-			}
-		*ok=1;
-		s->init_msg = (uint8_t*)s->init_buf->data + DTLS1_HM_HEADER_LENGTH;
-		s->init_num = (int)s->s3->tmp.message_size;
-		return s->init_num;
-		}
-
-	msg_hdr = &s->d1->r_msg_hdr;
-	memset(msg_hdr, 0x00, sizeof(struct hm_header_st));
+  msg_hdr = &s->d1->r_msg_hdr;
+  memset(msg_hdr, 0x00, sizeof(struct hm_header_st));
 
 again:
-	i = dtls1_get_message_fragment(s, stn, max, ok);
-	if ( i == DTLS1_HM_BAD_FRAGMENT ||
-		i == DTLS1_HM_FRAGMENT_RETRY)  /* bad fragment received */
-		goto again;
-	else if ( i <= 0 && !*ok)
-		return i;
+  i = dtls1_get_message_fragment(s, stn, max, ok);
+  if (i == DTLS1_HM_BAD_FRAGMENT ||
+      i == DTLS1_HM_FRAGMENT_RETRY) {
+    /* bad fragment received */
+    goto again;
+  } else if (i <= 0 && !*ok) {
+    return i;
+  }
 
-	p = (unsigned char *)s->init_buf->data;
-	msg_len = msg_hdr->msg_len;
+  p = (uint8_t *)s->init_buf->data;
+  msg_len = msg_hdr->msg_len;
 
-	/* reconstruct message header */
-	*(p++) = msg_hdr->type;
-	l2n3(msg_len,p);
-	s2n (msg_hdr->seq,p);
-	l2n3(0,p);
-	l2n3(msg_len,p);
-	p       -= DTLS1_HM_HEADER_LENGTH;
-	msg_len += DTLS1_HM_HEADER_LENGTH;
+  /* reconstruct message header */
+  *(p++) = msg_hdr->type;
+  l2n3(msg_len, p);
+  s2n(msg_hdr->seq, p);
+  l2n3(0, p);
+  l2n3(msg_len, p);
+  p -= DTLS1_HM_HEADER_LENGTH;
+  msg_len += DTLS1_HM_HEADER_LENGTH;
 
-	s->init_msg = (uint8_t*)s->init_buf->data + DTLS1_HM_HEADER_LENGTH;
+  s->init_msg = (uint8_t *)s->init_buf->data + DTLS1_HM_HEADER_LENGTH;
 
-	if (hash_message != SSL_GET_MESSAGE_DONT_HASH_MESSAGE)
-		ssl3_hash_current_message(s);
-	if (s->msg_callback)
-		s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE,
-			p, msg_len,
-			s, s->msg_callback_arg);
+  if (hash_message != SSL_GET_MESSAGE_DONT_HASH_MESSAGE) {
+    ssl3_hash_current_message(s);
+  }
+  if (s->msg_callback) {
+    s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE, p, msg_len, s,
+                    s->msg_callback_arg);
+  }
 
-	memset(msg_hdr, 0x00, sizeof(struct hm_header_st));
+  memset(msg_hdr, 0x00, sizeof(struct hm_header_st));
 
-	s->d1->handshake_read_seq++;
+  s->d1->handshake_read_seq++;
 
-	return s->init_num;
+  return s->init_num;
 
 f_err:
-	ssl3_send_alert(s,SSL3_AL_FATAL,al);
-	*ok = 0;
-	return -1;
-	}
+  ssl3_send_alert(s, SSL3_AL_FATAL, al);
+  *ok = 0;
+  return -1;
+}
+
+static int dtls1_preprocess_fragment(SSL *s, struct hm_header_st *msg_hdr,
+                                     int max) {
+  size_t frag_off, frag_len, msg_len;
+
+  msg_len = msg_hdr->msg_len;
+  frag_off = msg_hdr->frag_off;
+  frag_len = msg_hdr->frag_len;
+
+  /* sanity checking */
+  if ((frag_off + frag_len) > msg_len) {
+    OPENSSL_PUT_ERROR(SSL, dtls1_preprocess_fragment,
+                      SSL_R_EXCESSIVE_MESSAGE_SIZE);
+    return SSL_AD_ILLEGAL_PARAMETER;
+  }
+
+  if ((frag_off + frag_len) > (unsigned long)max) {
+    OPENSSL_PUT_ERROR(SSL, dtls1_preprocess_fragment,
+                      SSL_R_EXCESSIVE_MESSAGE_SIZE);
+    return SSL_AD_ILLEGAL_PARAMETER;
+  }
+
+  if (s->d1->r_msg_hdr.frag_off == 0) {
+    /* first fragment */
+    /* msg_len is limited to 2^24, but is effectively checked
+     * against max above */
+    if (!BUF_MEM_grow_clean(s->init_buf, msg_len + DTLS1_HM_HEADER_LENGTH)) {
+      OPENSSL_PUT_ERROR(SSL, dtls1_preprocess_fragment, ERR_R_BUF_LIB);
+      return SSL_AD_INTERNAL_ERROR;
+    }
+
+    s->s3->tmp.message_size = msg_len;
+    s->d1->r_msg_hdr.msg_len = msg_len;
+    s->s3->tmp.message_type = msg_hdr->type;
+    s->d1->r_msg_hdr.type = msg_hdr->type;
+    s->d1->r_msg_hdr.seq = msg_hdr->seq;
+  } else if (msg_len != s->d1->r_msg_hdr.msg_len) {
+    /* They must be playing with us! BTW, failure to enforce
+     * upper limit would open possibility for buffer overrun. */
+    OPENSSL_PUT_ERROR(SSL, dtls1_preprocess_fragment,
+                      SSL_R_EXCESSIVE_MESSAGE_SIZE);
+    return SSL_AD_ILLEGAL_PARAMETER;
+  }
+
+  return 0; /* no error */
+}
 
 
-static int dtls1_preprocess_fragment(SSL *s,struct hm_header_st *msg_hdr,int max)
-	{
-	size_t frag_off,frag_len,msg_len;
+static int dtls1_retrieve_buffered_fragment(SSL *s, long max, int *ok) {
+  /* (0) check whether the desired fragment is available
+   * if so:
+   * (1) copy over the fragment to s->init_buf->data[]
+   * (2) update s->init_num */
+  pitem *item;
+  hm_fragment *frag;
+  int al;
+  unsigned long frag_len;
 
-	msg_len  = msg_hdr->msg_len;
-	frag_off = msg_hdr->frag_off;
-	frag_len = msg_hdr->frag_len;
+  *ok = 0;
+  item = pqueue_peek(s->d1->buffered_messages);
+  if (item == NULL) {
+    return 0;
+  }
 
-	/* sanity checking */
-	if ( (frag_off+frag_len) > msg_len)
-		{
-		OPENSSL_PUT_ERROR(SSL, dtls1_preprocess_fragment, SSL_R_EXCESSIVE_MESSAGE_SIZE);
-		return SSL_AD_ILLEGAL_PARAMETER;
-		}
+  frag = (hm_fragment *)item->data;
 
-	if ( (frag_off+frag_len) > (unsigned long)max)
-		{
-		OPENSSL_PUT_ERROR(SSL, dtls1_preprocess_fragment, SSL_R_EXCESSIVE_MESSAGE_SIZE);
-		return SSL_AD_ILLEGAL_PARAMETER;
-		}
+  /* Don't return if reassembly still in progress */
+  if (frag->reassembly != NULL) {
+    return 0;
+  }
 
-	if ( s->d1->r_msg_hdr.frag_off == 0) /* first fragment */
-		{
-		/* msg_len is limited to 2^24, but is effectively checked
-		 * against max above */
-		if (!BUF_MEM_grow_clean(s->init_buf,msg_len+DTLS1_HM_HEADER_LENGTH))
-			{
-			OPENSSL_PUT_ERROR(SSL, dtls1_preprocess_fragment, ERR_R_BUF_LIB);
-			return SSL_AD_INTERNAL_ERROR;
-			}
+  if (s->d1->handshake_read_seq != frag->msg_header.seq) {
+    return 0;
+  }
 
-		s->s3->tmp.message_size  = msg_len;
-		s->d1->r_msg_hdr.msg_len = msg_len;
-		s->s3->tmp.message_type  = msg_hdr->type;
-		s->d1->r_msg_hdr.type    = msg_hdr->type;
-		s->d1->r_msg_hdr.seq     = msg_hdr->seq;
-		}
-	else if (msg_len != s->d1->r_msg_hdr.msg_len)
-		{
-		/* They must be playing with us! BTW, failure to enforce
-		 * upper limit would open possibility for buffer overrun. */
-		OPENSSL_PUT_ERROR(SSL, dtls1_preprocess_fragment, SSL_R_EXCESSIVE_MESSAGE_SIZE);
-		return SSL_AD_ILLEGAL_PARAMETER;
-		}
+  frag_len = frag->msg_header.frag_len;
+  pqueue_pop(s->d1->buffered_messages);
 
-	return 0; /* no error */
-	}
+  al = dtls1_preprocess_fragment(s, &frag->msg_header, max);
 
+  if (al == 0) {
+    /* no alert */
+    uint8_t *p = (uint8_t *)s->init_buf->data + DTLS1_HM_HEADER_LENGTH;
+    memcpy(&p[frag->msg_header.frag_off], frag->fragment,
+           frag->msg_header.frag_len);
+  }
 
-static int
-dtls1_retrieve_buffered_fragment(SSL *s, long max, int *ok)
-	{
-	/* (0) check whether the desired fragment is available
-	 * if so:
-	 * (1) copy over the fragment to s->init_buf->data[]
-	 * (2) update s->init_num
-	 */
-	pitem *item;
-	hm_fragment *frag;
-	int al;
+  dtls1_hm_fragment_free(frag);
+  pitem_free(item);
 
-	*ok = 0;
-	item = pqueue_peek(s->d1->buffered_messages);
-	if ( item == NULL)
-		return 0;
+  if (al == 0) {
+    *ok = 1;
+    return frag_len;
+  }
 
-	frag = (hm_fragment *)item->data;
-	
-	/* Don't return if reassembly still in progress */
-	if (frag->reassembly != NULL)
-		return 0;
-
-	if ( s->d1->handshake_read_seq == frag->msg_header.seq)
-		{
-		unsigned long frag_len = frag->msg_header.frag_len;
-		pqueue_pop(s->d1->buffered_messages);
-
-		al=dtls1_preprocess_fragment(s,&frag->msg_header,max);
-
-		if (al==0) /* no alert */
-			{
-			unsigned char *p = (unsigned char *)s->init_buf->data+DTLS1_HM_HEADER_LENGTH;
-			memcpy(&p[frag->msg_header.frag_off],
-				frag->fragment,frag->msg_header.frag_len);
-			}
-
-		dtls1_hm_fragment_free(frag);
-		pitem_free(item);
-
-		if (al==0)
-			{
-			*ok = 1;
-			return frag_len;
-			}
-
-		ssl3_send_alert(s,SSL3_AL_FATAL,al);
-		s->init_num = 0;
-		*ok = 0;
-		return -1;
-		}
-	else
-		return 0;
-	}
+  ssl3_send_alert(s, SSL3_AL_FATAL, al);
+  s->init_num = 0;
+  *ok = 0;
+  return -1;
+}
 
 /* dtls1_max_handshake_message_len returns the maximum number of bytes
  * permitted in a DTLS handshake message for |s|. The minimum is 16KB, but may
  * be greater if the maximum certificate list size requires it. */
-static unsigned long dtls1_max_handshake_message_len(const SSL *s)
-	{
-	unsigned long max_len = DTLS1_HM_HEADER_LENGTH + SSL3_RT_MAX_ENCRYPTED_LENGTH;
-	if (max_len < (unsigned long)s->max_cert_list)
-		return s->max_cert_list;
-	return max_len;
-	}
+static unsigned long dtls1_max_handshake_message_len(const SSL *s) {
+  unsigned long max_len = DTLS1_HM_HEADER_LENGTH + SSL3_RT_MAX_ENCRYPTED_LENGTH;
+  if (max_len < (unsigned long)s->max_cert_list) {
+    return s->max_cert_list;
+  }
+  return max_len;
+}
 
-static int
-dtls1_reassemble_fragment(SSL *s, const struct hm_header_st* msg_hdr, int *ok)
-	{
-	hm_fragment *frag = NULL;
-	pitem *item = NULL;
-	int i = -1, is_complete;
-	unsigned char seq64be[8];
-	unsigned long frag_len = msg_hdr->frag_len;
+static int dtls1_reassemble_fragment(SSL *s, const struct hm_header_st *msg_hdr,
+                                     int *ok) {
+  hm_fragment *frag = NULL;
+  pitem *item = NULL;
+  int i = -1, is_complete;
+  uint8_t seq64be[8];
+  unsigned long frag_len = msg_hdr->frag_len;
 
-	if ((msg_hdr->frag_off+frag_len) > msg_hdr->msg_len ||
-	    msg_hdr->msg_len > dtls1_max_handshake_message_len(s))
-		goto err;
+  if ((msg_hdr->frag_off + frag_len) > msg_hdr->msg_len ||
+      msg_hdr->msg_len > dtls1_max_handshake_message_len(s)) {
+    goto err;
+  }
 
-	if (frag_len == 0)
-		return DTLS1_HM_FRAGMENT_RETRY;
+  if (frag_len == 0) {
+    return DTLS1_HM_FRAGMENT_RETRY;
+  }
 
-	/* Try to find item in queue */
-	memset(seq64be,0,sizeof(seq64be));
-	seq64be[6] = (unsigned char) (msg_hdr->seq>>8);
-	seq64be[7] = (unsigned char) msg_hdr->seq;
-	item = pqueue_find(s->d1->buffered_messages, seq64be);
+  /* Try to find item in queue */
+  memset(seq64be, 0, sizeof(seq64be));
+  seq64be[6] = (uint8_t)(msg_hdr->seq >> 8);
+  seq64be[7] = (uint8_t)msg_hdr->seq;
+  item = pqueue_find(s->d1->buffered_messages, seq64be);
 
-	if (item == NULL)
-		{
-		frag = dtls1_hm_fragment_new(msg_hdr->msg_len, 1);
-		if ( frag == NULL)
-			goto err;
-		memcpy(&(frag->msg_header), msg_hdr, sizeof(*msg_hdr));
-		frag->msg_header.frag_len = frag->msg_header.msg_len;
-		frag->msg_header.frag_off = 0;
-		}
-	else
-		{
-		frag = (hm_fragment*) item->data;
-		if (frag->msg_header.msg_len != msg_hdr->msg_len)
-			{
-			item = NULL;
-			frag = NULL;
-			goto err;
-			}
-		}
+  if (item == NULL) {
+    frag = dtls1_hm_fragment_new(msg_hdr->msg_len, 1);
+    if (frag == NULL) {
+      goto err;
+    }
+    memcpy(&(frag->msg_header), msg_hdr, sizeof(*msg_hdr));
+    frag->msg_header.frag_len = frag->msg_header.msg_len;
+    frag->msg_header.frag_off = 0;
+  } else {
+    frag = (hm_fragment *)item->data;
+    if (frag->msg_header.msg_len != msg_hdr->msg_len) {
+      item = NULL;
+      frag = NULL;
+      goto err;
+    }
+  }
 
-	/* If message is already reassembled, this must be a
-	 * retransmit and can be dropped. In this case item != NULL and so frag
-	 * does not need to be freed. */
-	if (frag->reassembly == NULL)
-		{
-		unsigned char devnull [256];
+  /* If message is already reassembled, this must be a
+   * retransmit and can be dropped. In this case item != NULL and so frag
+   * does not need to be freed. */
+  if (frag->reassembly == NULL) {
+    uint8_t devnull[256];
 
-		assert(item != NULL);
-		while (frag_len)
-			{
-			i = s->method->ssl_read_bytes(s,SSL3_RT_HANDSHAKE,
-				devnull,
-				frag_len>sizeof(devnull)?sizeof(devnull):frag_len,0);
-			if (i<=0) goto err;
-			frag_len -= i;
-			}
-		return DTLS1_HM_FRAGMENT_RETRY;
-		}
+    assert(item != NULL);
+    while (frag_len) {
+      i = s->method->ssl_read_bytes(
+          s, SSL3_RT_HANDSHAKE, devnull,
+          frag_len > sizeof(devnull) ? sizeof(devnull) : frag_len, 0);
+      if (i <= 0) {
+        goto err;
+      }
+      frag_len -= i;
+    }
+    return DTLS1_HM_FRAGMENT_RETRY;
+  }
 
-	/* read the body of the fragment (header has already been read */
-	i = s->method->ssl_read_bytes(s,SSL3_RT_HANDSHAKE,
-		frag->fragment + msg_hdr->frag_off,frag_len,0);
-	if ((unsigned long)i!=frag_len)
-		i=-1;
-	if (i<=0)
-		goto err;
+  /* read the body of the fragment (header has already been read */
+  i = s->method->ssl_read_bytes(
+      s, SSL3_RT_HANDSHAKE, frag->fragment + msg_hdr->frag_off, frag_len, 0);
+  if ((unsigned long)i != frag_len) {
+    i = -1;
+  }
+  if (i <= 0) {
+    goto err;
+  }
 
-	RSMBLY_BITMASK_MARK(frag->reassembly, (long)msg_hdr->frag_off,
-	                    (long)(msg_hdr->frag_off + frag_len));
+  RSMBLY_BITMASK_MARK(frag->reassembly, (long)msg_hdr->frag_off,
+                      (long)(msg_hdr->frag_off + frag_len));
 
-	RSMBLY_BITMASK_IS_COMPLETE(frag->reassembly, (long)msg_hdr->msg_len,
-	                           is_complete);
+  RSMBLY_BITMASK_IS_COMPLETE(frag->reassembly, (long)msg_hdr->msg_len,
+                             is_complete);
 
-	if (is_complete)
-		{
-		OPENSSL_free(frag->reassembly);
-		frag->reassembly = NULL;
-		}
+  if (is_complete) {
+    OPENSSL_free(frag->reassembly);
+    frag->reassembly = NULL;
+  }
 
-	if (item == NULL)
-		{
-		item = pitem_new(seq64be, frag);
-		if (item == NULL)
-			{
-			i = -1;
-			goto err;
-			}
+  if (item == NULL) {
+    item = pitem_new(seq64be, frag);
+    if (item == NULL) {
+      i = -1;
+      goto err;
+    }
 
-		item = pqueue_insert(s->d1->buffered_messages, item);
-		/* pqueue_insert fails iff a duplicate item is inserted.
-		 * However, |item| cannot be a duplicate. If it were,
-		 * |pqueue_find|, above, would have returned it and control
-		 * would never have reached this branch. */
-		assert(item != NULL);
-		}
+    item = pqueue_insert(s->d1->buffered_messages, item);
+    /* pqueue_insert fails iff a duplicate item is inserted.
+     * However, |item| cannot be a duplicate. If it were,
+     * |pqueue_find|, above, would have returned it and control
+     * would never have reached this branch. */
+    assert(item != NULL);
+  }
 
-	return DTLS1_HM_FRAGMENT_RETRY;
+  return DTLS1_HM_FRAGMENT_RETRY;
 
 err:
-	if (frag != NULL && item == NULL) dtls1_hm_fragment_free(frag);
-	*ok = 0;
-	return i;
-	}
+  if (frag != NULL && item == NULL) {
+    dtls1_hm_fragment_free(frag);
+  }
+  *ok = 0;
+  return i;
+}
 
+static int dtls1_process_out_of_seq_message(SSL *s,
+                                            const struct hm_header_st *msg_hdr,
+                                            int *ok) {
+  int i = -1;
+  hm_fragment *frag = NULL;
+  pitem *item = NULL;
+  uint8_t seq64be[8];
+  unsigned long frag_len = msg_hdr->frag_len;
 
-static int
-dtls1_process_out_of_seq_message(SSL *s, const struct hm_header_st* msg_hdr, int *ok)
-{
-	int i=-1;
-	hm_fragment *frag = NULL;
-	pitem *item = NULL;
-	unsigned char seq64be[8];
-	unsigned long frag_len = msg_hdr->frag_len;
+  if ((msg_hdr->frag_off + frag_len) > msg_hdr->msg_len) {
+    goto err;
+  }
 
-	if ((msg_hdr->frag_off+frag_len) > msg_hdr->msg_len)
-		goto err;
+  /* Try to find item in queue, to prevent duplicate entries */
+  memset(seq64be, 0, sizeof(seq64be));
+  seq64be[6] = (uint8_t)(msg_hdr->seq >> 8);
+  seq64be[7] = (uint8_t)msg_hdr->seq;
+  item = pqueue_find(s->d1->buffered_messages, seq64be);
 
-	/* Try to find item in queue, to prevent duplicate entries */
-	memset(seq64be,0,sizeof(seq64be));
-	seq64be[6] = (unsigned char) (msg_hdr->seq>>8);
-	seq64be[7] = (unsigned char) msg_hdr->seq;
-	item = pqueue_find(s->d1->buffered_messages, seq64be);
+  /* If we already have an entry and this one is a fragment,
+   * don't discard it and rather try to reassemble it. */
+  if (item != NULL && frag_len != msg_hdr->msg_len) {
+    item = NULL;
+  }
 
-	/* If we already have an entry and this one is a fragment,
-	 * don't discard it and rather try to reassemble it.
-	 */
-	if (item != NULL && frag_len != msg_hdr->msg_len)
-		item = NULL;
+  /* Discard the message if sequence number was already there, is
+   * too far in the future, already in the queue or if we received
+   * a FINISHED before the SERVER_HELLO, which then must be a stale
+   * retransmit. */
+  if (msg_hdr->seq <= s->d1->handshake_read_seq ||
+      msg_hdr->seq > s->d1->handshake_read_seq + 10 || item != NULL ||
+      (s->d1->handshake_read_seq == 0 && msg_hdr->type == SSL3_MT_FINISHED)) {
+    uint8_t devnull[256];
 
-	/* Discard the message if sequence number was already there, is
-	 * too far in the future, already in the queue or if we received
-	 * a FINISHED before the SERVER_HELLO, which then must be a stale
-	 * retransmit.
-	 */
-	if (msg_hdr->seq <= s->d1->handshake_read_seq ||
-		msg_hdr->seq > s->d1->handshake_read_seq + 10 || item != NULL ||
-		(s->d1->handshake_read_seq == 0 && msg_hdr->type == SSL3_MT_FINISHED))
-		{
-		unsigned char devnull [256];
+    while (frag_len) {
+      i = s->method->ssl_read_bytes(
+          s, SSL3_RT_HANDSHAKE, devnull,
+          frag_len > sizeof(devnull) ? sizeof(devnull) : frag_len, 0);
+      if (i <= 0) {
+        goto err;
+      }
+      frag_len -= i;
+    }
+  } else {
+    if (frag_len != msg_hdr->msg_len) {
+      return dtls1_reassemble_fragment(s, msg_hdr, ok);
+    }
 
-		while (frag_len)
-			{
-			i = s->method->ssl_read_bytes(s,SSL3_RT_HANDSHAKE,
-				devnull,
-				frag_len>sizeof(devnull)?sizeof(devnull):frag_len,0);
-			if (i<=0) goto err;
-			frag_len -= i;
-			}
-		}
-	else
-		{
-		if (frag_len != msg_hdr->msg_len)
-			return dtls1_reassemble_fragment(s, msg_hdr, ok);
+    if (frag_len > dtls1_max_handshake_message_len(s)) {
+      goto err;
+    }
 
-		if (frag_len > dtls1_max_handshake_message_len(s))
-			goto err;
+    frag = dtls1_hm_fragment_new(frag_len, 0);
+    if (frag == NULL) {
+      goto err;
+    }
 
-		frag = dtls1_hm_fragment_new(frag_len, 0);
-		if ( frag == NULL)
-			goto err;
+    memcpy(&(frag->msg_header), msg_hdr, sizeof(*msg_hdr));
 
-		memcpy(&(frag->msg_header), msg_hdr, sizeof(*msg_hdr));
+    if (frag_len) {
+      /* read the body of the fragment (header has already been read */
+      i = s->method->ssl_read_bytes(s, SSL3_RT_HANDSHAKE, frag->fragment,
+                                    frag_len, 0);
+      if ((unsigned long)i != frag_len) {
+        i = -1;
+      }
+      if (i <= 0) {
+        goto err;
+      }
+    }
 
-		if (frag_len)
-			{
-			/* read the body of the fragment (header has already been read */
-			i = s->method->ssl_read_bytes(s,SSL3_RT_HANDSHAKE,
-				frag->fragment,frag_len,0);
-			if ((unsigned long)i!=frag_len)
-				i = -1;
-			if (i<=0)
-				goto err;
-			}
+    item = pitem_new(seq64be, frag);
+    if (item == NULL) {
+      goto err;
+    }
 
-		item = pitem_new(seq64be, frag);
-		if ( item == NULL)
-			goto err;
+    item = pqueue_insert(s->d1->buffered_messages, item);
+    /* pqueue_insert fails iff a duplicate item is inserted.
+     * However, |item| cannot be a duplicate. If it were,
+     * |pqueue_find|, above, would have returned it. Then, either
+     * |frag_len| != |msg_hdr->msg_len| in which case |item| is set
+     * to NULL and it will have been processed with
+     * |dtls1_reassemble_fragment|, above, or the record will have
+     * been discarded. */
+    assert(item != NULL);
+  }
 
-		item = pqueue_insert(s->d1->buffered_messages, item);
-		/* pqueue_insert fails iff a duplicate item is inserted.
-		 * However, |item| cannot be a duplicate. If it were,
-		 * |pqueue_find|, above, would have returned it. Then, either
-		 * |frag_len| != |msg_hdr->msg_len| in which case |item| is set
-		 * to NULL and it will have been processed with
-		 * |dtls1_reassemble_fragment|, above, or the record will have
-		 * been discarded. */
-		assert(item != NULL);
-		}
-
-	return DTLS1_HM_FRAGMENT_RETRY;
+  return DTLS1_HM_FRAGMENT_RETRY;
 
 err:
-	if (frag != NULL && item == NULL) dtls1_hm_fragment_free(frag);
-	*ok = 0;
-	return i;
-	}
+  if (frag != NULL && item == NULL) {
+    dtls1_hm_fragment_free(frag);
+  }
+  *ok = 0;
+  return i;
+}
 
 
-static long
-dtls1_get_message_fragment(SSL *s, int stn, long max, int *ok)
-	{
-	unsigned char wire[DTLS1_HM_HEADER_LENGTH];
-	unsigned long len, frag_off, frag_len;
-	int i,al;
-	struct hm_header_st msg_hdr;
+static long dtls1_get_message_fragment(SSL *s, int stn, long max, int *ok) {
+  uint8_t wire[DTLS1_HM_HEADER_LENGTH];
+  unsigned long len, frag_off, frag_len;
+  int i, al;
+  struct hm_header_st msg_hdr;
 
-	redo:
-	/* see if we have the required fragment already */
-	if ((frag_len = dtls1_retrieve_buffered_fragment(s,max,ok)) || *ok)
-		{
-		if (*ok)	s->init_num = frag_len;
-		return frag_len;
-		}
+redo:
+  /* see if we have the required fragment already */
+  if ((frag_len = dtls1_retrieve_buffered_fragment(s, max, ok)) || *ok) {
+    if (*ok) {
+      s->init_num = frag_len;
+    }
+    return frag_len;
+  }
 
-	/* read handshake message header */
-	i=s->method->ssl_read_bytes(s,SSL3_RT_HANDSHAKE,wire,
-		DTLS1_HM_HEADER_LENGTH, 0);
-	if (i <= 0) 	/* nbio, or an error */
-		{
-		s->rwstate=SSL_READING;
-		*ok = 0;
-		return i;
-		}
-	/* Handshake fails if message header is incomplete */
-	if (i != DTLS1_HM_HEADER_LENGTH)
-		{
-		al=SSL_AD_UNEXPECTED_MESSAGE;
-		OPENSSL_PUT_ERROR(SSL, dtls1_get_message_fragment, SSL_R_UNEXPECTED_MESSAGE);
-		goto f_err;
-		}
+  /* read handshake message header */
+  i = s->method->ssl_read_bytes(s, SSL3_RT_HANDSHAKE, wire,
+                                DTLS1_HM_HEADER_LENGTH, 0);
+  if (i <= 0) {
+    /* nbio, or an error */
+    s->rwstate = SSL_READING;
+    *ok = 0;
+    return i;
+  }
 
-	/* parse the message fragment header */
-	dtls1_get_message_header(wire, &msg_hdr);
+  /* Handshake fails if message header is incomplete */
+  if (i != DTLS1_HM_HEADER_LENGTH) {
+    al = SSL_AD_UNEXPECTED_MESSAGE;
+    OPENSSL_PUT_ERROR(SSL, dtls1_get_message_fragment,
+                      SSL_R_UNEXPECTED_MESSAGE);
+    goto f_err;
+  }
 
-	/* 
-	 * if this is a future (or stale) message it gets buffered
-	 * (or dropped)--no further processing at this time
-	 */
-	if (msg_hdr.seq != s->d1->handshake_read_seq)
-		return dtls1_process_out_of_seq_message(s, &msg_hdr, ok);
+  /* parse the message fragment header */
+  dtls1_get_message_header(wire, &msg_hdr);
 
-	len = msg_hdr.msg_len;
-	frag_off = msg_hdr.frag_off;
-	frag_len = msg_hdr.frag_len;
+  /* if this is a future (or stale) message it gets buffered
+   * (or dropped)--no further processing at this time. */
+  if (msg_hdr.seq != s->d1->handshake_read_seq) {
+    return dtls1_process_out_of_seq_message(s, &msg_hdr, ok);
+  }
 
-	if (frag_len && frag_len < len)
-		return dtls1_reassemble_fragment(s, &msg_hdr, ok);
+  len = msg_hdr.msg_len;
+  frag_off = msg_hdr.frag_off;
+  frag_len = msg_hdr.frag_len;
 
-	if (!s->server && s->d1->r_msg_hdr.frag_off == 0 &&
-		wire[0] == SSL3_MT_HELLO_REQUEST)
-		{
-		/* The server may always send 'Hello Request' messages --
-		 * we are doing a handshake anyway now, so ignore them
-		 * if their format is correct. Does not count for
-		 * 'Finished' MAC. */
-		if (wire[1] == 0 && wire[2] == 0 && wire[3] == 0)
-			{
-			if (s->msg_callback)
-				s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE, 
-					wire, DTLS1_HM_HEADER_LENGTH, s, 
-					s->msg_callback_arg);
-			
-			s->init_num = 0;
-			goto redo;
-			}
-		else /* Incorrectly formated Hello request */
-			{
-			al=SSL_AD_UNEXPECTED_MESSAGE;
-			OPENSSL_PUT_ERROR(SSL, dtls1_get_message_fragment, SSL_R_UNEXPECTED_MESSAGE);
-			goto f_err;
-			}
-		}
+  if (frag_len && frag_len < len) {
+    return dtls1_reassemble_fragment(s, &msg_hdr, ok);
+  }
 
-	if ((al=dtls1_preprocess_fragment(s,&msg_hdr,max)))
-		goto f_err;
+  if (!s->server && s->d1->r_msg_hdr.frag_off == 0 &&
+      wire[0] == SSL3_MT_HELLO_REQUEST) {
+    /* The server may always send 'Hello Request' messages --
+     * we are doing a handshake anyway now, so ignore them
+     * if their format is correct. Does not count for
+     * 'Finished' MAC. */
+    if (wire[1] == 0 && wire[2] == 0 && wire[3] == 0) {
+      if (s->msg_callback) {
+        s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE, wire,
+                        DTLS1_HM_HEADER_LENGTH, s, s->msg_callback_arg);
+      }
 
-	/* XDTLS:  ressurect this when restart is in place */
-	s->state=stn;
+      s->init_num = 0;
+      goto redo;
+    } else {
+      /* Incorrectly formated Hello request */
+      al = SSL_AD_UNEXPECTED_MESSAGE;
+      OPENSSL_PUT_ERROR(SSL, dtls1_get_message_fragment,
+                        SSL_R_UNEXPECTED_MESSAGE);
+      goto f_err;
+    }
+  }
 
-	if ( frag_len > 0)
-		{
-		unsigned char *p=(unsigned char *)s->init_buf->data+DTLS1_HM_HEADER_LENGTH;
+  if ((al = dtls1_preprocess_fragment(s, &msg_hdr, max))) {
+    goto f_err;
+  }
 
-		i=s->method->ssl_read_bytes(s,SSL3_RT_HANDSHAKE,
-			&p[frag_off],frag_len,0);
-		/* XDTLS:  fix this--message fragments cannot span multiple packets */
-		if (i <= 0)
-			{
-			s->rwstate=SSL_READING;
-			*ok = 0;
-			return i;
-			}
-		}
-	else
-		i = 0;
+  /* XDTLS:  ressurect this when restart is in place */
+  s->state = stn;
 
-	/* XDTLS:  an incorrectly formatted fragment should cause the 
-	 * handshake to fail */
-	if (i != (int)frag_len)
-		{
-		al=SSL3_AD_ILLEGAL_PARAMETER;
-		OPENSSL_PUT_ERROR(SSL, dtls1_get_message_fragment, SSL3_AD_ILLEGAL_PARAMETER);
-		goto f_err;
-		}
+  if (frag_len > 0) {
+    uint8_t *p = (uint8_t *)s->init_buf->data + DTLS1_HM_HEADER_LENGTH;
 
-	*ok = 1;
+    i = s->method->ssl_read_bytes(s, SSL3_RT_HANDSHAKE, &p[frag_off], frag_len,
+                                  0);
+    /* XDTLS:  fix this--message fragments cannot span multiple packets */
+    if (i <= 0) {
+      s->rwstate = SSL_READING;
+      *ok = 0;
+      return i;
+    }
+  } else {
+    i = 0;
+  }
 
-	/* Note that s->init_num is *not* used as current offset in
-	 * s->init_buf->data, but as a counter summing up fragments'
-	 * lengths: as soon as they sum up to handshake packet
-	 * length, we assume we have got all the fragments. */
-	s->init_num = frag_len;
-	return frag_len;
+  /* XDTLS:  an incorrectly formatted fragment should cause the
+   * handshake to fail */
+  if (i != (int)frag_len) {
+    al = SSL3_AD_ILLEGAL_PARAMETER;
+    OPENSSL_PUT_ERROR(SSL, dtls1_get_message_fragment,
+                      SSL3_AD_ILLEGAL_PARAMETER);
+    goto f_err;
+  }
+
+  *ok = 1;
+
+  /* Note that s->init_num is *not* used as current offset in
+   * s->init_buf->data, but as a counter summing up fragments'
+   * lengths: as soon as they sum up to handshake packet
+   * length, we assume we have got all the fragments. */
+  s->init_num = frag_len;
+  return frag_len;
 
 f_err:
-	ssl3_send_alert(s,SSL3_AL_FATAL,al);
-	s->init_num = 0;
+  ssl3_send_alert(s, SSL3_AL_FATAL, al);
+  s->init_num = 0;
 
-	*ok=0;
-	return(-1);
-	}
+  *ok = 0;
+  return -1;
+}
 
 /* for these 2 messages, we need to
  * ssl->enc_read_ctx			re-init
@@ -938,367 +897,330 @@
  * ssl->s3->read_mac_secret		re-init
  * ssl->session->read_sym_enc		assign
  * ssl->session->read_compression	assign
- * ssl->session->read_hash		assign
- */
-int dtls1_send_change_cipher_spec(SSL *s, int a, int b)
-	{ 
-	unsigned char *p;
+ * ssl->session->read_hash		assign */
+int dtls1_send_change_cipher_spec(SSL *s, int a, int b) {
+  uint8_t *p;
 
-	if (s->state == a)
-		{
-		p=(unsigned char *)s->init_buf->data;
-		*p++=SSL3_MT_CCS;
-		s->d1->handshake_write_seq = s->d1->next_handshake_write_seq;
-		s->init_num=DTLS1_CCS_HEADER_LENGTH;
+  if (s->state == a) {
+    p = (uint8_t *)s->init_buf->data;
+    *p++ = SSL3_MT_CCS;
+    s->d1->handshake_write_seq = s->d1->next_handshake_write_seq;
+    s->init_num = DTLS1_CCS_HEADER_LENGTH;
 
-		s->init_off=0;
+    s->init_off = 0;
 
-		dtls1_set_message_header_int(s, SSL3_MT_CCS, 0, 
-			s->d1->handshake_write_seq, 0, 0);
+    dtls1_set_message_header_int(s, SSL3_MT_CCS, 0, s->d1->handshake_write_seq,
+                                 0, 0);
 
-		/* buffer the message to handle re-xmits */
-		dtls1_buffer_message(s, 1);
+    /* buffer the message to handle re-xmits */
+    dtls1_buffer_message(s, 1);
 
-		s->state=b;
-		}
+    s->state = b;
+  }
 
-	/* SSL3_ST_CW_CHANGE_B */
-	return(dtls1_do_write(s,SSL3_RT_CHANGE_CIPHER_SPEC, dont_add_to_finished_hash));
-	}
+  /* SSL3_ST_CW_CHANGE_B */
+  return dtls1_do_write(s, SSL3_RT_CHANGE_CIPHER_SPEC,
+                        dont_add_to_finished_hash);
+}
 
-int dtls1_read_failed(SSL *s, int code)
-	{
-	if ( code > 0)
-		{
-		fprintf( stderr, "invalid state reached %s:%d", __FILE__, __LINE__);
-		return 1;
-		}
+int dtls1_read_failed(SSL *s, int code) {
+  if (code > 0) {
+    fprintf(stderr, "invalid state reached %s:%d", __FILE__, __LINE__);
+    return 1;
+  }
 
-	if (!dtls1_is_timer_expired(s))
-		{
-		/* not a timeout, none of our business, 
-		   let higher layers handle this.  in fact it's probably an error */
-		return code;
-		}
+  if (!dtls1_is_timer_expired(s)) {
+    /* not a timeout, none of our business, let higher layers handle this. In
+     * fact, it's probably an error */
+    return code;
+  }
 
-	if (!SSL_in_init(s))  /* done, no need to send a retransmit */
-		{
-		BIO_set_flags(SSL_get_rbio(s), BIO_FLAGS_READ);
-		return code;
-		}
+  if (!SSL_in_init(s)) {
+    /* done, no need to send a retransmit */
+    BIO_set_flags(SSL_get_rbio(s), BIO_FLAGS_READ);
+    return code;
+  }
 
-	return dtls1_handle_timeout(s);
-	}
+  return dtls1_handle_timeout(s);
+}
 
-int
-dtls1_get_queue_priority(unsigned short seq, int is_ccs)
-	{
-	/* The index of the retransmission queue actually is the message sequence number,
-	 * since the queue only contains messages of a single handshake. However, the
-	 * ChangeCipherSpec has no message sequence number and so using only the sequence
-	 * will result in the CCS and Finished having the same index. To prevent this,
-	 * the sequence number is multiplied by 2. In case of a CCS 1 is subtracted.
-	 * This does not only differ CSS and Finished, it also maintains the order of the
-	 * index (important for priority queues) and fits in the unsigned short variable.
-	 */	
-	return seq * 2 - is_ccs;
-	}
+int dtls1_get_queue_priority(unsigned short seq, int is_ccs) {
+  /* The index of the retransmission queue actually is the message sequence
+   * number, since the queue only contains messages of a single handshake.
+   * However, the ChangeCipherSpec has no message sequence number and so using
+   * only the sequence will result in the CCS and Finished having the same
+   * index. To prevent this, the sequence number is multiplied by 2. In case of
+   * a CCS 1 is subtracted. This does not only differ CSS and Finished, it also
+   * maintains the order of the index (important for priority queues) and fits
+   * in the unsigned short variable. */
+  return seq * 2 - is_ccs;
+}
 
-int
-dtls1_retransmit_buffered_messages(SSL *s)
-	{
-	pqueue sent = s->d1->sent_messages;
-	piterator iter;
-	pitem *item;
-	hm_fragment *frag;
-	int found = 0;
+int dtls1_retransmit_buffered_messages(SSL *s) {
+  pqueue sent = s->d1->sent_messages;
+  piterator iter;
+  pitem *item;
+  hm_fragment *frag;
+  int found = 0;
 
-	iter = pqueue_iterator(sent);
+  iter = pqueue_iterator(sent);
 
-	for ( item = pqueue_next(&iter); item != NULL; item = pqueue_next(&iter))
-		{
-		frag = (hm_fragment *)item->data;
-			if ( dtls1_retransmit_message(s,
-				(unsigned short)dtls1_get_queue_priority(frag->msg_header.seq, frag->msg_header.is_ccs),
-				0, &found) <= 0 && found)
-			{
-			fprintf(stderr, "dtls1_retransmit_message() failed\n");
-			return -1;
-			}
-		}
+  for (item = pqueue_next(&iter); item != NULL; item = pqueue_next(&iter)) {
+    frag = (hm_fragment *)item->data;
+    if (dtls1_retransmit_message(
+            s, (unsigned short)dtls1_get_queue_priority(
+                   frag->msg_header.seq, frag->msg_header.is_ccs),
+            0, &found) <= 0 &&
+        found) {
+      fprintf(stderr, "dtls1_retransmit_message() failed\n");
+      return -1;
+    }
+  }
 
-	return 1;
-	}
+  return 1;
+}
 
-int
-dtls1_buffer_message(SSL *s, int is_ccs)
-	{
-	pitem *item;
-	hm_fragment *frag;
-	unsigned char seq64be[8];
+int dtls1_buffer_message(SSL *s, int is_ccs) {
+  pitem *item;
+  hm_fragment *frag;
+  uint8_t seq64be[8];
 
-	/* this function is called immediately after a message has 
-	 * been serialized */
-	assert(s->init_off == 0);
+  /* this function is called immediately after a message has
+   * been serialized */
+  assert(s->init_off == 0);
 
-	frag = dtls1_hm_fragment_new(s->init_num, 0);
-	if (!frag)
-		return 0;
+  frag = dtls1_hm_fragment_new(s->init_num, 0);
+  if (!frag) {
+    return 0;
+  }
 
-	memcpy(frag->fragment, s->init_buf->data, s->init_num);
+  memcpy(frag->fragment, s->init_buf->data, s->init_num);
 
-	if ( is_ccs)
-		{
-		assert(s->d1->w_msg_hdr.msg_len + 
-			       DTLS1_CCS_HEADER_LENGTH == (unsigned int)s->init_num);
-		}
-	else
-		{
-		assert(s->d1->w_msg_hdr.msg_len + 
-			DTLS1_HM_HEADER_LENGTH == (unsigned int)s->init_num);
-		}
+  if (is_ccs) {
+    assert(s->d1->w_msg_hdr.msg_len + DTLS1_CCS_HEADER_LENGTH ==
+           (unsigned int)s->init_num);
+  } else {
+    assert(s->d1->w_msg_hdr.msg_len + DTLS1_HM_HEADER_LENGTH ==
+           (unsigned int)s->init_num);
+  }
 
-	frag->msg_header.msg_len = s->d1->w_msg_hdr.msg_len;
-	frag->msg_header.seq = s->d1->w_msg_hdr.seq;
-	frag->msg_header.type = s->d1->w_msg_hdr.type;
-	frag->msg_header.frag_off = 0;
-	frag->msg_header.frag_len = s->d1->w_msg_hdr.msg_len;
-	frag->msg_header.is_ccs = is_ccs;
+  frag->msg_header.msg_len = s->d1->w_msg_hdr.msg_len;
+  frag->msg_header.seq = s->d1->w_msg_hdr.seq;
+  frag->msg_header.type = s->d1->w_msg_hdr.type;
+  frag->msg_header.frag_off = 0;
+  frag->msg_header.frag_len = s->d1->w_msg_hdr.msg_len;
+  frag->msg_header.is_ccs = is_ccs;
 
-	/* save current state*/
-	frag->msg_header.saved_retransmit_state.enc_write_ctx = s->enc_write_ctx;
-	frag->msg_header.saved_retransmit_state.write_hash = s->write_hash;
-	frag->msg_header.saved_retransmit_state.session = s->session;
-	frag->msg_header.saved_retransmit_state.epoch = s->d1->w_epoch;
-	
-	memset(seq64be,0,sizeof(seq64be));
-	seq64be[6] = (unsigned char)(dtls1_get_queue_priority(frag->msg_header.seq,
-														  frag->msg_header.is_ccs)>>8);
-	seq64be[7] = (unsigned char)(dtls1_get_queue_priority(frag->msg_header.seq,
-														  frag->msg_header.is_ccs));
+  /* save current state*/
+  frag->msg_header.saved_retransmit_state.enc_write_ctx = s->enc_write_ctx;
+  frag->msg_header.saved_retransmit_state.write_hash = s->write_hash;
+  frag->msg_header.saved_retransmit_state.session = s->session;
+  frag->msg_header.saved_retransmit_state.epoch = s->d1->w_epoch;
 
-	item = pitem_new(seq64be, frag);
-	if ( item == NULL)
-		{
-		dtls1_hm_fragment_free(frag);
-		return 0;
-		}
+  memset(seq64be, 0, sizeof(seq64be));
+  seq64be[6] = (uint8_t)(
+      dtls1_get_queue_priority(frag->msg_header.seq, frag->msg_header.is_ccs) >>
+      8);
+  seq64be[7] = (uint8_t)(
+      dtls1_get_queue_priority(frag->msg_header.seq, frag->msg_header.is_ccs));
 
-#if 0
-	fprintf( stderr, "buffered messge: \ttype = %xx\n", msg_buf->type);
-	fprintf( stderr, "\t\t\t\t\tlen = %d\n", msg_buf->len);
-	fprintf( stderr, "\t\t\t\t\tseq_num = %d\n", msg_buf->seq_num);
-#endif
+  item = pitem_new(seq64be, frag);
+  if (item == NULL) {
+    dtls1_hm_fragment_free(frag);
+    return 0;
+  }
 
-	pqueue_insert(s->d1->sent_messages, item);
-	return 1;
-	}
+  pqueue_insert(s->d1->sent_messages, item);
+  return 1;
+}
 
-int
-dtls1_retransmit_message(SSL *s, unsigned short seq, unsigned long frag_off,
-	int *found)
-	{
-	int ret;
-	/* XDTLS: for now assuming that read/writes are blocking */
-	pitem *item;
-	hm_fragment *frag ;
-	unsigned long header_length;
-	unsigned char seq64be[8];
-	struct dtls1_retransmit_state saved_state;
-	unsigned char save_write_sequence[8];
+int dtls1_retransmit_message(SSL *s, unsigned short seq, unsigned long frag_off,
+                             int *found) {
+  int ret;
+  /* XDTLS: for now assuming that read/writes are blocking */
+  pitem *item;
+  hm_fragment *frag;
+  unsigned long header_length;
+  uint8_t seq64be[8];
+  struct dtls1_retransmit_state saved_state;
+  uint8_t save_write_sequence[8];
 
-	/*
-	  assert(s->init_num == 0);
-	  assert(s->init_off == 0);
-	 */
+  /* assert(s->init_num == 0);
+     assert(s->init_off == 0); */
 
-	/* XDTLS:  the requested message ought to be found, otherwise error */
-	memset(seq64be,0,sizeof(seq64be));
-	seq64be[6] = (unsigned char)(seq>>8);
-	seq64be[7] = (unsigned char)seq;
+  /* XDTLS:  the requested message ought to be found, otherwise error */
+  memset(seq64be, 0, sizeof(seq64be));
+  seq64be[6] = (uint8_t)(seq >> 8);
+  seq64be[7] = (uint8_t)seq;
 
-	item = pqueue_find(s->d1->sent_messages, seq64be);
-	if ( item == NULL)
-		{
-		fprintf(stderr, "retransmit:  message %d non-existant\n", seq);
-		*found = 0;
-		return 0;
-		}
+  item = pqueue_find(s->d1->sent_messages, seq64be);
+  if (item == NULL) {
+    fprintf(stderr, "retransmit:  message %d non-existant\n", seq);
+    *found = 0;
+    return 0;
+  }
 
-	*found = 1;
-	frag = (hm_fragment *)item->data;
+  *found = 1;
+  frag = (hm_fragment *)item->data;
 
-	if ( frag->msg_header.is_ccs)
-		header_length = DTLS1_CCS_HEADER_LENGTH;
-	else
-		header_length = DTLS1_HM_HEADER_LENGTH;
+  if (frag->msg_header.is_ccs) {
+    header_length = DTLS1_CCS_HEADER_LENGTH;
+  } else {
+    header_length = DTLS1_HM_HEADER_LENGTH;
+  }
 
-	memcpy(s->init_buf->data, frag->fragment, 
-		frag->msg_header.msg_len + header_length);
-		s->init_num = frag->msg_header.msg_len + header_length;
+  memcpy(s->init_buf->data, frag->fragment,
+         frag->msg_header.msg_len + header_length);
+  s->init_num = frag->msg_header.msg_len + header_length;
 
-	dtls1_set_message_header_int(s, frag->msg_header.type, 
-		frag->msg_header.msg_len, frag->msg_header.seq, 0, 
-		frag->msg_header.frag_len);
+  dtls1_set_message_header_int(s, frag->msg_header.type,
+                               frag->msg_header.msg_len, frag->msg_header.seq,
+                               0, frag->msg_header.frag_len);
 
-	/* save current state */
-	saved_state.enc_write_ctx = s->enc_write_ctx;
-	saved_state.write_hash = s->write_hash;
-	saved_state.session = s->session;
-	saved_state.epoch = s->d1->w_epoch;
-	
-	s->d1->retransmitting = 1;
-	
-	/* restore state in which the message was originally sent */
-	s->enc_write_ctx = frag->msg_header.saved_retransmit_state.enc_write_ctx;
-	s->write_hash = frag->msg_header.saved_retransmit_state.write_hash;
-	s->session = frag->msg_header.saved_retransmit_state.session;
-	s->d1->w_epoch = frag->msg_header.saved_retransmit_state.epoch;
-	
-	if (frag->msg_header.saved_retransmit_state.epoch == saved_state.epoch - 1)
-	{
-		memcpy(save_write_sequence, s->s3->write_sequence, sizeof(s->s3->write_sequence));
-		memcpy(s->s3->write_sequence, s->d1->last_write_sequence, sizeof(s->s3->write_sequence));
-	}
-	
-	ret = dtls1_do_write(s, frag->msg_header.is_ccs ? 
-						 SSL3_RT_CHANGE_CIPHER_SPEC : SSL3_RT_HANDSHAKE, add_to_finished_hash);
-	
-	/* restore current state */
-	s->enc_write_ctx = saved_state.enc_write_ctx;
-	s->write_hash = saved_state.write_hash;
-	s->session = saved_state.session;
-	s->d1->w_epoch = saved_state.epoch;
-	
-	if (frag->msg_header.saved_retransmit_state.epoch == saved_state.epoch - 1)
-	{
-		memcpy(s->d1->last_write_sequence, s->s3->write_sequence, sizeof(s->s3->write_sequence));
-		memcpy(s->s3->write_sequence, save_write_sequence, sizeof(s->s3->write_sequence));
-	}
+  /* save current state */
+  saved_state.enc_write_ctx = s->enc_write_ctx;
+  saved_state.write_hash = s->write_hash;
+  saved_state.session = s->session;
+  saved_state.epoch = s->d1->w_epoch;
 
-	s->d1->retransmitting = 0;
+  s->d1->retransmitting = 1;
 
-	(void)BIO_flush(SSL_get_wbio(s));
-	return ret;
-	}
+  /* restore state in which the message was originally sent */
+  s->enc_write_ctx = frag->msg_header.saved_retransmit_state.enc_write_ctx;
+  s->write_hash = frag->msg_header.saved_retransmit_state.write_hash;
+  s->session = frag->msg_header.saved_retransmit_state.session;
+  s->d1->w_epoch = frag->msg_header.saved_retransmit_state.epoch;
+
+  if (frag->msg_header.saved_retransmit_state.epoch == saved_state.epoch - 1) {
+    memcpy(save_write_sequence, s->s3->write_sequence,
+           sizeof(s->s3->write_sequence));
+    memcpy(s->s3->write_sequence, s->d1->last_write_sequence,
+           sizeof(s->s3->write_sequence));
+  }
+
+  ret = dtls1_do_write(s, frag->msg_header.is_ccs ? SSL3_RT_CHANGE_CIPHER_SPEC
+                                                  : SSL3_RT_HANDSHAKE,
+                       add_to_finished_hash);
+
+  /* restore current state */
+  s->enc_write_ctx = saved_state.enc_write_ctx;
+  s->write_hash = saved_state.write_hash;
+  s->session = saved_state.session;
+  s->d1->w_epoch = saved_state.epoch;
+
+  if (frag->msg_header.saved_retransmit_state.epoch == saved_state.epoch - 1) {
+    memcpy(s->d1->last_write_sequence, s->s3->write_sequence,
+           sizeof(s->s3->write_sequence));
+    memcpy(s->s3->write_sequence, save_write_sequence,
+           sizeof(s->s3->write_sequence));
+  }
+
+  s->d1->retransmitting = 0;
+
+  (void)BIO_flush(SSL_get_wbio(s));
+  return ret;
+}
 
 /* call this function when the buffered messages are no longer needed */
-void
-dtls1_clear_record_buffer(SSL *s)
-	{
-	pitem *item;
+void dtls1_clear_record_buffer(SSL *s) {
+  pitem *item;
 
-	for(item = pqueue_pop(s->d1->sent_messages);
-		item != NULL; item = pqueue_pop(s->d1->sent_messages))
-		{
-		dtls1_hm_fragment_free((hm_fragment *)item->data);
-		pitem_free(item);
-		}
-	}
+  for (item = pqueue_pop(s->d1->sent_messages); item != NULL;
+       item = pqueue_pop(s->d1->sent_messages)) {
+    dtls1_hm_fragment_free((hm_fragment *)item->data);
+    pitem_free(item);
+  }
+}
 
+uint8_t *dtls1_set_message_header(SSL *s, uint8_t *p, uint8_t mt,
+                                  unsigned long len, unsigned long frag_off,
+                                  unsigned long frag_len) {
+  if (frag_off == 0) {
+    s->d1->handshake_write_seq = s->d1->next_handshake_write_seq;
+    s->d1->next_handshake_write_seq++;
+  }
 
-unsigned char *
-dtls1_set_message_header(SSL *s, unsigned char *p, unsigned char mt,
-			unsigned long len, unsigned long frag_off, unsigned long frag_len)
-	{
-	if (frag_off == 0)
-		{
-		s->d1->handshake_write_seq = s->d1->next_handshake_write_seq;
-		s->d1->next_handshake_write_seq++;
-		}
+  dtls1_set_message_header_int(s, mt, len, s->d1->handshake_write_seq, frag_off,
+                               frag_len);
 
-	dtls1_set_message_header_int(s, mt, len, s->d1->handshake_write_seq,
-		frag_off, frag_len);
-
-	return p += DTLS1_HM_HEADER_LENGTH;
-	}
-
+  return p += DTLS1_HM_HEADER_LENGTH;
+}
 
 /* don't actually do the writing, wait till the MTU has been retrieved */
-static void
-dtls1_set_message_header_int(SSL *s, unsigned char mt,
-			    unsigned long len, unsigned short seq_num, unsigned long frag_off,
-			    unsigned long frag_len)
-	{
-	struct hm_header_st *msg_hdr = &s->d1->w_msg_hdr;
+static void dtls1_set_message_header_int(SSL *s, uint8_t mt, unsigned long len,
+                                         unsigned short seq_num,
+                                         unsigned long frag_off,
+                                         unsigned long frag_len) {
+  struct hm_header_st *msg_hdr = &s->d1->w_msg_hdr;
 
-	msg_hdr->type = mt;
-	msg_hdr->msg_len = len;
-	msg_hdr->seq = seq_num;
-	msg_hdr->frag_off = frag_off;
-	msg_hdr->frag_len = frag_len;
-	}
+  msg_hdr->type = mt;
+  msg_hdr->msg_len = len;
+  msg_hdr->seq = seq_num;
+  msg_hdr->frag_off = frag_off;
+  msg_hdr->frag_len = frag_len;
+}
 
-static void
-dtls1_fix_message_header(SSL *s, unsigned long frag_off,
-			unsigned long frag_len)
-	{
-	struct hm_header_st *msg_hdr = &s->d1->w_msg_hdr;
+static void dtls1_fix_message_header(SSL *s, unsigned long frag_off,
+                                     unsigned long frag_len) {
+  struct hm_header_st *msg_hdr = &s->d1->w_msg_hdr;
 
-	msg_hdr->frag_off = frag_off;
-	msg_hdr->frag_len = frag_len;
-	}
+  msg_hdr->frag_off = frag_off;
+  msg_hdr->frag_len = frag_len;
+}
 
-static unsigned char *
-dtls1_write_message_header(SSL *s, unsigned char *p)
-	{
-	struct hm_header_st *msg_hdr = &s->d1->w_msg_hdr;
+static uint8_t *dtls1_write_message_header(SSL *s, uint8_t *p) {
+  struct hm_header_st *msg_hdr = &s->d1->w_msg_hdr;
 
-	*p++ = msg_hdr->type;
-	l2n3(msg_hdr->msg_len, p);
+  *p++ = msg_hdr->type;
+  l2n3(msg_hdr->msg_len, p);
 
-	s2n(msg_hdr->seq, p);
-	l2n3(msg_hdr->frag_off, p);
-	l2n3(msg_hdr->frag_len, p);
+  s2n(msg_hdr->seq, p);
+  l2n3(msg_hdr->frag_off, p);
+  l2n3(msg_hdr->frag_len, p);
 
-	return p;
-	}
+  return p;
+}
 
-unsigned int 
-dtls1_min_mtu(void)
-	{
-	return (g_probable_mtu[(sizeof(g_probable_mtu) / 
-		sizeof(g_probable_mtu[0])) - 1]);
-	}
+unsigned int dtls1_min_mtu(void) {
+  return g_probable_mtu[(sizeof(g_probable_mtu) / sizeof(g_probable_mtu[0])) -
+                        1];
+}
 
-static unsigned int 
-dtls1_guess_mtu(unsigned int curr_mtu)
-	{
-	unsigned int i;
+static unsigned int dtls1_guess_mtu(unsigned int curr_mtu) {
+  unsigned int i;
 
-	if ( curr_mtu == 0 )
-		return g_probable_mtu[0] ;
+  if (curr_mtu == 0) {
+    return g_probable_mtu[0];
+  }
 
-	for ( i = 0; i < sizeof(g_probable_mtu)/sizeof(g_probable_mtu[0]); i++)
-		if ( curr_mtu > g_probable_mtu[i])
-			return g_probable_mtu[i];
+  for (i = 0; i < sizeof(g_probable_mtu) / sizeof(g_probable_mtu[0]); i++) {
+    if (curr_mtu > g_probable_mtu[i]) {
+      return g_probable_mtu[i];
+    }
+  }
 
-	return curr_mtu;
-	}
+  return curr_mtu;
+}
 
-void
-dtls1_get_message_header(unsigned char *data, struct hm_header_st *msg_hdr)
-	{
-	memset(msg_hdr, 0x00, sizeof(struct hm_header_st));
-	msg_hdr->type = *(data++);
-	n2l3(data, msg_hdr->msg_len);
+void dtls1_get_message_header(uint8_t *data,
+                              struct hm_header_st *msg_hdr) {
+  memset(msg_hdr, 0x00, sizeof(struct hm_header_st));
+  msg_hdr->type = *(data++);
+  n2l3(data, msg_hdr->msg_len);
 
-	n2s(data, msg_hdr->seq);
-	n2l3(data, msg_hdr->frag_off);
-	n2l3(data, msg_hdr->frag_len);
-	}
+  n2s(data, msg_hdr->seq);
+  n2l3(data, msg_hdr->frag_off);
+  n2l3(data, msg_hdr->frag_len);
+}
 
-void
-dtls1_get_ccs_header(unsigned char *data, struct ccs_header_st *ccs_hdr)
-	{
-	memset(ccs_hdr, 0x00, sizeof(struct ccs_header_st));
+void dtls1_get_ccs_header(uint8_t *data, struct ccs_header_st *ccs_hdr) {
+  memset(ccs_hdr, 0x00, sizeof(struct ccs_header_st));
 
-	ccs_hdr->type = *(data++);
-	}
+  ccs_hdr->type = *(data++);
+}
 
-int dtls1_shutdown(SSL *s)
-	{
-	int ret;
-	ret = ssl3_shutdown(s);
-	return ret;
-	}
+int dtls1_shutdown(SSL *s) {
+  int ret;
+  ret = ssl3_shutdown(s);
+  return ret;
+}
diff --git a/ssl/d1_clnt.c b/ssl/d1_clnt.c
index 55b6aca..3f9e814 100644
--- a/ssl/d1_clnt.c
+++ b/ssl/d1_clnt.c
@@ -128,462 +128,450 @@
 
 static int dtls1_get_hello_verify(SSL *s);
 
-int dtls1_connect(SSL *s)
-	{
-	BUF_MEM *buf=NULL;
-	void (*cb)(const SSL *ssl,int type,int val)=NULL;
-	int ret= -1;
-	int new_state,state,skip=0;
+int dtls1_connect(SSL *s) {
+  BUF_MEM *buf = NULL;
+  void (*cb)(const SSL *ssl, int type, int val) = NULL;
+  int ret = -1;
+  int new_state, state, skip = 0;
 
-	assert(s->handshake_func == dtls1_connect);
-	assert(!s->server);
-	assert(SSL_IS_DTLS(s));
+  assert(s->handshake_func == dtls1_connect);
+  assert(!s->server);
+  assert(SSL_IS_DTLS(s));
 
-	ERR_clear_error();
-	ERR_clear_system_error();
+  ERR_clear_error();
+  ERR_clear_system_error();
 
-	if (s->info_callback != NULL)
-		cb=s->info_callback;
-	else if (s->ctx->info_callback != NULL)
-		cb=s->ctx->info_callback;
-	
-	s->in_handshake++;
+  if (s->info_callback != NULL) {
+    cb = s->info_callback;
+  } else if (s->ctx->info_callback != NULL) {
+    cb = s->ctx->info_callback;
+  }
 
-	for (;;)
-		{
-		state=s->state;
+  s->in_handshake++;
 
-		switch(s->state)
-			{
-		case SSL_ST_RENEGOTIATE:
-			s->renegotiate=1;
-			s->state=SSL_ST_CONNECT;
-			s->ctx->stats.sess_connect_renegotiate++;
-			/* break */
-		case SSL_ST_CONNECT:
-		case SSL_ST_BEFORE|SSL_ST_CONNECT:
+  for (;;) {
+    state = s->state;
 
-			if (cb != NULL) cb(s,SSL_CB_HANDSHAKE_START,1);
+    switch (s->state) {
+      case SSL_ST_RENEGOTIATE:
+        s->renegotiate = 1;
+        s->state = SSL_ST_CONNECT;
+        s->ctx->stats.sess_connect_renegotiate++;
+      /* break */
+      case SSL_ST_CONNECT:
+      case SSL_ST_BEFORE | SSL_ST_CONNECT:
+        if (cb != NULL) {
+          cb(s, SSL_CB_HANDSHAKE_START, 1);
+        }
 
-			if (s->init_buf == NULL)
-				{
-				if ((buf=BUF_MEM_new()) == NULL)
-					{
-					ret= -1;
-					goto end;
-					}
-				if (!BUF_MEM_grow(buf,SSL3_RT_MAX_PLAIN_LENGTH))
-					{
-					ret= -1;
-					goto end;
-					}
-				s->init_buf=buf;
-				buf=NULL;
-				}
+        if (s->init_buf == NULL) {
+          buf = BUF_MEM_new();
+          if (buf == NULL ||
+              !BUF_MEM_grow(buf, SSL3_RT_MAX_PLAIN_LENGTH)) {
+            ret = -1;
+            goto end;
+          }
+          s->init_buf = buf;
+          buf = NULL;
+        }
 
-			if (!ssl3_setup_buffers(s)) { ret= -1; goto end; }
+        if (!ssl3_setup_buffers(s) ||
+            !ssl_init_wbio_buffer(s, 0)) {
+          ret = -1;
+          goto end;
+        }
 
-			/* setup buffing BIO */
-			if (!ssl_init_wbio_buffer(s,0)) { ret= -1; goto end; }
+        /* don't push the buffering BIO quite yet */
 
-			/* don't push the buffering BIO quite yet */
+        s->state = SSL3_ST_CW_CLNT_HELLO_A;
+        s->ctx->stats.sess_connect++;
+        s->init_num = 0;
+        s->d1->send_cookie = 0;
+        s->hit = 0;
+        break;
 
-			s->state=SSL3_ST_CW_CLNT_HELLO_A;
-			s->ctx->stats.sess_connect++;
-			s->init_num=0;
-			s->d1->send_cookie = 0;
-			s->hit = 0;
-			break;
+      case SSL3_ST_CW_CLNT_HELLO_A:
+      case SSL3_ST_CW_CLNT_HELLO_B:
+        s->shutdown = 0;
 
-		case SSL3_ST_CW_CLNT_HELLO_A:
-		case SSL3_ST_CW_CLNT_HELLO_B:
+        /* every DTLS ClientHello resets Finished MAC */
+        if (!ssl3_init_finished_mac(s)) {
+          OPENSSL_PUT_ERROR(SSL, dtls1_connect, ERR_R_INTERNAL_ERROR);
+          ret = -1;
+          goto end;
+        }
 
-			s->shutdown=0;
+        dtls1_start_timer(s);
+        ret = ssl3_send_client_hello(s);
+        if (ret <= 0) {
+          goto end;
+        }
 
-			/* every DTLS ClientHello resets Finished MAC */
-			if (!ssl3_init_finished_mac(s))
-				{
-				OPENSSL_PUT_ERROR(SSL, dtls1_connect, ERR_R_INTERNAL_ERROR);
-				ret = -1;
-				goto end;
-				}
+        if (s->d1->send_cookie) {
+          s->state = SSL3_ST_CW_FLUSH;
+          s->s3->tmp.next_state = SSL3_ST_CR_SRVR_HELLO_A;
+        } else {
+          s->state = DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A;
+        }
 
-			dtls1_start_timer(s);
-			ret=ssl3_send_client_hello(s);
-			if (ret <= 0) goto end;
+        s->init_num = 0;
+        /* turn on buffering for the next lot of output */
+        if (s->bbio != s->wbio) {
+          s->wbio = BIO_push(s->bbio, s->wbio);
+        }
 
-			if ( s->d1->send_cookie)
-				{
-				s->state=SSL3_ST_CW_FLUSH;
-				s->s3->tmp.next_state=SSL3_ST_CR_SRVR_HELLO_A;
-				}
-			else
-				s->state=DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A;
+        break;
 
-			s->init_num=0;
-				/* turn on buffering for the next lot of output */
-				if (s->bbio != s->wbio)
-					s->wbio=BIO_push(s->bbio,s->wbio);
+      case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A:
+      case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B:
+        ret = dtls1_get_hello_verify(s);
+        if (ret <= 0) {
+          goto end;
+        }
+        if (s->d1->send_cookie) {
+          /* start again, with a cookie */
+          dtls1_stop_timer(s);
+          s->state = SSL3_ST_CW_CLNT_HELLO_A;
+        } else {
+          s->state = SSL3_ST_CR_SRVR_HELLO_A;
+        }
+        s->init_num = 0;
+        break;
 
-			break;
+      case SSL3_ST_CR_SRVR_HELLO_A:
+      case SSL3_ST_CR_SRVR_HELLO_B:
+        ret = ssl3_get_server_hello(s);
+        if (ret <= 0) {
+          goto end;
+        }
 
-		case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A:
-		case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B:
+        if (s->hit) {
+          s->state = SSL3_ST_CR_FINISHED_A;
+          if (s->tlsext_ticket_expected) {
+            /* receive renewed session ticket */
+            s->state = SSL3_ST_CR_SESSION_TICKET_A;
+          }
+        } else {
+          s->state = SSL3_ST_CR_CERT_A;
+        }
+        s->init_num = 0;
+        break;
 
-			ret = dtls1_get_hello_verify(s);
-			if ( ret <= 0)
-				goto end;
-			if ( s->d1->send_cookie)
-				{
-				/* start again, with a cookie */
-				dtls1_stop_timer(s);
-				s->state = SSL3_ST_CW_CLNT_HELLO_A;
-				}
-			else
-				{
-				s->state = SSL3_ST_CR_SRVR_HELLO_A;
-				}
-			s->init_num = 0;
-			break;
+      case SSL3_ST_CR_CERT_A:
+      case SSL3_ST_CR_CERT_B:
+        if (ssl_cipher_has_server_public_key(s->s3->tmp.new_cipher)) {
+          ret = ssl3_get_server_certificate(s);
+          if (ret <= 0) {
+            goto end;
+          }
+          if (s->s3->tmp.certificate_status_expected) {
+            s->state = SSL3_ST_CR_CERT_STATUS_A;
+          } else {
+            s->state = SSL3_ST_CR_KEY_EXCH_A;
+          }
+        } else {
+          skip = 1;
+          s->state = SSL3_ST_CR_KEY_EXCH_A;
+        }
+        s->init_num = 0;
+        break;
 
-		case SSL3_ST_CR_SRVR_HELLO_A:
-		case SSL3_ST_CR_SRVR_HELLO_B:
-			ret=ssl3_get_server_hello(s);
-			if (ret <= 0) goto end;
+      case SSL3_ST_CR_KEY_EXCH_A:
+      case SSL3_ST_CR_KEY_EXCH_B:
+        ret = ssl3_get_server_key_exchange(s);
+        if (ret <= 0) {
+          goto end;
+        }
+        s->state = SSL3_ST_CR_CERT_REQ_A;
+        s->init_num = 0;
 
-			if (s->hit)
-				{
-				s->state=SSL3_ST_CR_FINISHED_A;
-				if (s->tlsext_ticket_expected)
-					{
-					/* receive renewed session ticket */
-					s->state=SSL3_ST_CR_SESSION_TICKET_A;
-					}
-				}
-			else
-				{
-				s->state=SSL3_ST_CR_CERT_A;
-				}
-			s->init_num=0;
-			break;
+        /* at this point we check that we have the
+         * required stuff from the server */
+        if (!ssl3_check_cert_and_algorithm(s)) {
+          ret = -1;
+          goto end;
+        }
+        break;
 
-		case SSL3_ST_CR_CERT_A:
-		case SSL3_ST_CR_CERT_B:
-			if (ssl_cipher_has_server_public_key(s->s3->tmp.new_cipher))
-				{
-				ret=ssl3_get_server_certificate(s);
-				if (ret <= 0) goto end;
-				if (s->s3->tmp.certificate_status_expected)
-					s->state=SSL3_ST_CR_CERT_STATUS_A;
-				else
-					s->state=SSL3_ST_CR_KEY_EXCH_A;
-				}
-			else
-				{
-				skip = 1;
-				s->state=SSL3_ST_CR_KEY_EXCH_A;
-				}
-			s->init_num=0;
-			break;
+      case SSL3_ST_CR_CERT_REQ_A:
+      case SSL3_ST_CR_CERT_REQ_B:
+        ret = ssl3_get_certificate_request(s);
+        if (ret <= 0) {
+          goto end;
+        }
+        s->state = SSL3_ST_CR_SRVR_DONE_A;
+        s->init_num = 0;
+        break;
 
-		case SSL3_ST_CR_KEY_EXCH_A:
-		case SSL3_ST_CR_KEY_EXCH_B:
-			ret=ssl3_get_server_key_exchange(s);
-			if (ret <= 0) goto end;
-			s->state=SSL3_ST_CR_CERT_REQ_A;
-			s->init_num=0;
+      case SSL3_ST_CR_SRVR_DONE_A:
+      case SSL3_ST_CR_SRVR_DONE_B:
+        ret = ssl3_get_server_done(s);
+        if (ret <= 0) {
+          goto end;
+        }
+        dtls1_stop_timer(s);
+        if (s->s3->tmp.cert_req) {
+          s->s3->tmp.next_state = SSL3_ST_CW_CERT_A;
+        } else {
+          s->s3->tmp.next_state = SSL3_ST_CW_KEY_EXCH_A;
+        }
+        s->init_num = 0;
+        s->state = s->s3->tmp.next_state;
+        break;
 
-			/* at this point we check that we have the
-			 * required stuff from the server */
-			if (!ssl3_check_cert_and_algorithm(s))
-				{
-				ret= -1;
-				goto end;
-				}
-			break;
+      case SSL3_ST_CW_CERT_A:
+      case SSL3_ST_CW_CERT_B:
+      case SSL3_ST_CW_CERT_C:
+      case SSL3_ST_CW_CERT_D:
+        dtls1_start_timer(s);
+        ret = ssl3_send_client_certificate(s);
+        if (ret <= 0) {
+          goto end;
+        }
+        s->state = SSL3_ST_CW_KEY_EXCH_A;
+        s->init_num = 0;
+        break;
 
-		case SSL3_ST_CR_CERT_REQ_A:
-		case SSL3_ST_CR_CERT_REQ_B:
-			ret=ssl3_get_certificate_request(s);
-			if (ret <= 0) goto end;
-			s->state=SSL3_ST_CR_SRVR_DONE_A;
-			s->init_num=0;
-			break;
+      case SSL3_ST_CW_KEY_EXCH_A:
+      case SSL3_ST_CW_KEY_EXCH_B:
+        dtls1_start_timer(s);
+        ret = ssl3_send_client_key_exchange(s);
+        if (ret <= 0) {
+          goto end;
+        }
+        /* For TLS, cert_req is set to 2, so a cert chain
+         * of nothing is sent, but no verify packet is sent */
+        if (s->s3->tmp.cert_req == 1) {
+          s->state = SSL3_ST_CW_CERT_VRFY_A;
+        } else {
+          s->state = SSL3_ST_CW_CHANGE_A;
+          s->s3->change_cipher_spec = 0;
+        }
 
-		case SSL3_ST_CR_SRVR_DONE_A:
-		case SSL3_ST_CR_SRVR_DONE_B:
-			ret=ssl3_get_server_done(s);
-			if (ret <= 0) goto end;
-			dtls1_stop_timer(s);
-			if (s->s3->tmp.cert_req)
-				s->s3->tmp.next_state=SSL3_ST_CW_CERT_A;
-			else
-				s->s3->tmp.next_state=SSL3_ST_CW_KEY_EXCH_A;
-			s->init_num=0;
-			s->state=s->s3->tmp.next_state;
-			break;
+        s->init_num = 0;
+        break;
 
-		case SSL3_ST_CW_CERT_A:
-		case SSL3_ST_CW_CERT_B:
-		case SSL3_ST_CW_CERT_C:
-		case SSL3_ST_CW_CERT_D:
-			dtls1_start_timer(s);
-			ret=ssl3_send_client_certificate(s);
-			if (ret <= 0) goto end;
-			s->state=SSL3_ST_CW_KEY_EXCH_A;
-			s->init_num=0;
-			break;
+      case SSL3_ST_CW_CERT_VRFY_A:
+      case SSL3_ST_CW_CERT_VRFY_B:
+        dtls1_start_timer(s);
+        ret = ssl3_send_cert_verify(s);
+        if (ret <= 0) {
+          goto end;
+        }
+        s->state = SSL3_ST_CW_CHANGE_A;
+        s->init_num = 0;
+        s->s3->change_cipher_spec = 0;
+        break;
 
-		case SSL3_ST_CW_KEY_EXCH_A:
-		case SSL3_ST_CW_KEY_EXCH_B:
-			dtls1_start_timer(s);
-			ret=ssl3_send_client_key_exchange(s);
-			if (ret <= 0) goto end;
-			/* For TLS, cert_req is set to 2, so a cert chain
-			 * of nothing is sent, but no verify packet is sent */
-			if (s->s3->tmp.cert_req == 1)
-				{
-				s->state=SSL3_ST_CW_CERT_VRFY_A;
-				}
-			else
-				{
-				s->state=SSL3_ST_CW_CHANGE_A;
-				s->s3->change_cipher_spec=0;
-				}
+      case SSL3_ST_CW_CHANGE_A:
+      case SSL3_ST_CW_CHANGE_B:
+        if (!s->hit) {
+          dtls1_start_timer(s);
+        }
+        ret = dtls1_send_change_cipher_spec(s, SSL3_ST_CW_CHANGE_A,
+                                            SSL3_ST_CW_CHANGE_B);
+        if (ret <= 0) {
+          goto end;
+        }
 
-			s->init_num=0;
-			break;
+        s->state = SSL3_ST_CW_FINISHED_A;
+        s->init_num = 0;
 
-		case SSL3_ST_CW_CERT_VRFY_A:
-		case SSL3_ST_CW_CERT_VRFY_B:
-			dtls1_start_timer(s);
-			ret=ssl3_send_cert_verify(s);
-			if (ret <= 0) goto end;
-			s->state=SSL3_ST_CW_CHANGE_A;
-			s->init_num=0;
-			s->s3->change_cipher_spec=0;
-			break;
+        s->session->cipher = s->s3->tmp.new_cipher;
+        if (!s->enc_method->setup_key_block(s) ||
+            !s->enc_method->change_cipher_state(
+                s, SSL3_CHANGE_CIPHER_CLIENT_WRITE)) {
+          ret = -1;
+          goto end;
+        }
 
-		case SSL3_ST_CW_CHANGE_A:
-		case SSL3_ST_CW_CHANGE_B:
-			if (!s->hit)
-				dtls1_start_timer(s);
-			ret=dtls1_send_change_cipher_spec(s,
-				SSL3_ST_CW_CHANGE_A,SSL3_ST_CW_CHANGE_B);
-			if (ret <= 0) goto end;
+        dtls1_reset_seq_numbers(s, SSL3_CC_WRITE);
+        break;
 
-			s->state=SSL3_ST_CW_FINISHED_A;
-			s->init_num=0;
+      case SSL3_ST_CW_FINISHED_A:
+      case SSL3_ST_CW_FINISHED_B:
+        if (!s->hit) {
+          dtls1_start_timer(s);
+        }
 
-			s->session->cipher=s->s3->tmp.new_cipher;
-			if (!s->enc_method->setup_key_block(s))
-				{
-				ret= -1;
-				goto end;
-				}
+        ret =
+            ssl3_send_finished(s, SSL3_ST_CW_FINISHED_A, SSL3_ST_CW_FINISHED_B,
+                               s->enc_method->client_finished_label,
+                               s->enc_method->client_finished_label_len);
+        if (ret <= 0) {
+          goto end;
+        }
+        s->state = SSL3_ST_CW_FLUSH;
 
-			if (!s->enc_method->change_cipher_state(s,
-				SSL3_CHANGE_CIPHER_CLIENT_WRITE))
-				{
-				ret= -1;
-				goto end;
-				}
-			
-			dtls1_reset_seq_numbers(s, SSL3_CC_WRITE);
-			break;
+        if (s->hit) {
+          s->s3->tmp.next_state = SSL_ST_OK;
+        } else {
+          /* Allow NewSessionTicket if ticket expected */
+          if (s->tlsext_ticket_expected) {
+            s->s3->tmp.next_state = SSL3_ST_CR_SESSION_TICKET_A;
+          } else {
+            s->s3->tmp.next_state = SSL3_ST_CR_FINISHED_A;
+          }
+        }
+        s->init_num = 0;
+        break;
 
-		case SSL3_ST_CW_FINISHED_A:
-		case SSL3_ST_CW_FINISHED_B:
-			if (!s->hit)
-				dtls1_start_timer(s);
-			ret=ssl3_send_finished(s,
-				SSL3_ST_CW_FINISHED_A,SSL3_ST_CW_FINISHED_B,
-				s->enc_method->client_finished_label,
-				s->enc_method->client_finished_label_len);
-			if (ret <= 0) goto end;
-			s->state=SSL3_ST_CW_FLUSH;
+      case SSL3_ST_CR_SESSION_TICKET_A:
+      case SSL3_ST_CR_SESSION_TICKET_B:
+        ret = ssl3_get_new_session_ticket(s);
+        if (ret <= 0) {
+          goto end;
+        }
+        s->state = SSL3_ST_CR_FINISHED_A;
+        s->init_num = 0;
+        break;
 
-			if (s->hit)
-				{
-				s->s3->tmp.next_state=SSL_ST_OK;
-				}
-			else
-				{
+      case SSL3_ST_CR_CERT_STATUS_A:
+      case SSL3_ST_CR_CERT_STATUS_B:
+        ret = ssl3_get_cert_status(s);
+        if (ret <= 0) {
+          goto end;
+        }
+        s->state = SSL3_ST_CR_KEY_EXCH_A;
+        s->init_num = 0;
+        break;
 
-				/* Allow NewSessionTicket if ticket expected */
-				if (s->tlsext_ticket_expected)
-					s->s3->tmp.next_state=SSL3_ST_CR_SESSION_TICKET_A;
-				else
-				
-				s->s3->tmp.next_state=SSL3_ST_CR_FINISHED_A;
-				}
-			s->init_num=0;
-			break;
+      case SSL3_ST_CR_FINISHED_A:
+      case SSL3_ST_CR_FINISHED_B:
+        s->d1->change_cipher_spec_ok = 1;
+        ret =
+            ssl3_get_finished(s, SSL3_ST_CR_FINISHED_A, SSL3_ST_CR_FINISHED_B);
+        if (ret <= 0) {
+          goto end;
+        }
+        dtls1_stop_timer(s);
 
-		case SSL3_ST_CR_SESSION_TICKET_A:
-		case SSL3_ST_CR_SESSION_TICKET_B:
-			ret=ssl3_get_new_session_ticket(s);
-			if (ret <= 0) goto end;
-			s->state=SSL3_ST_CR_FINISHED_A;
-			s->init_num=0;
-		break;
+        if (s->hit) {
+          s->state = SSL3_ST_CW_CHANGE_A;
+        } else {
+          s->state = SSL_ST_OK;
+        }
 
-		case SSL3_ST_CR_CERT_STATUS_A:
-		case SSL3_ST_CR_CERT_STATUS_B:
-			ret=ssl3_get_cert_status(s);
-			if (ret <= 0) goto end;
-			s->state=SSL3_ST_CR_KEY_EXCH_A;
-			s->init_num=0;
-		break;
+        s->init_num = 0;
+        break;
 
-		case SSL3_ST_CR_FINISHED_A:
-		case SSL3_ST_CR_FINISHED_B:
-			s->d1->change_cipher_spec_ok = 1;
-			ret=ssl3_get_finished(s,SSL3_ST_CR_FINISHED_A,
-				SSL3_ST_CR_FINISHED_B);
-			if (ret <= 0) goto end;
-			dtls1_stop_timer(s);
+      case SSL3_ST_CW_FLUSH:
+        s->rwstate = SSL_WRITING;
+        if (BIO_flush(s->wbio) <= 0) {
+          /* If the write error was fatal, stop trying */
+          if (!BIO_should_retry(s->wbio)) {
+            s->rwstate = SSL_NOTHING;
+            s->state = s->s3->tmp.next_state;
+          }
 
-			if (s->hit)
-				s->state=SSL3_ST_CW_CHANGE_A;
-			else
-				s->state=SSL_ST_OK;
+          ret = -1;
+          goto end;
+        }
+        s->rwstate = SSL_NOTHING;
+        s->state = s->s3->tmp.next_state;
+        break;
 
-			s->init_num=0;
-			break;
+      case SSL_ST_OK:
+        /* clean a few things up */
+        ssl3_cleanup_key_block(s);
 
-		case SSL3_ST_CW_FLUSH:
-			s->rwstate=SSL_WRITING;
-			if (BIO_flush(s->wbio) <= 0)
-				{
-				/* If the write error was fatal, stop trying */
-				if (!BIO_should_retry(s->wbio))
-					{
-					s->rwstate=SSL_NOTHING;
-					s->state=s->s3->tmp.next_state;
-					}
-				
-				ret= -1;
-				goto end;
-				}
-			s->rwstate=SSL_NOTHING;
-			s->state=s->s3->tmp.next_state;
-			break;
+        /* Remove write buffering now. */
+        ssl_free_wbio_buffer(s);
 
-		case SSL_ST_OK:
-			/* clean a few things up */
-			ssl3_cleanup_key_block(s);
+        s->init_num = 0;
+        s->renegotiate = 0;
+        s->new_session = 0;
 
-#if 0
-			if (s->init_buf != NULL)
-				{
-				BUF_MEM_free(s->init_buf);
-				s->init_buf=NULL;
-				}
-#endif
+        ssl_update_cache(s, SSL_SESS_CACHE_CLIENT);
+        if (s->hit) {
+          s->ctx->stats.sess_hit++;
+        }
 
-			/* Remove write buffering now. */
-			ssl_free_wbio_buffer(s);
+        ret = 1;
+        s->ctx->stats.sess_connect_good++;
 
-			s->init_num=0;
-			s->renegotiate=0;
-			s->new_session=0;
+        if (cb != NULL)
+          cb(s, SSL_CB_HANDSHAKE_DONE, 1);
 
-			ssl_update_cache(s,SSL_SESS_CACHE_CLIENT);
-			if (s->hit) s->ctx->stats.sess_hit++;
+        /* done with handshaking */
+        s->d1->handshake_read_seq = 0;
+        s->d1->next_handshake_write_seq = 0;
+        goto end;
 
-			ret=1;
-			/* s->server=0; */
-			s->ctx->stats.sess_connect_good++;
+      default:
+        OPENSSL_PUT_ERROR(SSL, dtls1_connect, SSL_R_UNKNOWN_STATE);
+        ret = -1;
+        goto end;
+    }
 
-			if (cb != NULL) cb(s,SSL_CB_HANDSHAKE_DONE,1);
+    /* did we do anything? */
+    if (!s->s3->tmp.reuse_message && !skip) {
+      if ((cb != NULL) && (s->state != state)) {
+        new_state = s->state;
+        s->state = state;
+        cb(s, SSL_CB_CONNECT_LOOP, 1);
+        s->state = new_state;
+      }
+    }
+    skip = 0;
+  }
 
-			/* done with handshaking */
-			s->d1->handshake_read_seq  = 0;
-			s->d1->next_handshake_write_seq = 0;
-			goto end;
-			/* break; */
-			
-		default:
-			OPENSSL_PUT_ERROR(SSL, dtls1_connect, SSL_R_UNKNOWN_STATE);
-			ret= -1;
-			goto end;
-			/* break; */
-			}
-
-		/* did we do anything */
-		if (!s->s3->tmp.reuse_message && !skip)
-			{
-			if ((cb != NULL) && (s->state != state))
-				{
-				new_state=s->state;
-				s->state=state;
-				cb(s,SSL_CB_CONNECT_LOOP,1);
-				s->state=new_state;
-				}
-			}
-		skip=0;
-		}
 end:
-	s->in_handshake--;
-	
-	if (buf != NULL)
-		BUF_MEM_free(buf);
-	if (cb != NULL)
-		cb(s,SSL_CB_CONNECT_EXIT,ret);
-	return(ret);
-	}
+  s->in_handshake--;
 
-static int dtls1_get_hello_verify(SSL *s)
-	{
-	long n;
-	int al, ok = 0;
-	CBS hello_verify_request, cookie;
-	uint16_t server_version;
+  if (buf != NULL) {
+    BUF_MEM_free(buf);
+  }
+  if (cb != NULL) {
+    cb(s, SSL_CB_CONNECT_EXIT, ret);
+  }
+  return ret;
+}
 
-	n=s->method->ssl_get_message(s,
-		DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A,
-		DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B,
-		-1,
-		/* Use the same maximum size as ssl3_get_server_hello. */
-		20000,
-		SSL_GET_MESSAGE_HASH_MESSAGE,
-		&ok);
+static int dtls1_get_hello_verify(SSL *s) {
+  long n;
+  int al, ok = 0;
+  CBS hello_verify_request, cookie;
+  uint16_t server_version;
 
-	if (!ok) return((int)n);
+  n = s->method->ssl_get_message(
+      s, DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A, DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B,
+      -1,
+      /* Use the same maximum size as ssl3_get_server_hello. */
+      20000, SSL_GET_MESSAGE_HASH_MESSAGE, &ok);
 
-	if (s->s3->tmp.message_type != DTLS1_MT_HELLO_VERIFY_REQUEST)
-		{
-		s->d1->send_cookie = 0;
-		s->s3->tmp.reuse_message = 1;
-		return(1);
-		}
+  if (!ok) {
+    return n;
+  }
 
-	CBS_init(&hello_verify_request, s->init_msg, n);
+  if (s->s3->tmp.message_type != DTLS1_MT_HELLO_VERIFY_REQUEST) {
+    s->d1->send_cookie = 0;
+    s->s3->tmp.reuse_message = 1;
+    return 1;
+  }
 
-	if (!CBS_get_u16(&hello_verify_request, &server_version) ||
-		!CBS_get_u8_length_prefixed(&hello_verify_request, &cookie) ||
-		CBS_len(&hello_verify_request) != 0)
-		{
-		al = SSL_AD_DECODE_ERROR;
-		OPENSSL_PUT_ERROR(SSL, ssl3_get_cert_status, SSL_R_DECODE_ERROR);
-		goto f_err;
-		}
+  CBS_init(&hello_verify_request, s->init_msg, n);
 
-	if (CBS_len(&cookie) > sizeof(s->d1->cookie))
-		{
-		al=SSL_AD_ILLEGAL_PARAMETER;
-		goto f_err;
-		}
+  if (!CBS_get_u16(&hello_verify_request, &server_version) ||
+      !CBS_get_u8_length_prefixed(&hello_verify_request, &cookie) ||
+      CBS_len(&hello_verify_request) != 0) {
+    al = SSL_AD_DECODE_ERROR;
+    OPENSSL_PUT_ERROR(SSL, ssl3_get_cert_status, SSL_R_DECODE_ERROR);
+    goto f_err;
+  }
 
-	memcpy(s->d1->cookie, CBS_data(&cookie), CBS_len(&cookie));
-	s->d1->cookie_len = CBS_len(&cookie);
+  if (CBS_len(&cookie) > sizeof(s->d1->cookie)) {
+    al = SSL_AD_ILLEGAL_PARAMETER;
+    goto f_err;
+  }
 
-	s->d1->send_cookie = 1;
-	return 1;
+  memcpy(s->d1->cookie, CBS_data(&cookie), CBS_len(&cookie));
+  s->d1->cookie_len = CBS_len(&cookie);
+
+  s->d1->send_cookie = 1;
+  return 1;
 
 f_err:
-	ssl3_send_alert(s, SSL3_AL_FATAL, al);
-	return -1;
-	}
-
+  ssl3_send_alert(s, SSL3_AL_FATAL, al);
+  return -1;
+}
diff --git a/ssl/d1_lib.c b/ssl/d1_lib.c
index 8fb9e5d..1de75b8 100644
--- a/ssl/d1_lib.c
+++ b/ssl/d1_lib.c
@@ -72,434 +72,408 @@
 #include "ssl_locl.h"
 
 static void get_current_time(OPENSSL_timeval *t);
-static OPENSSL_timeval* dtls1_get_timeout(SSL *s, OPENSSL_timeval* timeleft);
+static OPENSSL_timeval *dtls1_get_timeout(SSL *s, OPENSSL_timeval *timeleft);
 static void dtls1_set_handshake_header(SSL *s, int type, unsigned long len);
-static int dtls1_handshake_write(SSL *s, enum should_add_to_finished_hash should_add_to_finished_hash);
+static int dtls1_handshake_write(
+    SSL *s, enum should_add_to_finished_hash should_add_to_finished_hash);
 static void dtls1_add_to_finished_hash(SSL *s);
 
 const SSL3_ENC_METHOD DTLSv1_enc_data = {
-    	tls1_enc,
-	tls1_mac,
-	tls1_setup_key_block,
-	tls1_generate_master_secret,
-	tls1_change_cipher_state,
-	tls1_final_finish_mac,
-	TLS1_FINISH_MAC_LENGTH,
-	tls1_cert_verify_mac,
-	TLS_MD_CLIENT_FINISH_CONST,TLS_MD_CLIENT_FINISH_CONST_SIZE,
-	TLS_MD_SERVER_FINISH_CONST,TLS_MD_SERVER_FINISH_CONST_SIZE,
-	tls1_alert_code,
-	tls1_export_keying_material,
-	SSL_ENC_FLAG_DTLS|SSL_ENC_FLAG_EXPLICIT_IV,
-	DTLS1_HM_HEADER_LENGTH,
-	dtls1_set_handshake_header,
-	dtls1_handshake_write,
-	dtls1_add_to_finished_hash,
-	};
+  tls1_enc,
+  tls1_mac,
+  tls1_setup_key_block,
+  tls1_generate_master_secret,
+  tls1_change_cipher_state,
+  tls1_final_finish_mac,
+  TLS1_FINISH_MAC_LENGTH,
+  tls1_cert_verify_mac,
+  TLS_MD_CLIENT_FINISH_CONST,TLS_MD_CLIENT_FINISH_CONST_SIZE,
+  TLS_MD_SERVER_FINISH_CONST,TLS_MD_SERVER_FINISH_CONST_SIZE,
+  tls1_alert_code,
+  tls1_export_keying_material,
+  SSL_ENC_FLAG_DTLS|SSL_ENC_FLAG_EXPLICIT_IV,
+  DTLS1_HM_HEADER_LENGTH,
+  dtls1_set_handshake_header,
+  dtls1_handshake_write,
+  dtls1_add_to_finished_hash,
+};
 
 const SSL3_ENC_METHOD DTLSv1_2_enc_data = {
-    	tls1_enc,
-	tls1_mac,
-	tls1_setup_key_block,
-	tls1_generate_master_secret,
-	tls1_change_cipher_state,
-	tls1_final_finish_mac,
-	TLS1_FINISH_MAC_LENGTH,
-	tls1_cert_verify_mac,
-	TLS_MD_CLIENT_FINISH_CONST,TLS_MD_CLIENT_FINISH_CONST_SIZE,
-	TLS_MD_SERVER_FINISH_CONST,TLS_MD_SERVER_FINISH_CONST_SIZE,
-	tls1_alert_code,
-	tls1_export_keying_material,
-	SSL_ENC_FLAG_DTLS|SSL_ENC_FLAG_EXPLICIT_IV|SSL_ENC_FLAG_SIGALGS
-		|SSL_ENC_FLAG_SHA256_PRF|SSL_ENC_FLAG_TLS1_2_CIPHERS,
-	DTLS1_HM_HEADER_LENGTH,
-	dtls1_set_handshake_header,
-	dtls1_handshake_write,
-	dtls1_add_to_finished_hash,
-	};
+  tls1_enc,
+  tls1_mac,
+  tls1_setup_key_block,
+  tls1_generate_master_secret,
+  tls1_change_cipher_state,
+  tls1_final_finish_mac,
+  TLS1_FINISH_MAC_LENGTH,
+  tls1_cert_verify_mac,
+  TLS_MD_CLIENT_FINISH_CONST,TLS_MD_CLIENT_FINISH_CONST_SIZE,
+  TLS_MD_SERVER_FINISH_CONST,TLS_MD_SERVER_FINISH_CONST_SIZE,
+  tls1_alert_code,
+  tls1_export_keying_material,
+  SSL_ENC_FLAG_DTLS | SSL_ENC_FLAG_EXPLICIT_IV | SSL_ENC_FLAG_SIGALGS |
+      SSL_ENC_FLAG_SHA256_PRF | SSL_ENC_FLAG_TLS1_2_CIPHERS,
+  DTLS1_HM_HEADER_LENGTH,
+  dtls1_set_handshake_header,
+  dtls1_handshake_write,
+  dtls1_add_to_finished_hash,
+};
 
-int dtls1_new(SSL *s)
-	{
-	DTLS1_STATE *d1;
+int dtls1_new(SSL *s) {
+  DTLS1_STATE *d1;
 
-	if (!ssl3_new(s)) return(0);
-	if ((d1=OPENSSL_malloc(sizeof *d1)) == NULL)
-		{
-		ssl3_free(s);
-		return (0);
-		}
-	memset(d1,0, sizeof *d1);
+  if (!ssl3_new(s)) {
+    return 0;
+  }
+  d1 = OPENSSL_malloc(sizeof *d1);
+  if (d1 == NULL) {
+    ssl3_free(s);
+    return 0;
+  }
+  memset(d1, 0, sizeof *d1);
 
-	/* d1->handshake_epoch=0; */
+  d1->unprocessed_rcds.q = pqueue_new();
+  d1->processed_rcds.q = pqueue_new();
+  d1->buffered_messages = pqueue_new();
+  d1->sent_messages = pqueue_new();
+  d1->buffered_app_data.q = pqueue_new();
 
-	d1->unprocessed_rcds.q=pqueue_new();
-	d1->processed_rcds.q=pqueue_new();
-	d1->buffered_messages = pqueue_new();
-	d1->sent_messages=pqueue_new();
-	d1->buffered_app_data.q=pqueue_new();
+  if (s->server) {
+    d1->cookie_len = sizeof(s->d1->cookie);
+  }
 
-	if ( s->server)
-		{
-		d1->cookie_len = sizeof(s->d1->cookie);
-		}
+  if (!d1->unprocessed_rcds.q || !d1->processed_rcds.q ||
+      !d1->buffered_messages || !d1->sent_messages ||
+      !d1->buffered_app_data.q) {
+    if (d1->unprocessed_rcds.q) {
+      pqueue_free(d1->unprocessed_rcds.q);
+    }
+    if (d1->processed_rcds.q) {
+      pqueue_free(d1->processed_rcds.q);
+    }
+    if (d1->buffered_messages) {
+      pqueue_free(d1->buffered_messages);
+    }
+    if (d1->sent_messages) {
+      pqueue_free(d1->sent_messages);
+    }
+    if (d1->buffered_app_data.q) {
+      pqueue_free(d1->buffered_app_data.q);
+    }
+    OPENSSL_free(d1);
+    ssl3_free(s);
+    return 0;
+  }
 
-	if( ! d1->unprocessed_rcds.q || ! d1->processed_rcds.q 
-        || ! d1->buffered_messages || ! d1->sent_messages || ! d1->buffered_app_data.q)
-		{
-        if ( d1->unprocessed_rcds.q) pqueue_free(d1->unprocessed_rcds.q);
-        if ( d1->processed_rcds.q) pqueue_free(d1->processed_rcds.q);
-        if ( d1->buffered_messages) pqueue_free(d1->buffered_messages);
-		if ( d1->sent_messages) pqueue_free(d1->sent_messages);
-		if ( d1->buffered_app_data.q) pqueue_free(d1->buffered_app_data.q);
-		OPENSSL_free(d1);
-		ssl3_free(s);
-		return (0);
-		}
+  s->d1 = d1;
+  s->method->ssl_clear(s);
+  return 1;
+}
 
-	s->d1=d1;
-	s->method->ssl_clear(s);
-	return(1);
-	}
+static void dtls1_clear_queues(SSL *s) {
+  pitem *item = NULL;
+  hm_fragment *frag = NULL;
+  DTLS1_RECORD_DATA *rdata;
 
-static void dtls1_clear_queues(SSL *s)
-	{
-    pitem *item = NULL;
-    hm_fragment *frag = NULL;
-	DTLS1_RECORD_DATA *rdata;
+  while ((item = pqueue_pop(s->d1->unprocessed_rcds.q)) != NULL) {
+    rdata = (DTLS1_RECORD_DATA *)item->data;
+    if (rdata->rbuf.buf) {
+      OPENSSL_free(rdata->rbuf.buf);
+    }
+    OPENSSL_free(item->data);
+    pitem_free(item);
+  }
 
-    while( (item = pqueue_pop(s->d1->unprocessed_rcds.q)) != NULL)
-        {
-		rdata = (DTLS1_RECORD_DATA *) item->data;
-		if (rdata->rbuf.buf)
-			{
-			OPENSSL_free(rdata->rbuf.buf);
-			}
-        OPENSSL_free(item->data);
-        pitem_free(item);
-        }
+  while ((item = pqueue_pop(s->d1->processed_rcds.q)) != NULL) {
+    rdata = (DTLS1_RECORD_DATA *)item->data;
+    if (rdata->rbuf.buf) {
+      OPENSSL_free(rdata->rbuf.buf);
+    }
+    OPENSSL_free(item->data);
+    pitem_free(item);
+  }
 
-    while( (item = pqueue_pop(s->d1->processed_rcds.q)) != NULL)
-        {
-		rdata = (DTLS1_RECORD_DATA *) item->data;
-		if (rdata->rbuf.buf)
-			{
-			OPENSSL_free(rdata->rbuf.buf);
-			}
-        OPENSSL_free(item->data);
-        pitem_free(item);
-        }
+  while ((item = pqueue_pop(s->d1->buffered_messages)) != NULL) {
+    frag = (hm_fragment *)item->data;
+    dtls1_hm_fragment_free(frag);
+    pitem_free(item);
+  }
 
-    while( (item = pqueue_pop(s->d1->buffered_messages)) != NULL)
-        {
-        frag = (hm_fragment *)item->data;
-        dtls1_hm_fragment_free(frag);
-        pitem_free(item);
-        }
+  while ((item = pqueue_pop(s->d1->sent_messages)) != NULL) {
+    frag = (hm_fragment *)item->data;
+    dtls1_hm_fragment_free(frag);
+    pitem_free(item);
+  }
 
-    while ( (item = pqueue_pop(s->d1->sent_messages)) != NULL)
-        {
-        frag = (hm_fragment *)item->data;
-        dtls1_hm_fragment_free(frag);
-        pitem_free(item);
-        }
+  while ((item = pqueue_pop(s->d1->buffered_app_data.q)) != NULL) {
+    rdata = (DTLS1_RECORD_DATA *)item->data;
+    if (rdata->rbuf.buf) {
+      OPENSSL_free(rdata->rbuf.buf);
+    }
+    OPENSSL_free(item->data);
+    pitem_free(item);
+  }
+}
 
-	while ( (item = pqueue_pop(s->d1->buffered_app_data.q)) != NULL)
-		{
-		rdata = (DTLS1_RECORD_DATA *) item->data;
-		if (rdata->rbuf.buf)
-			{
-			OPENSSL_free(rdata->rbuf.buf);
-			}
-		OPENSSL_free(item->data);
-		pitem_free(item);
-		}
-	}
+void dtls1_free(SSL *s) {
+  ssl3_free(s);
 
-void dtls1_free(SSL *s)
-	{
-	ssl3_free(s);
+  dtls1_clear_queues(s);
 
-	dtls1_clear_queues(s);
+  pqueue_free(s->d1->unprocessed_rcds.q);
+  pqueue_free(s->d1->processed_rcds.q);
+  pqueue_free(s->d1->buffered_messages);
+  pqueue_free(s->d1->sent_messages);
+  pqueue_free(s->d1->buffered_app_data.q);
 
-    pqueue_free(s->d1->unprocessed_rcds.q);
-    pqueue_free(s->d1->processed_rcds.q);
-    pqueue_free(s->d1->buffered_messages);
-	pqueue_free(s->d1->sent_messages);
-	pqueue_free(s->d1->buffered_app_data.q);
+  OPENSSL_free(s->d1);
+  s->d1 = NULL;
+}
 
-	OPENSSL_free(s->d1);
-	s->d1 = NULL;
-	}
+void dtls1_clear(SSL *s) {
+  pqueue unprocessed_rcds;
+  pqueue processed_rcds;
+  pqueue buffered_messages;
+  pqueue sent_messages;
+  pqueue buffered_app_data;
+  unsigned int mtu;
 
-void dtls1_clear(SSL *s)
-	{
-    pqueue unprocessed_rcds;
-    pqueue processed_rcds;
-    pqueue buffered_messages;
-	pqueue sent_messages;
-	pqueue buffered_app_data;
-	unsigned int mtu;
+  if (s->d1) {
+    unprocessed_rcds = s->d1->unprocessed_rcds.q;
+    processed_rcds = s->d1->processed_rcds.q;
+    buffered_messages = s->d1->buffered_messages;
+    sent_messages = s->d1->sent_messages;
+    buffered_app_data = s->d1->buffered_app_data.q;
+    mtu = s->d1->mtu;
 
-	if (s->d1)
-		{
-		unprocessed_rcds = s->d1->unprocessed_rcds.q;
-		processed_rcds = s->d1->processed_rcds.q;
-		buffered_messages = s->d1->buffered_messages;
-		sent_messages = s->d1->sent_messages;
-		buffered_app_data = s->d1->buffered_app_data.q;
-		mtu = s->d1->mtu;
+    dtls1_clear_queues(s);
 
-		dtls1_clear_queues(s);
+    memset(s->d1, 0, sizeof(*(s->d1)));
 
-		memset(s->d1, 0, sizeof(*(s->d1)));
+    if (SSL_get_options(s) & SSL_OP_NO_QUERY_MTU) {
+      s->d1->mtu = mtu;
+    }
 
-		if (SSL_get_options(s) & SSL_OP_NO_QUERY_MTU)
-			{
-			s->d1->mtu = mtu;
-			}
+    s->d1->unprocessed_rcds.q = unprocessed_rcds;
+    s->d1->processed_rcds.q = processed_rcds;
+    s->d1->buffered_messages = buffered_messages;
+    s->d1->sent_messages = sent_messages;
+    s->d1->buffered_app_data.q = buffered_app_data;
+  }
 
-		s->d1->unprocessed_rcds.q = unprocessed_rcds;
-		s->d1->processed_rcds.q = processed_rcds;
-		s->d1->buffered_messages = buffered_messages;
-		s->d1->sent_messages = sent_messages;
-		s->d1->buffered_app_data.q = buffered_app_data;
-		}
+  ssl3_clear(s);
+  s->version = DTLS1_2_VERSION;
+}
 
-	ssl3_clear(s);
-	s->version = DTLS1_2_VERSION;
-	}
+long dtls1_ctrl(SSL *s, int cmd, long larg, void *parg) {
+  int ret = 0;
 
-long dtls1_ctrl(SSL *s, int cmd, long larg, void *parg)
-	{
-	int ret=0;
+  switch (cmd) {
+    case DTLS_CTRL_GET_TIMEOUT:
+      if (dtls1_get_timeout(s, (OPENSSL_timeval *)parg) != NULL) {
+        ret = 1;
+      }
+      break;
 
-	switch (cmd)
-		{
-	case DTLS_CTRL_GET_TIMEOUT:
-		if (dtls1_get_timeout(s, (OPENSSL_timeval*) parg) != NULL)
-			{
-			ret = 1;
-			}
-		break;
-	case DTLS_CTRL_HANDLE_TIMEOUT:
-		ret = dtls1_handle_timeout(s);
-		break;
+    case DTLS_CTRL_HANDLE_TIMEOUT:
+      ret = dtls1_handle_timeout(s);
+      break;
 
-	default:
-		ret = ssl3_ctrl(s, cmd, larg, parg);
-		break;
-		}
-	return(ret);
-	}
+    default:
+      ret = ssl3_ctrl(s, cmd, larg, parg);
+      break;
+  }
 
-/*
- * As it's impossible to use stream ciphers in "datagram" mode, this
+  return ret;
+}
+
+/* As it's impossible to use stream ciphers in "datagram" mode, this
  * simple filter is designed to disengage them in DTLS. Unfortunately
  * there is no universal way to identify stream SSL_CIPHER, so we have
  * to explicitly list their SSL_* codes. Currently RC4 is the only one
- * available, but if new ones emerge, they will have to be added...
- */
-const SSL_CIPHER *dtls1_get_cipher(unsigned int u)
-	{
-	const SSL_CIPHER *ciph = ssl3_get_cipher(u);
+ * available, but if new ones emerge, they will have to be added... */
+const SSL_CIPHER *dtls1_get_cipher(unsigned int u) {
+  const SSL_CIPHER *ciph = ssl3_get_cipher(u);
 
-	if (ciph != NULL)
-		{
-		if (ciph->algorithm_enc == SSL_RC4)
-			return NULL;
-		/* TODO(davidben): EVP_AEAD does not work in DTLS yet. */
-		if (ciph->algorithm2 & SSL_CIPHER_ALGORITHM2_AEAD ||
-			ciph->algorithm2 & SSL_CIPHER_ALGORITHM2_STATEFUL_AEAD)
-			return NULL;
-		}
+  if (ciph != NULL) {
+    if (ciph->algorithm_enc == SSL_RC4) {
+      return NULL;
+    }
+    /* TODO(davidben): EVP_AEAD does not work in DTLS yet. */
+    if (ciph->algorithm2 & SSL_CIPHER_ALGORITHM2_AEAD ||
+        ciph->algorithm2 & SSL_CIPHER_ALGORITHM2_STATEFUL_AEAD) {
+      return NULL;
+    }
+  }
 
-	return ciph;
-	}
+  return ciph;
+}
 
-void dtls1_start_timer(SSL *s)
-	{
-	/* If timer is not set, initialize duration with 1 second */
-	if (s->d1->next_timeout.tv_sec == 0 && s->d1->next_timeout.tv_usec == 0)
-		{
-		s->d1->timeout_duration = 1;
-		}
-	
-	/* Set timeout to current time */
-	get_current_time(&s->d1->next_timeout);
+void dtls1_start_timer(SSL *s) {
+  /* If timer is not set, initialize duration with 1 second */
+  if (s->d1->next_timeout.tv_sec == 0 && s->d1->next_timeout.tv_usec == 0) {
+    s->d1->timeout_duration = 1;
+  }
 
-	/* Add duration to current time */
-	s->d1->next_timeout.tv_sec += s->d1->timeout_duration;
-	BIO_ctrl(SSL_get_rbio(s), BIO_CTRL_DGRAM_SET_NEXT_TIMEOUT, 0, &s->d1->next_timeout);
-	}
+  /* Set timeout to current time */
+  get_current_time(&s->d1->next_timeout);
 
-static OPENSSL_timeval* dtls1_get_timeout(SSL *s, OPENSSL_timeval* timeleft)
-	{
-	OPENSSL_timeval timenow;
+  /* Add duration to current time */
+  s->d1->next_timeout.tv_sec += s->d1->timeout_duration;
+  BIO_ctrl(SSL_get_rbio(s), BIO_CTRL_DGRAM_SET_NEXT_TIMEOUT, 0,
+           &s->d1->next_timeout);
+}
 
-	/* If no timeout is set, just return NULL */
-	if (s->d1->next_timeout.tv_sec == 0 && s->d1->next_timeout.tv_usec == 0)
-		{
-		return NULL;
-		}
+static OPENSSL_timeval *dtls1_get_timeout(SSL *s, OPENSSL_timeval *timeleft) {
+  OPENSSL_timeval timenow;
 
-	/* Get current time */
-	get_current_time(&timenow);
+  /* If no timeout is set, just return NULL */
+  if (s->d1->next_timeout.tv_sec == 0 && s->d1->next_timeout.tv_usec == 0) {
+    return NULL;
+  }
 
-	/* If timer already expired, set remaining time to 0 */
-	if (s->d1->next_timeout.tv_sec < timenow.tv_sec ||
-		(s->d1->next_timeout.tv_sec == timenow.tv_sec &&
-		 s->d1->next_timeout.tv_usec <= timenow.tv_usec))
-		{
-		memset(timeleft, 0, sizeof(OPENSSL_timeval));
-		return timeleft;
-		}
+  /* Get current time */
+  get_current_time(&timenow);
 
-	/* Calculate time left until timer expires */
-	memcpy(timeleft, &s->d1->next_timeout, sizeof(OPENSSL_timeval));
-	timeleft->tv_sec -= timenow.tv_sec;
-	timeleft->tv_usec -= timenow.tv_usec;
-	if (timeleft->tv_usec < 0)
-		{
-		timeleft->tv_sec--;
-		timeleft->tv_usec += 1000000;
-		}
+  /* If timer already expired, set remaining time to 0 */
+  if (s->d1->next_timeout.tv_sec < timenow.tv_sec ||
+      (s->d1->next_timeout.tv_sec == timenow.tv_sec &&
+       s->d1->next_timeout.tv_usec <= timenow.tv_usec)) {
+    memset(timeleft, 0, sizeof(OPENSSL_timeval));
+    return timeleft;
+  }
 
-	/* If remaining time is less than 15 ms, set it to 0
-	 * to prevent issues because of small devergences with
-	 * socket timeouts.
-	 */
-	if (timeleft->tv_sec == 0 && timeleft->tv_usec < 15000)
-		{
-		memset(timeleft, 0, sizeof(OPENSSL_timeval));
-		}
-	
+  /* Calculate time left until timer expires */
+  memcpy(timeleft, &s->d1->next_timeout, sizeof(OPENSSL_timeval));
+  timeleft->tv_sec -= timenow.tv_sec;
+  timeleft->tv_usec -= timenow.tv_usec;
+  if (timeleft->tv_usec < 0) {
+    timeleft->tv_sec--;
+    timeleft->tv_usec += 1000000;
+  }
 
-	return timeleft;
-	}
+  /* If remaining time is less than 15 ms, set it to 0 to prevent issues
+   * because of small devergences with socket timeouts. */
+  if (timeleft->tv_sec == 0 && timeleft->tv_usec < 15000) {
+    memset(timeleft, 0, sizeof(OPENSSL_timeval));
+  }
 
-int dtls1_is_timer_expired(SSL *s)
-	{
-	OPENSSL_timeval timeleft;
+  return timeleft;
+}
 
-	/* Get time left until timeout, return false if no timer running */
-	if (dtls1_get_timeout(s, &timeleft) == NULL)
-		{
-		return 0;
-		}
+int dtls1_is_timer_expired(SSL *s) {
+  OPENSSL_timeval timeleft;
 
-	/* Return false if timer is not expired yet */
-	if (timeleft.tv_sec > 0 || timeleft.tv_usec > 0)
-		{
-		return 0;
-		}
+  /* Get time left until timeout, return false if no timer running */
+  if (dtls1_get_timeout(s, &timeleft) == NULL) {
+    return 0;
+  }
 
-	/* Timer expired, so return true */	
-	return 1;
-	}
+  /* Return false if timer is not expired yet */
+  if (timeleft.tv_sec > 0 || timeleft.tv_usec > 0) {
+    return 0;
+  }
 
-void dtls1_double_timeout(SSL *s)
-	{
-	s->d1->timeout_duration *= 2;
-	if (s->d1->timeout_duration > 60)
-		s->d1->timeout_duration = 60;
-	dtls1_start_timer(s);
-	}
+  /* Timer expired, so return true */
+  return 1;
+}
 
-void dtls1_stop_timer(SSL *s)
-	{
-	/* Reset everything */
-	memset(&(s->d1->timeout), 0, sizeof(struct dtls1_timeout_st));
-	memset(&s->d1->next_timeout, 0, sizeof(OPENSSL_timeval));
-	s->d1->timeout_duration = 1;
-	BIO_ctrl(SSL_get_rbio(s), BIO_CTRL_DGRAM_SET_NEXT_TIMEOUT, 0, &s->d1->next_timeout);
-	/* Clear retransmission buffer */
-	dtls1_clear_record_buffer(s);
-	}
+void dtls1_double_timeout(SSL *s) {
+  s->d1->timeout_duration *= 2;
+  if (s->d1->timeout_duration > 60) {
+    s->d1->timeout_duration = 60;
+  }
+  dtls1_start_timer(s);
+}
 
-int dtls1_check_timeout_num(SSL *s)
-	{
-	s->d1->timeout.num_alerts++;
+void dtls1_stop_timer(SSL *s) {
+  /* Reset everything */
+  memset(&(s->d1->timeout), 0, sizeof(struct dtls1_timeout_st));
+  memset(&s->d1->next_timeout, 0, sizeof(OPENSSL_timeval));
+  s->d1->timeout_duration = 1;
+  BIO_ctrl(SSL_get_rbio(s), BIO_CTRL_DGRAM_SET_NEXT_TIMEOUT, 0,
+           &s->d1->next_timeout);
+  /* Clear retransmission buffer */
+  dtls1_clear_record_buffer(s);
+}
 
-	/* Reduce MTU after 2 unsuccessful retransmissions */
-	if (s->d1->timeout.num_alerts > 2)
-		{
-		s->d1->mtu = BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_GET_FALLBACK_MTU, 0, NULL);		
-		}
+int dtls1_check_timeout_num(SSL *s) {
+  s->d1->timeout.num_alerts++;
 
-	if (s->d1->timeout.num_alerts > DTLS1_TMO_ALERT_COUNT)
-		{
-		/* fail the connection, enough alerts have been sent */
-		OPENSSL_PUT_ERROR(SSL, dtls1_check_timeout_num, SSL_R_READ_TIMEOUT_EXPIRED);
-		return -1;
-		}
+  /* Reduce MTU after 2 unsuccessful retransmissions */
+  if (s->d1->timeout.num_alerts > 2) {
+    s->d1->mtu =
+        BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_GET_FALLBACK_MTU, 0, NULL);
+  }
 
-	return 0;
-	}
+  if (s->d1->timeout.num_alerts > DTLS1_TMO_ALERT_COUNT) {
+    /* fail the connection, enough alerts have been sent */
+    OPENSSL_PUT_ERROR(SSL, dtls1_check_timeout_num, SSL_R_READ_TIMEOUT_EXPIRED);
+    return -1;
+  }
 
-int dtls1_handle_timeout(SSL *s)
-	{
-	/* if no timer is expired, don't do anything */
-	if (!dtls1_is_timer_expired(s))
-		{
-		return 0;
-		}
+  return 0;
+}
 
-	dtls1_double_timeout(s);
+int dtls1_handle_timeout(SSL *s) {
+  /* if no timer is expired, don't do anything */
+  if (!dtls1_is_timer_expired(s)) {
+    return 0;
+  }
 
-	if (dtls1_check_timeout_num(s) < 0)
-		return -1;
+  dtls1_double_timeout(s);
 
-	s->d1->timeout.read_timeouts++;
-	if (s->d1->timeout.read_timeouts > DTLS1_TMO_READ_COUNT)
-		{
-		s->d1->timeout.read_timeouts = 1;
-		}
+  if (dtls1_check_timeout_num(s) < 0) {
+    return -1;
+  }
 
-	dtls1_start_timer(s);
-	return dtls1_retransmit_buffered_messages(s);
-	}
+  s->d1->timeout.read_timeouts++;
+  if (s->d1->timeout.read_timeouts > DTLS1_TMO_READ_COUNT) {
+    s->d1->timeout.read_timeouts = 1;
+  }
 
-static void get_current_time(OPENSSL_timeval *t)
-{
+  dtls1_start_timer(s);
+  return dtls1_retransmit_buffered_messages(s);
+}
+
+static void get_current_time(OPENSSL_timeval *t) {
 #if defined(OPENSSL_WINDOWS)
-	struct _timeb time;
-	_ftime(&time);
-	t->tv_sec = time.time;
-	t->tv_usec = time.millitm * 1000;
+  struct _timeb time;
+  _ftime(&time);
+  t->tv_sec = time.time;
+  t->tv_usec = time.millitm * 1000;
 #else
-	gettimeofday(t, NULL);
+  gettimeofday(t, NULL);
 #endif
 }
 
-static void dtls1_set_handshake_header(SSL *s, int htype, unsigned long len)
-	{
-	unsigned char *p = (unsigned char *)s->init_buf->data;
-	dtls1_set_message_header(s, p, htype, len, 0, len);
-	s->init_num = (int)len + DTLS1_HM_HEADER_LENGTH;
-	s->init_off = 0;
-	/* Buffer the message to handle re-xmits */
-	dtls1_buffer_message(s, 0);
-	}
+static void dtls1_set_handshake_header(SSL *s, int htype, unsigned long len) {
+  uint8_t *p = (uint8_t *)s->init_buf->data;
+  dtls1_set_message_header(s, p, htype, len, 0, len);
+  s->init_num = (int)len + DTLS1_HM_HEADER_LENGTH;
+  s->init_off = 0;
+  /* Buffer the message to handle re-xmits */
+  dtls1_buffer_message(s, 0);
+}
 
-static int dtls1_handshake_write(SSL *s, enum should_add_to_finished_hash should_add_to_finished_hash)
-	{
-	return dtls1_do_write(s, SSL3_RT_HANDSHAKE, should_add_to_finished_hash);
-	}
+static int dtls1_handshake_write(
+    SSL *s, enum should_add_to_finished_hash should_add_to_finished_hash) {
+  return dtls1_do_write(s, SSL3_RT_HANDSHAKE, should_add_to_finished_hash);
+}
 
-static void dtls1_add_to_finished_hash(SSL *s)
-	{
-	uint8_t *record = (uint8_t *) &s->init_buf->data[s->init_off];
-	const struct hm_header_st *msg_hdr = &s->d1->w_msg_hdr;
-	uint8_t serialised_header[DTLS1_HM_HEADER_LENGTH];
-	uint8_t *p = serialised_header;
+static void dtls1_add_to_finished_hash(SSL *s) {
+  uint8_t *record = (uint8_t *)&s->init_buf->data[s->init_off];
+  const struct hm_header_st *msg_hdr = &s->d1->w_msg_hdr;
+  uint8_t serialised_header[DTLS1_HM_HEADER_LENGTH];
+  uint8_t *p = serialised_header;
 
-	/* Construct the message header as if it were a single fragment. */
-	*p++ = msg_hdr->type;
-	l2n3(msg_hdr->msg_len, p);
-	s2n (msg_hdr->seq, p);
-	l2n3(0, p);
-	l2n3(msg_hdr->msg_len, p);
-	ssl3_finish_mac(s, serialised_header, sizeof(serialised_header));
-	ssl3_finish_mac(s, record + DTLS1_HM_HEADER_LENGTH,
-			s->init_num - DTLS1_HM_HEADER_LENGTH);
-	}
+  /* Construct the message header as if it were a single fragment. */
+  *p++ = msg_hdr->type;
+  l2n3(msg_hdr->msg_len, p);
+  s2n(msg_hdr->seq, p);
+  l2n3(0, p);
+  l2n3(msg_hdr->msg_len, p);
+  ssl3_finish_mac(s, serialised_header, sizeof(serialised_header));
+  ssl3_finish_mac(s, record + DTLS1_HM_HEADER_LENGTH,
+                  s->init_num - DTLS1_HM_HEADER_LENGTH);
+}
diff --git a/ssl/d1_meth.c b/ssl/d1_meth.c
index eed0402..c5a062b 100644
--- a/ssl/d1_meth.c
+++ b/ssl/d1_meth.c
@@ -59,29 +59,29 @@
 
 
 static const SSL_PROTOCOL_METHOD DTLS_protocol_method = {
-    dtls1_new,
-    dtls1_clear,
-    dtls1_free,
-    dtls1_accept,
-    dtls1_connect,
-    ssl3_read,
-    ssl3_peek,
-    ssl3_write,
-    dtls1_shutdown,
-    ssl3_renegotiate,
-    ssl3_renegotiate_check,
-    dtls1_get_message,
-    dtls1_read_bytes,
-    dtls1_write_app_data_bytes,
-    dtls1_dispatch_alert,
-    dtls1_ctrl,
-    ssl3_ctx_ctrl,
-    ssl3_pending,
-    ssl3_num_ciphers,
-    dtls1_get_cipher,
-    ssl_undefined_void_function,
-    ssl3_callback_ctrl,
-    ssl3_ctx_callback_ctrl,
+  dtls1_new,
+  dtls1_clear,
+  dtls1_free,
+  dtls1_accept,
+  dtls1_connect,
+  ssl3_read,
+  ssl3_peek,
+  ssl3_write,
+  dtls1_shutdown,
+  ssl3_renegotiate,
+  ssl3_renegotiate_check,
+  dtls1_get_message,
+  dtls1_read_bytes,
+  dtls1_write_app_data_bytes,
+  dtls1_dispatch_alert,
+  dtls1_ctrl,
+  ssl3_ctx_ctrl,
+  ssl3_pending,
+  ssl3_num_ciphers,
+  dtls1_get_cipher,
+  ssl_undefined_void_function,
+  ssl3_callback_ctrl,
+  ssl3_ctx_callback_ctrl,
 };
 
 const SSL_METHOD *DTLS_method(void) {
diff --git a/ssl/d1_pkt.c b/ssl/d1_pkt.c
index 0021657..59fc6f4 100644
--- a/ssl/d1_pkt.c
+++ b/ssl/d1_pkt.c
@@ -120,574 +120,498 @@
 #include <openssl/rand.h>
 
 #include "ssl_locl.h"
+
+
 /* mod 128 saturating subtract of two 64-bit values in big-endian order */
-static int satsub64be(const unsigned char *v1,const unsigned char *v2)
-{	int ret,sat,brw,i;
+static int satsub64be(const uint8_t *v1, const uint8_t *v2) {
+  int ret, sat, brw, i;
 
-	if (sizeof(long) == 8) do
-	{	const union { long one; char little; } is_endian = {1};
-		long l;
+  if (sizeof(long) == 8) {
+    do {
+      const union {
+        long one;
+        char little;
+      } is_endian = {1};
+      long l;
 
-		if (is_endian.little)			break;
-		/* not reached on little-endians */
-		/* following test is redundant, because input is
-		 * always aligned, but I take no chances... */
-		if (((size_t)v1|(size_t)v2)&0x7)	break;
+      if (is_endian.little) {
+        break;
+      }
+      /* not reached on little-endians */
+      /* following test is redundant, because input is
+       * always aligned, but I take no chances... */
+      if (((size_t)v1 | (size_t)v2) & 0x7) {
+        break;
+      }
 
-		l  = *((long *)v1);
-		l -= *((long *)v2);
-		if (l>128)		return 128;
-		else if (l<-128)	return -128;
-		else			return (int)l;
-	} while (0);
+      l = *((long *)v1);
+      l -= *((long *)v2);
+      if (l > 128) {
+        return 128;
+      } else if (l < -128) {
+        return -128;
+      } else {
+        return (int)l;
+      }
+    } while (0);
+  }
 
-	ret = (int)v1[7]-(int)v2[7];
-	sat = 0;
-	brw = ret>>8;	/* brw is either 0 or -1 */
-	if (ret & 0x80)
-	{	for (i=6;i>=0;i--)
-		{	brw += (int)v1[i]-(int)v2[i];
-			sat |= ~brw;
-			brw >>= 8;
-		}
-	}
-	else
-	{	for (i=6;i>=0;i--)
-		{	brw += (int)v1[i]-(int)v2[i];
-			sat |= brw;
-			brw >>= 8;
-		}
-	}
-	brw <<= 8;	/* brw is either 0 or -256 */
+  ret = (int)v1[7] - (int)v2[7];
+  sat = 0;
+  brw = ret >> 8; /* brw is either 0 or -1 */
+  if (ret & 0x80) {
+    for (i = 6; i >= 0; i--) {
+      brw += (int)v1[i] - (int)v2[i];
+      sat |= ~brw;
+      brw >>= 8;
+    }
+  } else {
+    for (i = 6; i >= 0; i--) {
+      brw += (int)v1[i] - (int)v2[i];
+      sat |= brw;
+      brw >>= 8;
+    }
+  }
+  brw <<= 8; /* brw is either 0 or -256 */
 
-	if (sat&0xff)	return brw | 0x80;
-	else		return brw + (ret&0xFF);
+  if (sat & 0xff) {
+    return brw | 0x80;
+  } else {
+    return brw + (ret & 0xFF);
+  }
 }
 
-static int have_handshake_fragment(SSL *s, int type, unsigned char *buf, 
-	int len, int peek);
+static int have_handshake_fragment(SSL *s, int type, uint8_t *buf, int len,
+                                   int peek);
 static int dtls1_record_replay_check(SSL *s, DTLS1_BITMAP *bitmap);
 static void dtls1_record_bitmap_update(SSL *s, DTLS1_BITMAP *bitmap);
-static DTLS1_BITMAP *dtls1_get_bitmap(SSL *s, SSL3_RECORD *rr, 
-    unsigned int *is_next_epoch);
-#if 0
-static int dtls1_record_needs_buffering(SSL *s, SSL3_RECORD *rr,
-	unsigned short *priority, unsigned long *offset);
-#endif
+static DTLS1_BITMAP *dtls1_get_bitmap(SSL *s, SSL3_RECORD *rr,
+                                      unsigned int *is_next_epoch);
 static int dtls1_buffer_record(SSL *s, record_pqueue *q,
-	unsigned char *priority);
+                               uint8_t *priority);
 static int dtls1_process_record(SSL *s);
-static int do_dtls1_write(SSL *s, int type, const unsigned char *buf,
-			  unsigned int len);
+static int do_dtls1_write(SSL *s, int type, const uint8_t *buf,
+                          unsigned int len);
 
 /* copy buffered record into SSL structure */
-static int
-dtls1_copy_record(SSL *s, pitem *item)
-    {
-    DTLS1_RECORD_DATA *rdata;
+static int dtls1_copy_record(SSL *s, pitem *item) {
+  DTLS1_RECORD_DATA *rdata;
 
-    rdata = (DTLS1_RECORD_DATA *)item->data;
-    
-    if (s->s3->rbuf.buf != NULL)
-        OPENSSL_free(s->s3->rbuf.buf);
-    
-    s->packet = rdata->packet;
-    s->packet_length = rdata->packet_length;
-    memcpy(&(s->s3->rbuf), &(rdata->rbuf), sizeof(SSL3_BUFFER));
-    memcpy(&(s->s3->rrec), &(rdata->rrec), sizeof(SSL3_RECORD));
-	
-	/* Set proper sequence number for mac calculation */
-	memcpy(&(s->s3->read_sequence[2]), &(rdata->packet[5]), 6);
-    
-    return(1);
-    }
+  rdata = (DTLS1_RECORD_DATA *)item->data;
 
+  if (s->s3->rbuf.buf != NULL) {
+    OPENSSL_free(s->s3->rbuf.buf);
+  }
 
-static int
-dtls1_buffer_record(SSL *s, record_pqueue *queue, unsigned char *priority)
-	{
-	DTLS1_RECORD_DATA *rdata;
-	pitem *item;
+  s->packet = rdata->packet;
+  s->packet_length = rdata->packet_length;
+  memcpy(&(s->s3->rbuf), &(rdata->rbuf), sizeof(SSL3_BUFFER));
+  memcpy(&(s->s3->rrec), &(rdata->rrec), sizeof(SSL3_RECORD));
 
-	/* Limit the size of the queue to prevent DOS attacks */
-	if (pqueue_size(queue->q) >= 100)
-		return 0;
-		
-	rdata = OPENSSL_malloc(sizeof(DTLS1_RECORD_DATA));
-	item = pitem_new(priority, rdata);
-	if (rdata == NULL || item == NULL)
-		{
-		if (rdata != NULL) OPENSSL_free(rdata);
-		if (item != NULL) pitem_free(item);
-		
-		OPENSSL_PUT_ERROR(SSL, dtls1_buffer_record, ERR_R_INTERNAL_ERROR);
-		return(0);
-		}
-	
-	rdata->packet = s->packet;
-	rdata->packet_length = s->packet_length;
-	memcpy(&(rdata->rbuf), &(s->s3->rbuf), sizeof(SSL3_BUFFER));
-	memcpy(&(rdata->rrec), &(s->s3->rrec), sizeof(SSL3_RECORD));
+  /* Set proper sequence number for mac calculation */
+  memcpy(&(s->s3->read_sequence[2]), &(rdata->packet[5]), 6);
 
-	item->data = rdata;
-
-	s->packet = NULL;
-	s->packet_length = 0;
-	memset(&(s->s3->rbuf), 0, sizeof(SSL3_BUFFER));
-	memset(&(s->s3->rrec), 0, sizeof(SSL3_RECORD));
-	
-	if (!ssl3_setup_buffers(s))
-		{
-		OPENSSL_PUT_ERROR(SSL, dtls1_buffer_record, ERR_R_INTERNAL_ERROR);
-		OPENSSL_free(rdata);
-		pitem_free(item);
-		return(0);
-		}
-
-	/* insert should not fail, since duplicates are dropped */
-	if (pqueue_insert(queue->q, item) == NULL)
-		{
-		OPENSSL_PUT_ERROR(SSL, dtls1_buffer_record, ERR_R_INTERNAL_ERROR);
-		OPENSSL_free(rdata);
-		pitem_free(item);
-		return(0);
-		}
-
-	return(1);
-	}
-
-
-static int
-dtls1_retrieve_buffered_record(SSL *s, record_pqueue *queue)
-    {
-    pitem *item;
-
-    item = pqueue_pop(queue->q);
-    if (item)
-        {
-        dtls1_copy_record(s, item);
-
-        OPENSSL_free(item->data);
-		pitem_free(item);
-
-        return(1);
-        }
-
-    return(0);
-    }
-
-
-/* retrieve a buffered record that belongs to the new epoch, i.e., not processed 
- * yet */
-#define dtls1_get_unprocessed_record(s) \
-                   dtls1_retrieve_buffered_record((s), \
-                   &((s)->d1->unprocessed_rcds))
-
-/* retrieve a buffered record that belongs to the current epoch, ie, processed */
-#define dtls1_get_processed_record(s) \
-                   dtls1_retrieve_buffered_record((s), \
-                   &((s)->d1->processed_rcds))
-
-static int
-dtls1_process_buffered_records(SSL *s)
-    {
-    pitem *item;
-    
-    item = pqueue_peek(s->d1->unprocessed_rcds.q);
-    if (item)
-        {
-        /* Check if epoch is current. */
-        if (s->d1->unprocessed_rcds.epoch != s->d1->r_epoch)
-            return(1);  /* Nothing to do. */
-        
-        /* Process all the records. */
-        while (pqueue_peek(s->d1->unprocessed_rcds.q))
-            {
-            dtls1_get_unprocessed_record(s);
-            if ( ! dtls1_process_record(s))
-                return(0);
-            dtls1_buffer_record(s, &(s->d1->processed_rcds), 
-                s->s3->rrec.seq_num);
-            }
-        }
-
-    /* sync epoch numbers once all the unprocessed records 
-     * have been processed */
-    s->d1->processed_rcds.epoch = s->d1->r_epoch;
-    s->d1->unprocessed_rcds.epoch = s->d1->r_epoch + 1;
-
-    return(1);
-    }
-
-
-#if 0
-
-static int
-dtls1_get_buffered_record(SSL *s)
-	{
-	pitem *item;
-	PQ_64BIT priority = 
-		(((PQ_64BIT)s->d1->handshake_read_seq) << 32) | 
-		((PQ_64BIT)s->d1->r_msg_hdr.frag_off);
-	
-	if ( ! SSL_in_init(s))  /* if we're not (re)negotiating, 
-							   nothing buffered */
-		return 0;
-
-
-	item = pqueue_peek(s->d1->rcvd_records);
-	if (item && item->priority == priority)
-		{
-		/* Check if we've received the record of interest.  It must be
-		 * a handshake record, since data records as passed up without
-		 * buffering */
-		DTLS1_RECORD_DATA *rdata;
-		item = pqueue_pop(s->d1->rcvd_records);
-		rdata = (DTLS1_RECORD_DATA *)item->data;
-		
-		if (s->s3->rbuf.buf != NULL)
-			OPENSSL_free(s->s3->rbuf.buf);
-		
-		s->packet = rdata->packet;
-		s->packet_length = rdata->packet_length;
-		memcpy(&(s->s3->rbuf), &(rdata->rbuf), sizeof(SSL3_BUFFER));
-		memcpy(&(s->s3->rrec), &(rdata->rrec), sizeof(SSL3_RECORD));
-		
-		OPENSSL_free(item->data);
-		pitem_free(item);
-		
-		/* s->d1->next_expected_seq_num++; */
-		return(1);
-		}
-	
-	return 0;
-	}
-
-#endif
-
-static int
-dtls1_process_record(SSL *s)
-{
-	int i,al;
-	int enc_err;
-	SSL_SESSION *sess;
-	SSL3_RECORD *rr;
-	unsigned int mac_size, orig_len;
-	unsigned char md[EVP_MAX_MD_SIZE];
-
-	rr= &(s->s3->rrec);
-	sess = s->session;
-
-	/* At this point, s->packet_length == SSL3_RT_HEADER_LNGTH + rr->length,
-	 * and we have that many bytes in s->packet
-	 */
-	rr->input= &(s->packet[DTLS1_RT_HEADER_LENGTH]);
-
-	/* ok, we can now read from 's->packet' data into 'rr'
-	 * rr->input points at rr->length bytes, which
-	 * need to be copied into rr->data by either
-	 * the decryption or by the decompression
-	 * When the data is 'copied' into the rr->data buffer,
-	 * rr->input will be pointed at the new buffer */ 
-
-	/* We now have - encrypted [ MAC [ compressed [ plain ] ] ]
-	 * rr->length bytes of encrypted compressed stuff. */
-
-	/* check is not needed I believe */
-	if (rr->length > SSL3_RT_MAX_ENCRYPTED_LENGTH)
-		{
-		al=SSL_AD_RECORD_OVERFLOW;
-		OPENSSL_PUT_ERROR(SSL, dtls1_process_record, SSL_R_ENCRYPTED_LENGTH_TOO_LONG);
-		goto f_err;
-		}
-
-	/* decrypt in place in 'rr->input' */
-	rr->data=rr->input;
-
-	enc_err = s->enc_method->enc(s,0);
-	/* enc_err is:
-	 *    0: (in non-constant time) if the record is publically invalid.
-	 *    1: if the padding is valid
-	 *    -1: if the padding is invalid */
-	if (enc_err == 0)
-		{
-		/* For DTLS we simply ignore bad packets. */
-		rr->length = 0;
-		s->packet_length = 0;
-		goto err;
-		}
-
-#ifdef TLS_DEBUG
-printf("dec %d\n",rr->length);
-{ unsigned int z; for (z=0; z<rr->length; z++) printf("%02X%c",rr->data[z],((z+1)%16)?' ':'\n'); }
-printf("\n");
-#endif
-
-	/* r->length is now the compressed data plus mac */
-	if ((sess != NULL) &&
-	    (s->enc_read_ctx != NULL) &&
-	    (EVP_MD_CTX_md(s->read_hash) != NULL))
-		{
-		/* s->read_hash != NULL => mac_size != -1 */
-		unsigned char *mac = NULL;
-		unsigned char mac_tmp[EVP_MAX_MD_SIZE];
-		mac_size=EVP_MD_CTX_size(s->read_hash);
-		assert(mac_size <= EVP_MAX_MD_SIZE);
-
-		/* kludge: *_cbc_remove_padding passes padding length in rr->type */
-		orig_len = rr->length+((unsigned int)rr->type>>8);
-
-		/* orig_len is the length of the record before any padding was
-		 * removed. This is public information, as is the MAC in use,
-		 * therefore we can safely process the record in a different
-		 * amount of time if it's too short to possibly contain a MAC.
-		 */
-		if (orig_len < mac_size ||
-		    /* CBC records must have a padding length byte too. */
-		    (EVP_CIPHER_CTX_mode(s->enc_read_ctx) == EVP_CIPH_CBC_MODE &&
-		     orig_len < mac_size+1))
-			{
-			al=SSL_AD_DECODE_ERROR;
-			OPENSSL_PUT_ERROR(SSL, dtls1_process_record, SSL_R_LENGTH_TOO_SHORT);
-			goto f_err;
-			}
-
-		if (EVP_CIPHER_CTX_mode(s->enc_read_ctx) == EVP_CIPH_CBC_MODE)
-			{
-			/* We update the length so that the TLS header bytes
-			 * can be constructed correctly but we need to extract
-			 * the MAC in constant time from within the record,
-			 * without leaking the contents of the padding bytes.
-			 * */
-			mac = mac_tmp;
-			ssl3_cbc_copy_mac(mac_tmp, rr, mac_size, orig_len);
-			rr->length -= mac_size;
-			}
-		else
-			{
-			/* In this case there's no padding, so |orig_len|
-			 * equals |rec->length| and we checked that there's
-			 * enough bytes for |mac_size| above. */
-			rr->length -= mac_size;
-			mac = &rr->data[rr->length];
-			}
-
-		i=s->enc_method->mac(s,md,0 /* not send */);
-		if (i < 0 || mac == NULL || CRYPTO_memcmp(md, mac, (size_t)mac_size) != 0)
-			enc_err = -1;
-		if (rr->length > SSL3_RT_MAX_COMPRESSED_LENGTH+mac_size)
-			enc_err = -1;
-		}
-
-	if (enc_err < 0)
-		{
-		/* decryption failed, silently discard message */
-		rr->length = 0;
-		s->packet_length = 0;
-		goto err;
-		}
-
-	if (rr->length > SSL3_RT_MAX_PLAIN_LENGTH)
-		{
-		al=SSL_AD_RECORD_OVERFLOW;
-		OPENSSL_PUT_ERROR(SSL, dtls1_process_record, SSL_R_DATA_LENGTH_TOO_LONG);
-		goto f_err;
-		}
-
-	rr->off=0;
-	/* So at this point the following is true
-	 * ssl->s3->rrec.type 	is the type of record
-	 * ssl->s3->rrec.length	== number of bytes in record
-	 * ssl->s3->rrec.off	== offset to first valid byte
-	 * ssl->s3->rrec.data	== where to take bytes from, increment
-	 *			   after use :-).
-	 */
-
-	/* we have pulled in a full packet so zero things */
-	s->packet_length=0;
-	dtls1_record_bitmap_update(s, &(s->d1->bitmap));/* Mark receipt of record. */
-	return(1);
-
-f_err:
-	ssl3_send_alert(s,SSL3_AL_FATAL,al);
-err:
-	return(0);
+  return 1;
 }
 
+static int dtls1_buffer_record(SSL *s, record_pqueue *queue,
+                               uint8_t *priority) {
+  DTLS1_RECORD_DATA *rdata;
+  pitem *item;
+
+  /* Limit the size of the queue to prevent DOS attacks */
+  if (pqueue_size(queue->q) >= 100) {
+    return 0;
+  }
+
+  rdata = OPENSSL_malloc(sizeof(DTLS1_RECORD_DATA));
+  item = pitem_new(priority, rdata);
+  if (rdata == NULL || item == NULL) {
+    if (rdata != NULL) {
+      OPENSSL_free(rdata);
+    }
+    if (item != NULL) {
+      pitem_free(item);
+    }
+
+    OPENSSL_PUT_ERROR(SSL, dtls1_buffer_record, ERR_R_INTERNAL_ERROR);
+    return 0;
+  }
+
+  rdata->packet = s->packet;
+  rdata->packet_length = s->packet_length;
+  memcpy(&(rdata->rbuf), &(s->s3->rbuf), sizeof(SSL3_BUFFER));
+  memcpy(&(rdata->rrec), &(s->s3->rrec), sizeof(SSL3_RECORD));
+
+  item->data = rdata;
+
+  s->packet = NULL;
+  s->packet_length = 0;
+  memset(&(s->s3->rbuf), 0, sizeof(SSL3_BUFFER));
+  memset(&(s->s3->rrec), 0, sizeof(SSL3_RECORD));
+
+  if (!ssl3_setup_buffers(s)) {
+    OPENSSL_PUT_ERROR(SSL, dtls1_buffer_record, ERR_R_INTERNAL_ERROR);
+    OPENSSL_free(rdata);
+    pitem_free(item);
+    return 0;
+  }
+
+  /* insert should not fail, since duplicates are dropped */
+  if (pqueue_insert(queue->q, item) == NULL) {
+    OPENSSL_PUT_ERROR(SSL, dtls1_buffer_record, ERR_R_INTERNAL_ERROR);
+    OPENSSL_free(rdata);
+    pitem_free(item);
+    return 0;
+  }
+
+  return 1;
+}
+
+static int dtls1_retrieve_buffered_record(SSL *s, record_pqueue *queue) {
+  pitem *item;
+
+  item = pqueue_pop(queue->q);
+  if (item) {
+    dtls1_copy_record(s, item);
+
+    OPENSSL_free(item->data);
+    pitem_free(item);
+
+    return 1;
+  }
+
+  return 0;
+}
+
+/* retrieve a buffered record that belongs to the new epoch, i.e., not
+ * processed yet */
+#define dtls1_get_unprocessed_record(s) \
+  dtls1_retrieve_buffered_record((s), &((s)->d1->unprocessed_rcds))
+
+/* retrieve a buffered record that belongs to the current epoch, i.e.,
+ * processed */
+#define dtls1_get_processed_record(s) \
+  dtls1_retrieve_buffered_record((s), &((s)->d1->processed_rcds))
+
+static int dtls1_process_buffered_records(SSL *s) {
+  pitem *item;
+
+  item = pqueue_peek(s->d1->unprocessed_rcds.q);
+  if (item) {
+    /* Check if epoch is current. */
+    if (s->d1->unprocessed_rcds.epoch != s->d1->r_epoch) {
+      return 1; /* Nothing to do. */
+    }
+
+    /* Process all the records. */
+    while (pqueue_peek(s->d1->unprocessed_rcds.q)) {
+      dtls1_get_unprocessed_record(s);
+      if (!dtls1_process_record(s)) {
+        return 0;
+      }
+      dtls1_buffer_record(s, &(s->d1->processed_rcds), s->s3->rrec.seq_num);
+    }
+  }
+
+  /* sync epoch numbers once all the unprocessed records have been processed */
+  s->d1->processed_rcds.epoch = s->d1->r_epoch;
+  s->d1->unprocessed_rcds.epoch = s->d1->r_epoch + 1;
+
+  return 1;
+}
+
+static int dtls1_process_record(SSL *s) {
+  int i, al;
+  int enc_err;
+  SSL_SESSION *sess;
+  SSL3_RECORD *rr;
+  unsigned int mac_size, orig_len;
+  unsigned char md[EVP_MAX_MD_SIZE];
+
+  rr = &(s->s3->rrec);
+  sess = s->session;
+
+  /* At this point, s->packet_length == SSL3_RT_HEADER_LNGTH + rr->length, and
+   * we have that many bytes in s->packet. */
+  rr->input = &(s->packet[DTLS1_RT_HEADER_LENGTH]);
+
+  /* ok, we can now read from 's->packet' data into 'rr' rr->input points at
+   * rr->length bytes, which need to be copied into rr->data by either the
+   * decryption or by the decompression When the data is 'copied' into the
+   * rr->data buffer, rr->input will be pointed at the new buffer */
+
+  /* We now have - encrypted [ MAC [ compressed [ plain ] ] ] rr->length bytes
+   * of encrypted compressed stuff. */
+
+  /* check is not needed I believe */
+  if (rr->length > SSL3_RT_MAX_ENCRYPTED_LENGTH) {
+    al = SSL_AD_RECORD_OVERFLOW;
+    OPENSSL_PUT_ERROR(SSL, dtls1_process_record,
+                      SSL_R_ENCRYPTED_LENGTH_TOO_LONG);
+    goto f_err;
+  }
+
+  /* decrypt in place in 'rr->input' */
+  rr->data = rr->input;
+
+  enc_err = s->enc_method->enc(s, 0);
+  /* enc_err is:
+   *    0: (in non-constant time) if the record is publically invalid.
+   *    1: if the padding is valid
+   *    -1: if the padding is invalid */
+  if (enc_err == 0) {
+    /* For DTLS we simply ignore bad packets. */
+    rr->length = 0;
+    s->packet_length = 0;
+    goto err;
+  }
+
+  /* r->length is now the compressed data plus mac */
+  if ((sess != NULL) && (s->enc_read_ctx != NULL) &&
+      (EVP_MD_CTX_md(s->read_hash) != NULL)) {
+    /* s->read_hash != NULL => mac_size != -1 */
+    uint8_t *mac = NULL;
+    uint8_t mac_tmp[EVP_MAX_MD_SIZE];
+    mac_size = EVP_MD_CTX_size(s->read_hash);
+    assert(mac_size <= EVP_MAX_MD_SIZE);
+
+    /* kludge: *_cbc_remove_padding passes padding length in rr->type */
+    orig_len = rr->length + ((unsigned int)rr->type >> 8);
+
+    /* orig_len is the length of the record before any padding was removed.
+     * This is public information, as is the MAC in use, therefore we can
+     * safely process the record in a different amount of time if it's too
+     * short to possibly contain a MAC. */
+    if (orig_len < mac_size ||
+        /* CBC records must have a padding length byte too. */
+        (EVP_CIPHER_CTX_mode(s->enc_read_ctx) == EVP_CIPH_CBC_MODE &&
+         orig_len < mac_size + 1)) {
+      al = SSL_AD_DECODE_ERROR;
+      OPENSSL_PUT_ERROR(SSL, dtls1_process_record, SSL_R_LENGTH_TOO_SHORT);
+      goto f_err;
+    }
+
+    if (EVP_CIPHER_CTX_mode(s->enc_read_ctx) == EVP_CIPH_CBC_MODE) {
+      /* We update the length so that the TLS header bytes can be constructed
+       * correctly but we need to extract the MAC in constant time from within
+       * the record, without leaking the contents of the padding bytes. */
+      mac = mac_tmp;
+      ssl3_cbc_copy_mac(mac_tmp, rr, mac_size, orig_len);
+      rr->length -= mac_size;
+    } else {
+      /* In this case there's no padding, so |orig_len| equals |rec->length|
+       * and we checked that there's enough bytes for |mac_size| above. */
+      rr->length -= mac_size;
+      mac = &rr->data[rr->length];
+    }
+
+    i = s->enc_method->mac(s, md, 0 /* not send */);
+    if (i < 0 || mac == NULL || CRYPTO_memcmp(md, mac, (size_t)mac_size) != 0) {
+      enc_err = -1;
+    }
+    if (rr->length > SSL3_RT_MAX_COMPRESSED_LENGTH + mac_size) {
+      enc_err = -1;
+    }
+  }
+
+  if (enc_err < 0) {
+    /* decryption failed, silently discard message */
+    rr->length = 0;
+    s->packet_length = 0;
+    goto err;
+  }
+
+  if (rr->length > SSL3_RT_MAX_PLAIN_LENGTH) {
+    al = SSL_AD_RECORD_OVERFLOW;
+    OPENSSL_PUT_ERROR(SSL, dtls1_process_record, SSL_R_DATA_LENGTH_TOO_LONG);
+    goto f_err;
+  }
+
+  rr->off = 0;
+  /* So at this point the following is true
+   * ssl->s3->rrec.type 	is the type of record
+   * ssl->s3->rrec.length	== number of bytes in record
+   * ssl->s3->rrec.off	== offset to first valid byte
+   * ssl->s3->rrec.data	== where to take bytes from, increment
+   *			   after use :-). */
+
+  /* we have pulled in a full packet so zero things */
+  s->packet_length = 0;
+  dtls1_record_bitmap_update(s, &(s->d1->bitmap)); /* Mark receipt of record. */
+  return 1;
+
+f_err:
+  ssl3_send_alert(s, SSL3_AL_FATAL, al);
+
+err:
+  return 0;
+}
 
 /* Call this to get a new input record.
  * It will return <= 0 if more data is needed, normally due to an error
  * or non-blocking IO.
  * When it finishes, one packet has been decoded and can be found in
  * ssl->s3->rrec.type    - is the type of record
- * ssl->s3->rrec.data, 	 - data
+ * ssl->s3->rrec.data,   - data
  * ssl->s3->rrec.length, - number of bytes
- */
-/* used only by dtls1_read_bytes */
-int dtls1_get_record(SSL *s)
-	{
-	int ssl_major,ssl_minor;
-	int i,n;
-	SSL3_RECORD *rr;
-	unsigned char *p = NULL;
-	unsigned short version;
-	DTLS1_BITMAP *bitmap;
-	unsigned int is_next_epoch;
+ *
+ * used only by dtls1_read_bytes */
+int dtls1_get_record(SSL *s) {
+  int ssl_major, ssl_minor;
+  int i, n;
+  SSL3_RECORD *rr;
+  unsigned char *p = NULL;
+  unsigned short version;
+  DTLS1_BITMAP *bitmap;
+  unsigned int is_next_epoch;
 
-	rr= &(s->s3->rrec);
+  rr = &(s->s3->rrec);
 
-	/* The epoch may have changed.  If so, process all the
-	 * pending records.  This is a non-blocking operation. */
-	dtls1_process_buffered_records(s);
+  /* The epoch may have changed. If so, process all the pending records. This
+   * is a non-blocking operation. */
+  dtls1_process_buffered_records(s);
 
-	/* if we're renegotiating, then there may be buffered records */
-	if (dtls1_get_processed_record(s))
-		return 1;
+  /* If we're renegotiating, then there may be buffered records. */
+  if (dtls1_get_processed_record(s)) {
+    return 1;
+  }
 
-	/* get something from the wire */
+  /* get something from the wire */
 again:
-	/* check if we have the header */
-	if (	(s->rstate != SSL_ST_READ_BODY) ||
-		(s->packet_length < DTLS1_RT_HEADER_LENGTH)) 
-		{
-		n=ssl3_read_n(s, DTLS1_RT_HEADER_LENGTH, s->s3->rbuf.len, 0);
-		/* read timeout is handled by dtls1_read_bytes */
-		if (n <= 0) return(n); /* error or non-blocking */
+  /* check if we have the header */
+  if ((s->rstate != SSL_ST_READ_BODY) ||
+      (s->packet_length < DTLS1_RT_HEADER_LENGTH)) {
+    n = ssl3_read_n(s, DTLS1_RT_HEADER_LENGTH, s->s3->rbuf.len, 0);
+    /* read timeout is handled by dtls1_read_bytes */
+    if (n <= 0) {
+      return n; /* error or non-blocking */
+    }
 
-		/* this packet contained a partial record, dump it */
-		if (s->packet_length != DTLS1_RT_HEADER_LENGTH)
-			{
-			s->packet_length = 0;
-			goto again;
-			}
+    /* this packet contained a partial record, dump it */
+    if (s->packet_length != DTLS1_RT_HEADER_LENGTH) {
+      s->packet_length = 0;
+      goto again;
+    }
 
-		s->rstate=SSL_ST_READ_BODY;
+    s->rstate = SSL_ST_READ_BODY;
 
-		p=s->packet;
+    p = s->packet;
 
-		if (s->msg_callback)
-			s->msg_callback(0, 0, SSL3_RT_HEADER, p, DTLS1_RT_HEADER_LENGTH, s, s->msg_callback_arg);
+    if (s->msg_callback) {
+      s->msg_callback(0, 0, SSL3_RT_HEADER, p, DTLS1_RT_HEADER_LENGTH, s,
+                      s->msg_callback_arg);
+    }
 
-		/* Pull apart the header into the DTLS1_RECORD */
-		rr->type= *(p++);
-		ssl_major= *(p++);
-		ssl_minor= *(p++);
-		version=(ssl_major<<8)|ssl_minor;
+    /* Pull apart the header into the DTLS1_RECORD */
+    rr->type = *(p++);
+    ssl_major = *(p++);
+    ssl_minor = *(p++);
+    version = (ssl_major << 8) | ssl_minor;
 
-		/* sequence number is 64 bits, with top 2 bytes = epoch */ 
-		n2s(p,rr->epoch);
+    /* sequence number is 64 bits, with top 2 bytes = epoch */
+    n2s(p, rr->epoch);
 
-		memcpy(&(s->s3->read_sequence[2]), p, 6);
-		p+=6;
+    memcpy(&(s->s3->read_sequence[2]), p, 6);
+    p += 6;
 
-		n2s(p,rr->length);
+    n2s(p, rr->length);
 
-		/* Lets check version */
-		if (s->s3->have_version)
-			{
-			if (version != s->version)
-				{
-				/* The record's version doesn't match, so
-				 * silently drop it.
-				 *
-				 * TODO(davidben): This doesn't work. The DTLS
-				 * record layer is not packet-based, so the
-				 * remainder of the packet isn't dropped and we
-				 * get a framing error. It's also unclear what
-				 * it means to silently drop a record in a
-				 * packet containing two records. */
-				rr->length = 0;
-				s->packet_length = 0;
-				goto again;
-				}
-			}
+    /* Lets check version */
+    if (s->s3->have_version) {
+      if (version != s->version) {
+        /* The record's version doesn't match, so silently drop it.
+         *
+         * TODO(davidben): This doesn't work. The DTLS record layer is not
+         * packet-based, so the remainder of the packet isn't dropped and we
+         * get a framing error. It's also unclear what it means to silently
+         * drop a record in a packet containing two records. */
+        rr->length = 0;
+        s->packet_length = 0;
+        goto again;
+      }
+    }
 
-		if ((version & 0xff00) != (s->version & 0xff00))
-			{
-			/* wrong version, silently discard record */
-			rr->length = 0;
-			s->packet_length = 0;
-			goto again;
-			}
+    if ((version & 0xff00) != (s->version & 0xff00)) {
+      /* wrong version, silently discard record */
+      rr->length = 0;
+      s->packet_length = 0;
+      goto again;
+    }
 
-		if (rr->length > SSL3_RT_MAX_ENCRYPTED_LENGTH)
-			{
-			/* record too long, silently discard it */
-			rr->length = 0;
-			s->packet_length = 0;
-			goto again;
-			}
+    if (rr->length > SSL3_RT_MAX_ENCRYPTED_LENGTH) {
+      /* record too long, silently discard it */
+      rr->length = 0;
+      s->packet_length = 0;
+      goto again;
+    }
 
-		/* now s->rstate == SSL_ST_READ_BODY */
-		}
+    /* now s->rstate == SSL_ST_READ_BODY */
+  }
 
-	/* s->rstate == SSL_ST_READ_BODY, get and decode the data */
+  /* s->rstate == SSL_ST_READ_BODY, get and decode the data */
 
-	if (rr->length > s->packet_length-DTLS1_RT_HEADER_LENGTH)
-		{
-		/* now s->packet_length == DTLS1_RT_HEADER_LENGTH */
-		i=rr->length;
-		n=ssl3_read_n(s,i,i,1);
-		if (n <= 0) return(n); /* error or non-blocking io */
+  if (rr->length > s->packet_length - DTLS1_RT_HEADER_LENGTH) {
+    /* now s->packet_length == DTLS1_RT_HEADER_LENGTH */
+    i = rr->length;
+    n = ssl3_read_n(s, i, i, 1);
+    if (n <= 0) {
+      return n; /* error or non-blocking io */
+    }
 
-		/* this packet contained a partial record, dump it */
-		if ( n != i)
-			{
-			rr->length = 0;
-			s->packet_length = 0;
-			goto again;
-			}
+    /* this packet contained a partial record, dump it */
+    if (n != i) {
+      rr->length = 0;
+      s->packet_length = 0;
+      goto again;
+    }
 
-		/* now n == rr->length,
-		 * and s->packet_length == DTLS1_RT_HEADER_LENGTH + rr->length */
-		}
-	s->rstate=SSL_ST_READ_HEADER; /* set state for later operations */
+    /* now n == rr->length,
+     * and s->packet_length == DTLS1_RT_HEADER_LENGTH + rr->length */
+  }
+  s->rstate = SSL_ST_READ_HEADER; /* set state for later operations */
 
-	/* match epochs.  NULL means the packet is dropped on the floor */
-	bitmap = dtls1_get_bitmap(s, rr, &is_next_epoch);
-	if ( bitmap == NULL)
-		{
-		rr->length = 0;
-		s->packet_length = 0;  /* dump this record */
-		goto again;   /* get another record */
-		}
+  /* match epochs.  NULL means the packet is dropped on the floor */
+  bitmap = dtls1_get_bitmap(s, rr, &is_next_epoch);
+  if (bitmap == NULL) {
+    rr->length = 0;
+    s->packet_length = 0; /* dump this record */
+    goto again;           /* get another record */
+  }
 
-	/* Check whether this is a repeat, or aged record. */
-	if (!dtls1_record_replay_check(s, bitmap))
-		{
-		rr->length = 0;
-		s->packet_length=0; /* dump this record */
-		goto again;     /* get another record */
-		}
+  /* Check whether this is a repeat, or aged record. */
+  if (!dtls1_record_replay_check(s, bitmap)) {
+    rr->length = 0;
+    s->packet_length = 0; /* dump this record */
+    goto again;           /* get another record */
+  }
 
-	/* just read a 0 length packet */
-	if (rr->length == 0) goto again;
+  /* just read a 0 length packet */
+  if (rr->length == 0) {
+    goto again;
+  }
 
-	/* If this record is from the next epoch (either HM or ALERT),
-	 * and a handshake is currently in progress, buffer it since it
-	 * cannot be processed at this time.
-	 */
-	if (is_next_epoch)
-		{
-		if (SSL_in_init(s) || s->in_handshake)
-			{
-			dtls1_buffer_record(s, &(s->d1->unprocessed_rcds), rr->seq_num);
-			}
-		rr->length = 0;
-		s->packet_length = 0;
-		goto again;
-		}
+  /* If this record is from the next epoch (either HM or ALERT),
+   * and a handshake is currently in progress, buffer it since it
+   * cannot be processed at this time.
+   */
+  if (is_next_epoch) {
+    if (SSL_in_init(s) || s->in_handshake) {
+      dtls1_buffer_record(s, &(s->d1->unprocessed_rcds), rr->seq_num);
+    }
+    rr->length = 0;
+    s->packet_length = 0;
+    goto again;
+  }
 
-	if (!dtls1_process_record(s))
-		{
-		rr->length = 0;
-		s->packet_length = 0;  /* dump this record */
-		goto again;   /* get another record */
-		}
+  if (!dtls1_process_record(s)) {
+    rr->length = 0;
+    s->packet_length = 0; /* dump this record */
+    goto again;           /* get another record */
+  }
 
-	return(1);
-
-	}
+  return 1;
+}
 
 /* Return up to 'len' payload bytes received in 'type' records.
  * 'type' is one of the following:
@@ -716,921 +640,756 @@
  *     Application data protocol
  *             none of our business
  */
-int dtls1_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek)
-	{
-	int al,i,j,ret;
-	unsigned int n;
-	SSL3_RECORD *rr;
-	void (*cb)(const SSL *ssl,int type2,int val)=NULL;
+int dtls1_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek) {
+  int al, i, j, ret;
+  unsigned int n;
+  SSL3_RECORD *rr;
+  void (*cb)(const SSL *ssl, int type2, int val) = NULL;
 
-	if (s->s3->rbuf.buf == NULL) /* Not initialized yet */
-		if (!ssl3_setup_buffers(s))
-			return(-1);
+  if (s->s3->rbuf.buf == NULL && !ssl3_setup_buffers(s)) {
+      return -1;
+  }
 
-    /* XXX: check what the second '&& type' is about */
-	if ((type && (type != SSL3_RT_APPLICATION_DATA) && 
-		(type != SSL3_RT_HANDSHAKE) && type) ||
-	    (peek && (type != SSL3_RT_APPLICATION_DATA)))
-		{
-		OPENSSL_PUT_ERROR(SSL, dtls1_read_bytes, ERR_R_INTERNAL_ERROR);
-		return -1;
-		}
+  /* XXX: check what the second '&& type' is about */
+  if ((type && (type != SSL3_RT_APPLICATION_DATA) &&
+       (type != SSL3_RT_HANDSHAKE) && type) ||
+      (peek && (type != SSL3_RT_APPLICATION_DATA))) {
+    OPENSSL_PUT_ERROR(SSL, dtls1_read_bytes, ERR_R_INTERNAL_ERROR);
+    return -1;
+  }
 
-	/* check whether there's a handshake message (client hello?) waiting */
-	if ( (ret = have_handshake_fragment(s, type, buf, len, peek)))
-		return ret;
+  /* check whether there's a handshake message (client hello?) waiting */
+  ret = have_handshake_fragment(s, type, buf, len, peek);
+  if (ret) {
+    return ret;
+  }
 
-	/* Now s->d1->handshake_fragment_len == 0 if type == SSL3_RT_HANDSHAKE. */
+  /* Now s->d1->handshake_fragment_len == 0 if type == SSL3_RT_HANDSHAKE. */
 
-	if (!s->in_handshake && SSL_in_init(s))
-		{
-		/* type == SSL3_RT_APPLICATION_DATA */
-		i=s->handshake_func(s);
-		if (i < 0) return(i);
-		if (i == 0)
-			{
-			OPENSSL_PUT_ERROR(SSL, dtls1_read_bytes, SSL_R_SSL_HANDSHAKE_FAILURE);
-			return(-1);
-			}
-		}
+  if (!s->in_handshake && SSL_in_init(s)) {
+    /* type == SSL3_RT_APPLICATION_DATA */
+    i = s->handshake_func(s);
+    if (i < 0) {
+      return i;
+    }
+    if (i == 0) {
+      OPENSSL_PUT_ERROR(SSL, dtls1_read_bytes, SSL_R_SSL_HANDSHAKE_FAILURE);
+      return -1;
+    }
+  }
 
 start:
-	s->rwstate=SSL_NOTHING;
+  s->rwstate = SSL_NOTHING;
 
-	/* s->s3->rrec.type	    - is the type of record
-	 * s->s3->rrec.data,    - data
-	 * s->s3->rrec.off,     - offset into 'data' for next read
-	 * s->s3->rrec.length,  - number of bytes. */
-	rr = &(s->s3->rrec);
+  /* s->s3->rrec.type     - is the type of record
+   * s->s3->rrec.data     - data
+   * s->s3->rrec.off      - offset into 'data' for next read
+   * s->s3->rrec.length   - number of bytes. */
+  rr = &s->s3->rrec;
 
-	/* We are not handshaking and have no data yet,
-	 * so process data buffered during the last handshake
-	 * in advance, if any.
-	 */
-	if (s->state == SSL_ST_OK && rr->length == 0)
-		{
-		pitem *item;
-		item = pqueue_pop(s->d1->buffered_app_data.q);
-		if (item)
-			{
-			dtls1_copy_record(s, item);
+  /* We are not handshaking and have no data yet,
+   * so process data buffered during the last handshake
+   * in advance, if any.
+   */
+  if (s->state == SSL_ST_OK && rr->length == 0) {
+    pitem *item;
+    item = pqueue_pop(s->d1->buffered_app_data.q);
+    if (item) {
+      dtls1_copy_record(s, item);
 
-			OPENSSL_free(item->data);
-			pitem_free(item);
-			}
-		}
+      OPENSSL_free(item->data);
+      pitem_free(item);
+    }
+  }
 
-	/* Check for timeout */
-	if (dtls1_handle_timeout(s) > 0)
-		goto start;
+  /* Check for timeout */
+  if (dtls1_handle_timeout(s) > 0) {
+    goto start;
+  }
 
-	/* get new packet if necessary */
-	if ((rr->length == 0) || (s->rstate == SSL_ST_READ_BODY))
-		{
-		ret=dtls1_get_record(s);
-		if (ret <= 0) 
-			{
-			ret = dtls1_read_failed(s, ret);
-			/* anything other than a timeout is an error */
-			if (ret <= 0)  
-				return(ret);
-			else
-				goto start;
-			}
-		}
+  /* get new packet if necessary */
+  if (rr->length == 0 || s->rstate == SSL_ST_READ_BODY) {
+    ret = dtls1_get_record(s);
+    if (ret <= 0) {
+      ret = dtls1_read_failed(s, ret);
+      /* anything other than a timeout is an error */
+      if (ret <= 0) {
+        return ret;
+      } else {
+        goto start;
+      }
+    }
+  }
 
-	/* we now have a packet which can be read and processed */
+  /* we now have a packet which can be read and processed */
 
-	if (s->s3->change_cipher_spec /* set when we receive ChangeCipherSpec,
-	                               * reset by ssl3_get_finished */
-		&& (rr->type != SSL3_RT_HANDSHAKE))
-		{
-		/* We now have application data between CCS and Finished.
-		 * Most likely the packets were reordered on their way, so
-		 * buffer the application data for later processing rather
-		 * than dropping the connection.
-		 */
-		dtls1_buffer_record(s, &(s->d1->buffered_app_data), rr->seq_num);
-		rr->length = 0;
-		goto start;
-		}
+  /* |change_cipher_spec is set when we receive a ChangeCipherSpec and reset by
+   * ssl3_get_finished. */
+  if (s->s3->change_cipher_spec && rr->type != SSL3_RT_HANDSHAKE) {
+    /* We now have application data between CCS and Finished. Most likely the
+     * packets were reordered on their way, so buffer the application data for
+     * later processing rather than dropping the connection. */
+    dtls1_buffer_record(s, &(s->d1->buffered_app_data), rr->seq_num);
+    rr->length = 0;
+    goto start;
+  }
 
-	/* If the other end has shut down, throw anything we read away
-	 * (even in 'peek' mode) */
-	if (s->shutdown & SSL_RECEIVED_SHUTDOWN)
-		{
-		rr->length=0;
-		s->rwstate=SSL_NOTHING;
-		return(0);
-		}
+  /* If the other end has shut down, throw anything we read away (even in
+   * 'peek' mode) */
+  if (s->shutdown & SSL_RECEIVED_SHUTDOWN) {
+    rr->length = 0;
+    s->rwstate = SSL_NOTHING;
+    return 0;
+  }
 
 
-	if (type == rr->type) /* SSL3_RT_APPLICATION_DATA or SSL3_RT_HANDSHAKE */
-		{
-		/* make sure that we are not getting application data when we
-		 * are doing a handshake for the first time */
-		if (SSL_in_init(s) && (type == SSL3_RT_APPLICATION_DATA) &&
-			(s->enc_read_ctx == NULL))
-			{
-			al=SSL_AD_UNEXPECTED_MESSAGE;
-			OPENSSL_PUT_ERROR(SSL, dtls1_read_bytes, SSL_R_APP_DATA_IN_HANDSHAKE);
-			goto f_err;
-			}
-
-		if (len <= 0) return(len);
-
-		if ((unsigned int)len > rr->length)
-			n = rr->length;
-		else
-			n = (unsigned int)len;
-
-		memcpy(buf,&(rr->data[rr->off]),n);
-		if (!peek)
-			{
-			rr->length-=n;
-			rr->off+=n;
-			if (rr->length == 0)
-				{
-				s->rstate=SSL_ST_READ_HEADER;
-				rr->off=0;
-				}
-			}
-
-		return(n);
-		}
-
-
-	/* If we get here, then type != rr->type; if we have a handshake
-	 * message, then it was unexpected (Hello Request or Client Hello). */
-
-	/* In case of record types for which we have 'fragment' storage,
-	 * fill that so that we can process the data at a fixed place.
-	 */
-		{
-		unsigned int k, dest_maxlen = 0;
-		unsigned char *dest = NULL;
-		unsigned int *dest_len = NULL;
-
-		if (rr->type == SSL3_RT_HANDSHAKE)
-			{
-			dest_maxlen = sizeof s->d1->handshake_fragment;
-			dest = s->d1->handshake_fragment;
-			dest_len = &s->d1->handshake_fragment_len;
-			}
-		else if (rr->type == SSL3_RT_ALERT)
-			{
-			dest_maxlen = sizeof(s->d1->alert_fragment);
-			dest = s->d1->alert_fragment;
-			dest_len = &s->d1->alert_fragment_len;
-			}
-		/* else it's a CCS message, or application data or wrong */
-		else if (rr->type != SSL3_RT_CHANGE_CIPHER_SPEC)
-			{
-			/* Application data while renegotiating
-			 * is allowed. Try again reading.
-			 */
-			if (rr->type == SSL3_RT_APPLICATION_DATA)
-				{
-				BIO *bio;
-				s->s3->in_read_app_data=2;
-				bio=SSL_get_rbio(s);
-				s->rwstate=SSL_READING;
-				BIO_clear_retry_flags(bio);
-				BIO_set_retry_read(bio);
-				return(-1);
-				}
-
-			/* Not certain if this is the right error handling */
-			al=SSL_AD_UNEXPECTED_MESSAGE;
-			OPENSSL_PUT_ERROR(SSL, dtls1_read_bytes, SSL_R_UNEXPECTED_RECORD);
-			goto f_err;
-			}
-
-		if (dest_maxlen > 0)
-			{
-            /* XDTLS:  In a pathalogical case, the Client Hello
-             *  may be fragmented--don't always expect dest_maxlen bytes */
-			if ( rr->length < dest_maxlen)
-				{
-				s->rstate=SSL_ST_READ_HEADER;
-				rr->length = 0;
-				goto start;
-				}
-
-			/* now move 'n' bytes: */
-			for ( k = 0; k < dest_maxlen; k++)
-				{
-				dest[k] = rr->data[rr->off++];
-				rr->length--;
-				}
-			*dest_len = dest_maxlen;
-			}
-		}
-
-	/* s->d1->handshake_fragment_len == 12  iff  rr->type == SSL3_RT_HANDSHAKE;
-	 * s->d1->alert_fragment_len == 7      iff  rr->type == SSL3_RT_ALERT.
-	 * (Possibly rr is 'empty' now, i.e. rr->length may be 0.) */
-
-	/* If we are a client, check for an incoming 'Hello Request': */
-	if ((!s->server) &&
-		(s->d1->handshake_fragment_len >= DTLS1_HM_HEADER_LENGTH) &&
-		(s->d1->handshake_fragment[0] == SSL3_MT_HELLO_REQUEST) &&
-		(s->session != NULL) && (s->session->cipher != NULL))
-		{
-		s->d1->handshake_fragment_len = 0;
-
-		if ((s->d1->handshake_fragment[1] != 0) ||
-			(s->d1->handshake_fragment[2] != 0) ||
-			(s->d1->handshake_fragment[3] != 0))
-			{
-			al=SSL_AD_DECODE_ERROR;
-			OPENSSL_PUT_ERROR(SSL, dtls1_read_bytes, SSL_R_BAD_HELLO_REQUEST);
-			goto f_err;
-			}
-
-		/* no need to check sequence number on HELLO REQUEST messages */
-
-		if (s->msg_callback)
-			s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE, 
-				s->d1->handshake_fragment, 4, s, s->msg_callback_arg);
-
-		if (SSL_is_init_finished(s) && !s->s3->renegotiate)
-			{
-			s->d1->handshake_read_seq++;
-			s->new_session = 1;
-			ssl3_renegotiate(s);
-			if (ssl3_renegotiate_check(s))
-				{
-				i=s->handshake_func(s);
-				if (i < 0) return(i);
-				if (i == 0)
-					{
-					OPENSSL_PUT_ERROR(SSL, dtls1_read_bytes, SSL_R_SSL_HANDSHAKE_FAILURE);
-					return(-1);
-					}
-				}
-			}
-		/* we either finished a handshake or ignored the request,
-		 * now try again to obtain the (application) data we were asked for */
-		goto start;
-		}
-
-	if (s->d1->alert_fragment_len >= DTLS1_AL_HEADER_LENGTH)
-		{
-		int alert_level = s->d1->alert_fragment[0];
-		int alert_descr = s->d1->alert_fragment[1];
-
-		s->d1->alert_fragment_len = 0;
-
-		if (s->msg_callback)
-			s->msg_callback(0, s->version, SSL3_RT_ALERT, 
-				s->d1->alert_fragment, 2, s, s->msg_callback_arg);
-
-		if (s->info_callback != NULL)
-			cb=s->info_callback;
-		else if (s->ctx->info_callback != NULL)
-			cb=s->ctx->info_callback;
-
-		if (cb != NULL)
-			{
-			j = (alert_level << 8) | alert_descr;
-			cb(s, SSL_CB_READ_ALERT, j);
-			}
-
-		if (alert_level == 1) /* warning */
-			{
-			s->s3->warn_alert = alert_descr;
-			if (alert_descr == SSL_AD_CLOSE_NOTIFY)
-				{
-				s->shutdown |= SSL_RECEIVED_SHUTDOWN;
-				return(0);
-				}
-			}
-		else if (alert_level == 2) /* fatal */
-			{
-			char tmp[16];
-
-			s->rwstate=SSL_NOTHING;
-			s->s3->fatal_alert = alert_descr;
-			OPENSSL_PUT_ERROR(SSL, dtls1_read_bytes, SSL_AD_REASON_OFFSET + alert_descr);
-			BIO_snprintf(tmp,sizeof tmp,"%d",alert_descr);
-			ERR_add_error_data(2,"SSL alert number ",tmp);
-			s->shutdown|=SSL_RECEIVED_SHUTDOWN;
-			SSL_CTX_remove_session(s->ctx,s->session);
-			return(0);
-			}
-		else
-			{
-			al=SSL_AD_ILLEGAL_PARAMETER;
-			OPENSSL_PUT_ERROR(SSL, dtls1_read_bytes, SSL_R_UNKNOWN_ALERT_TYPE);
-			goto f_err;
-			}
-
-		goto start;
-		}
-
-	if (s->shutdown & SSL_SENT_SHUTDOWN) /* but we have not received a shutdown */
-		{
-		s->rwstate=SSL_NOTHING;
-		rr->length=0;
-		return(0);
-		}
-
-	if (rr->type == SSL3_RT_CHANGE_CIPHER_SPEC)
-		{
-		struct ccs_header_st ccs_hdr;
-		unsigned int ccs_hdr_len = DTLS1_CCS_HEADER_LENGTH;
-
-		dtls1_get_ccs_header(rr->data, &ccs_hdr);
-
-		/* 'Change Cipher Spec' is just a single byte, so we know
-		 * exactly what the record payload has to look like */
-		/* XDTLS: check that epoch is consistent */
-		if (	(rr->length != ccs_hdr_len) || 
-			(rr->off != 0) || (rr->data[0] != SSL3_MT_CCS))
-			{
-			al=SSL_AD_ILLEGAL_PARAMETER;
-			OPENSSL_PUT_ERROR(SSL, dtls1_read_bytes, SSL_R_BAD_CHANGE_CIPHER_SPEC);
-			goto f_err;
-			}
-
-		rr->length=0;
-
-		if (s->msg_callback)
-			s->msg_callback(0, s->version, SSL3_RT_CHANGE_CIPHER_SPEC, 
-				rr->data, 1, s, s->msg_callback_arg);
-
-		/* We can't process a CCS now, because previous handshake
-		 * messages are still missing, so just drop it.
-		 */
-		if (!s->d1->change_cipher_spec_ok)
-			{
-			goto start;
-			}
-
-		s->d1->change_cipher_spec_ok = 0;
-
-		s->s3->change_cipher_spec=1;
-		if (!ssl3_do_change_cipher_spec(s))
-			goto err;
-
-		/* do this whenever CCS is processed */
-		dtls1_reset_seq_numbers(s, SSL3_CC_READ);
-
-		goto start;
-		}
-
-	/* Unexpected handshake message (Client Hello, or protocol violation) */
-	if ((s->d1->handshake_fragment_len >= DTLS1_HM_HEADER_LENGTH) && 
-		!s->in_handshake)
-		{
-		struct hm_header_st msg_hdr;
-		
-		/* this may just be a stale retransmit */
-		dtls1_get_message_header(rr->data, &msg_hdr);
-		if( rr->epoch != s->d1->r_epoch)
-			{
-			rr->length = 0;
-			goto start;
-			}
-
-		/* If we are server, we may have a repeated FINISHED of the
-		 * client here, then retransmit our CCS and FINISHED.
-		 */
-		if (msg_hdr.type == SSL3_MT_FINISHED)
-			{
-			if (dtls1_check_timeout_num(s) < 0)
-				return -1;
-
-			dtls1_retransmit_buffered_messages(s);
-			rr->length = 0;
-			goto start;
-			}
-
-		if ((s->state&SSL_ST_MASK) == SSL_ST_OK)
-			{
-			s->state = s->server ? SSL_ST_ACCEPT : SSL_ST_CONNECT;
-			s->renegotiate=1;
-			s->new_session=1;
-			}
-		i=s->handshake_func(s);
-		if (i < 0) return(i);
-		if (i == 0)
-			{
-			OPENSSL_PUT_ERROR(SSL, dtls1_read_bytes, SSL_R_SSL_HANDSHAKE_FAILURE);
-			return(-1);
-			}
-
-		goto start;
-		}
-
-	switch (rr->type)
-		{
-	default:
-		/* TLS just ignores unknown message types */
-		if (s->version == TLS1_VERSION)
-			{
-			rr->length = 0;
-			goto start;
-			}
-		al=SSL_AD_UNEXPECTED_MESSAGE;
-		OPENSSL_PUT_ERROR(SSL, dtls1_read_bytes, SSL_R_UNEXPECTED_RECORD);
-		goto f_err;
-	case SSL3_RT_CHANGE_CIPHER_SPEC:
-	case SSL3_RT_ALERT:
-	case SSL3_RT_HANDSHAKE:
-		/* we already handled all of these, with the possible exception
-		 * of SSL3_RT_HANDSHAKE when s->in_handshake is set, but that
-		 * should not happen when type != rr->type */
-		al=SSL_AD_UNEXPECTED_MESSAGE;
-		OPENSSL_PUT_ERROR(SSL, dtls1_read_bytes, ERR_R_INTERNAL_ERROR);
-		goto f_err;
-	case SSL3_RT_APPLICATION_DATA:
-		/* At this point, we were expecting handshake data,
-		 * but have application data.  If the library was
-		 * running inside ssl3_read() (i.e. in_read_app_data
-		 * is set) and it makes sense to read application data
-		 * at this point (session renegotiation not yet started),
-		 * we will indulge it.
-		 */
-		if (s->s3->in_read_app_data &&
-			(s->s3->total_renegotiations != 0) &&
-			((
-				(s->state & SSL_ST_CONNECT) &&
-				(s->state >= SSL3_ST_CW_CLNT_HELLO_A) &&
-				(s->state <= SSL3_ST_CR_SRVR_HELLO_A)
-				) || (
-					(s->state & SSL_ST_ACCEPT) &&
-					(s->state <= SSL3_ST_SW_HELLO_REQ_A) &&
-					(s->state >= SSL3_ST_SR_CLNT_HELLO_A)
-					)
-				))
-			{
-			s->s3->in_read_app_data=2;
-			return(-1);
-			}
-		else
-			{
-			al=SSL_AD_UNEXPECTED_MESSAGE;
-			OPENSSL_PUT_ERROR(SSL, dtls1_read_bytes, SSL_R_UNEXPECTED_RECORD);
-			goto f_err;
-			}
-		}
-	/* not reached */
-
-f_err:
-	ssl3_send_alert(s,SSL3_AL_FATAL,al);
-err:
-	return(-1);
-	}
-
-int
-dtls1_write_app_data_bytes(SSL *s, int type, const void *buf_, int len)
-	{
-	int i;
-
-		if (SSL_in_init(s) && !s->in_handshake)
-		{
-		i=s->handshake_func(s);
-		if (i < 0) return(i);
-		if (i == 0)
-			{
-			OPENSSL_PUT_ERROR(SSL, dtls1_write_app_data_bytes, SSL_R_SSL_HANDSHAKE_FAILURE);
-			return -1;
-			}
-		}
-
-	if (len > SSL3_RT_MAX_PLAIN_LENGTH)
-		{
-			OPENSSL_PUT_ERROR(SSL, dtls1_write_app_data_bytes, SSL_R_DTLS_MESSAGE_TOO_BIG);
-			return -1;
-		}
-
-	i = dtls1_write_bytes(s, type, buf_, len);
-	return i;
-	}
-
-
-	/* this only happens when a client hello is received and a handshake 
-	 * is started. */
-static int
-have_handshake_fragment(SSL *s, int type, unsigned char *buf, 
-	int len, int peek)
-	{
-	
-	if ((type == SSL3_RT_HANDSHAKE) && (s->d1->handshake_fragment_len > 0))
-		/* (partially) satisfy request from storage */
-		{
-		unsigned char *src = s->d1->handshake_fragment;
-		unsigned char *dst = buf;
-		unsigned int k,n;
-		
-		/* peek == 0 */
-		n = 0;
-		while ((len > 0) && (s->d1->handshake_fragment_len > 0))
-			{
-			*dst++ = *src++;
-			len--; s->d1->handshake_fragment_len--;
-			n++;
-			}
-		/* move any remaining fragment bytes: */
-		for (k = 0; k < s->d1->handshake_fragment_len; k++)
-			s->d1->handshake_fragment[k] = *src++;
-		return n;
-		}
-	
-	return 0;
-	}
-
-
-
-
-/* Call this to write data in records of type 'type'
- * It will return <= 0 if not all data has been sent or non-blocking IO.
- */
-int dtls1_write_bytes(SSL *s, int type, const void *buf, int len)
-	{
-	int i;
-
-	assert(len <= SSL3_RT_MAX_PLAIN_LENGTH);
-	s->rwstate=SSL_NOTHING;
-	i=do_dtls1_write(s, type, buf, len);
-	return i;
-	}
-
-static int do_dtls1_write(SSL *s, int type, const unsigned char *buf,
-			  unsigned int len)
-	{
-	unsigned char *p,*pseq;
-	int i,mac_size,clear=0;
-	int prefix_len = 0;
-	int eivlen;
-	SSL3_RECORD *wr;
-	SSL3_BUFFER *wb;
-	SSL_SESSION *sess;
-
-	/* first check if there is a SSL3_BUFFER still being written
-	 * out.  This will happen with non blocking IO */
-	if (s->s3->wbuf.left != 0)
-		{
-		assert(0); /* XDTLS:  want to see if we ever get here */
-		return(ssl3_write_pending(s,type,buf,len));
-		}
-
-	/* If we have an alert to send, lets send it */
-	if (s->s3->alert_dispatch)
-		{
-		i=s->method->ssl_dispatch_alert(s);
-		if (i <= 0)
-			return(i);
-		/* if it went, fall through and send more stuff */
-		}
-
-	if (len == 0)
-		return 0;
-
-	wr= &(s->s3->wrec);
-	wb= &(s->s3->wbuf);
-	sess=s->session;
-
-	if (	(sess == NULL) ||
-		(s->enc_write_ctx == NULL) ||
-		(EVP_MD_CTX_md(s->write_hash) == NULL))
-		clear=1;
-
-	if (clear)
-		mac_size=0;
-	else
-		{
-		mac_size=EVP_MD_CTX_size(s->write_hash);
-		if (mac_size < 0)
-			goto err;
-		}
-
-	p = wb->buf + prefix_len;
-
-	/* write the header */
-
-	*(p++)=type&0xff;
-	wr->type=type;
-	/* Special case: for hello verify request, client version 1.0 and
-	 * we haven't decided which version to use yet send back using 
-	 * version 1.0 header: otherwise some clients will ignore it.
-	 */
-	if (!s->s3->have_version)
-		{
-		*(p++) = DTLS1_VERSION >> 8;
-		*(p++) = DTLS1_VERSION & 0xff;
-		}
-	else
-		{
-		*(p++) = s->version >> 8;
-		*(p++) = s->version & 0xff;
-		}
-
-	/* field where we are to write out packet epoch, seq num and len */
-	pseq=p; 
-	p+=10;
-
-	/* Explicit IV length, block ciphers appropriate version flag */
-	if (s->enc_write_ctx)
-		{
-		int mode = EVP_CIPHER_CTX_mode(s->enc_write_ctx);
-		if (mode == EVP_CIPH_CBC_MODE)
-			{
-			eivlen = EVP_CIPHER_CTX_iv_length(s->enc_write_ctx);
-			if (eivlen <= 1)
-				eivlen = 0;
-			}
-		/* Need explicit part of IV for GCM mode */
-		else if (mode == EVP_CIPH_GCM_MODE)
-			eivlen = EVP_GCM_TLS_EXPLICIT_IV_LEN;
-		else
-			eivlen = 0;
-		}
-	else 
-		eivlen = 0;
-
-	/* lets setup the record stuff. */
-	wr->data=p + eivlen;  /* make room for IV in case of CBC */
-	wr->length=(int)len;
-	wr->input=(unsigned char *)buf;
-
-	/* we now 'read' from wr->input, wr->length bytes into
-	 * wr->data */
-
-	memcpy(wr->data,wr->input,wr->length);
-	wr->input=wr->data;
-
-	/* we should still have the output to wr->data and the input
-	 * from wr->input.  Length should be wr->length.
-	 * wr->data still points in the wb->buf */
-
-	if (mac_size != 0)
-		{
-		if(s->enc_method->mac(s,&(p[wr->length + eivlen]),1) < 0)
-			goto err;
-		wr->length+=mac_size;
-		}
-
-	/* this is true regardless of mac size */
-	wr->input=p;
-	wr->data=p;
-
-	if (eivlen)
-		wr->length += eivlen;
-
-	if (s->enc_method->enc(s, 1) < 1)
-		goto err;
-
-	/* record length after mac and block padding */
-/*	if (type == SSL3_RT_APPLICATION_DATA ||
-	(type == SSL3_RT_ALERT && ! SSL_in_init(s))) */
-	
-	/* there's only one epoch between handshake and app data */
-	
-	s2n(s->d1->w_epoch, pseq);
-
-	/* XDTLS: ?? */
-/*	else
-	s2n(s->d1->handshake_epoch, pseq); */
-
-	memcpy(pseq, &(s->s3->write_sequence[2]), 6);
-	pseq+=6;
-	s2n(wr->length,pseq);
-
-	if (s->msg_callback)
-		s->msg_callback(1, 0, SSL3_RT_HEADER, pseq - DTLS1_RT_HEADER_LENGTH, DTLS1_RT_HEADER_LENGTH, s, s->msg_callback_arg);
-
-	/* we should now have
-	 * wr->data pointing to the encrypted data, which is
-	 * wr->length long */
-	wr->type=type; /* not needed but helps for debugging */
-	wr->length+=DTLS1_RT_HEADER_LENGTH;
-
-#if 0  /* this is now done at the message layer */
-	/* buffer the record, making it easy to handle retransmits */
-	if ( type == SSL3_RT_HANDSHAKE || type == SSL3_RT_CHANGE_CIPHER_SPEC)
-		dtls1_buffer_record(s, wr->data, wr->length, 
-			*((PQ_64BIT *)&(s->s3->write_sequence[0])));
-#endif
-
-	ssl3_record_sequence_update(&(s->s3->write_sequence[0]));
-
-	/* now let's set up wb */
-	wb->left = prefix_len + wr->length;
-	wb->offset = 0;
-
-	/* memorize arguments so that ssl3_write_pending can detect bad write retries later */
-	s->s3->wpend_tot=len;
-	s->s3->wpend_buf=buf;
-	s->s3->wpend_type=type;
-	s->s3->wpend_ret=len;
-
-	/* we now just need to write the buffer */
-	return ssl3_write_pending(s,type,buf,len);
-err:
-	return -1;
-	}
-
-
-
-static int dtls1_record_replay_check(SSL *s, DTLS1_BITMAP *bitmap)
-	{
-	int cmp;
-	unsigned int shift;
-	const unsigned char *seq = s->s3->read_sequence;
-
-	cmp = satsub64be(seq,bitmap->max_seq_num);
-	if (cmp > 0)
-		{
-		memcpy (s->s3->rrec.seq_num,seq,8);
-		return 1; /* this record in new */
-		}
-	shift = -cmp;
-	if (shift >= sizeof(bitmap->map)*8)
-		return 0; /* stale, outside the window */
-	else if (bitmap->map & (((uint64_t) 1) << shift))
-		return 0; /* record previously received */
-
-	memcpy (s->s3->rrec.seq_num,seq,8);
-	return 1;
-	}
-
-
-static void dtls1_record_bitmap_update(SSL *s, DTLS1_BITMAP *bitmap)
-	{
-	int cmp;
-	unsigned int shift;
-	const unsigned char *seq = s->s3->read_sequence;
-
-	cmp = satsub64be(seq,bitmap->max_seq_num);
-	if (cmp > 0)
-		{
-		shift = cmp;
-		if (shift < sizeof(bitmap->map)*8)
-			bitmap->map <<= shift, bitmap->map |= 1UL;
-		else
-			bitmap->map = 1UL;
-		memcpy(bitmap->max_seq_num,seq,8);
-		}
-	else	{
-		shift = -cmp;
-		if (shift < sizeof(bitmap->map)*8)
-			bitmap->map |= ((uint64_t) 1) << shift;
-		}
-	}
-
-
-int dtls1_dispatch_alert(SSL *s)
-	{
-	int i,j;
-	void (*cb)(const SSL *ssl,int type,int val)=NULL;
-	unsigned char buf[DTLS1_AL_HEADER_LENGTH];
-	unsigned char *ptr = &buf[0];
-
-	s->s3->alert_dispatch=0;
-
-	memset(buf, 0x00, sizeof(buf));
-	*ptr++ = s->s3->send_alert[0];
-	*ptr++ = s->s3->send_alert[1];
-
-	i = do_dtls1_write(s, SSL3_RT_ALERT, &buf[0], sizeof(buf));
-	if (i <= 0)
-		{
-		s->s3->alert_dispatch=1;
-		/* fprintf( stderr, "not done with alert\n" ); */
-		}
-	else
-		{
-		if (s->s3->send_alert[0] == SSL3_AL_FATAL)
-			(void)BIO_flush(s->wbio);
-
-		if (s->msg_callback)
-			s->msg_callback(1, s->version, SSL3_RT_ALERT, s->s3->send_alert, 
-				2, s, s->msg_callback_arg);
-
-		if (s->info_callback != NULL)
-			cb=s->info_callback;
-		else if (s->ctx->info_callback != NULL)
-			cb=s->ctx->info_callback;
-
-		if (cb != NULL)
-			{
-			j=(s->s3->send_alert[0]<<8)|s->s3->send_alert[1];
-			cb(s,SSL_CB_WRITE_ALERT,j);
-			}
-		}
-	return(i);
-	}
-
-
-static DTLS1_BITMAP *
-dtls1_get_bitmap(SSL *s, SSL3_RECORD *rr, unsigned int *is_next_epoch)
-    {
-    
-    *is_next_epoch = 0;
-
-    /* In current epoch, accept HM, CCS, DATA, & ALERT */
-    if (rr->epoch == s->d1->r_epoch)
-        return &s->d1->bitmap;
-
-    /* Only HM and ALERT messages can be from the next epoch */
-    else if (rr->epoch == (unsigned long)(s->d1->r_epoch + 1) &&
-        (rr->type == SSL3_RT_HANDSHAKE ||
-            rr->type == SSL3_RT_ALERT))
-        {
-        *is_next_epoch = 1;
-        return &s->d1->next_bitmap;
-        }
-
-    return NULL;
+  if (type == rr->type) { /* SSL3_RT_APPLICATION_DATA or SSL3_RT_HANDSHAKE */
+    /* make sure that we are not getting application data when we
+     * are doing a handshake for the first time */
+    if (SSL_in_init(s) && (type == SSL3_RT_APPLICATION_DATA) &&
+        (s->enc_read_ctx == NULL)) {
+      al = SSL_AD_UNEXPECTED_MESSAGE;
+      OPENSSL_PUT_ERROR(SSL, dtls1_read_bytes, SSL_R_APP_DATA_IN_HANDSHAKE);
+      goto f_err;
     }
 
-#if 0
-static int
-dtls1_record_needs_buffering(SSL *s, SSL3_RECORD *rr, unsigned short *priority,
-	unsigned long *offset)
-	{
+    if (len <= 0) {
+      return len;
+    }
 
-	/* alerts are passed up immediately */
-	if ( rr->type == SSL3_RT_APPLICATION_DATA ||
-		rr->type == SSL3_RT_ALERT)
-		return 0;
+    if ((unsigned int)len > rr->length) {
+      n = rr->length;
+    } else {
+      n = (unsigned int)len;
+    }
 
-	/* Only need to buffer if a handshake is underway.
-	 * (this implies that Hello Request and Client Hello are passed up
-	 * immediately) */
-	if ( SSL_in_init(s))
-		{
-		unsigned char *data = rr->data;
-		/* need to extract the HM/CCS sequence number here */
-		if ( rr->type == SSL3_RT_HANDSHAKE ||
-			rr->type == SSL3_RT_CHANGE_CIPHER_SPEC)
-			{
-			unsigned short seq_num;
-			struct hm_header_st msg_hdr;
-			struct ccs_header_st ccs_hdr;
+    memcpy(buf, &(rr->data[rr->off]), n);
+    if (!peek) {
+      rr->length -= n;
+      rr->off += n;
+      if (rr->length == 0) {
+        s->rstate = SSL_ST_READ_HEADER;
+        rr->off = 0;
+      }
+    }
 
-			if ( rr->type == SSL3_RT_HANDSHAKE)
-				{
-				dtls1_get_message_header(data, &msg_hdr);
-				seq_num = msg_hdr.seq;
-				*offset = msg_hdr.frag_off;
-				}
-			else
-				{
-				dtls1_get_ccs_header(data, &ccs_hdr);
-				seq_num = ccs_hdr.seq;
-				*offset = 0;
-				}
-				
-			/* this is either a record we're waiting for, or a
-			 * retransmit of something we happened to previously 
-			 * receive (higher layers will drop the repeat silently */
-			if ( seq_num < s->d1->handshake_read_seq)
-				return 0;
-			if (rr->type == SSL3_RT_HANDSHAKE && 
-				seq_num == s->d1->handshake_read_seq &&
-				msg_hdr.frag_off < s->d1->r_msg_hdr.frag_off)
-				return 0;
-			else if ( seq_num == s->d1->handshake_read_seq &&
-				(rr->type == SSL3_RT_CHANGE_CIPHER_SPEC ||
-					msg_hdr.frag_off == s->d1->r_msg_hdr.frag_off))
-				return 0;
-			else
-				{
-				*priority = seq_num;
-				return 1;
-				}
-			}
-		else /* unknown record type */
-			return 0;
-		}
+    return n;
+  }
 
-	return 0;
-	}
-#endif
+  /* If we get here, then type != rr->type; if we have a handshake message,
+   * then it was unexpected (Hello Request or Client Hello). */
 
-void
-dtls1_reset_seq_numbers(SSL *s, int rw)
-	{
-	unsigned char *seq;
-	unsigned int seq_bytes = sizeof(s->s3->read_sequence);
+  /* In case of record types for which we have 'fragment' storage, fill that so
+   * that we can process the data at a fixed place. */
+  {
+    unsigned int k, dest_maxlen = 0;
+    uint8_t *dest = NULL;
+    unsigned int *dest_len = NULL;
 
-	if ( rw & SSL3_CC_READ)
-		{
-		seq = s->s3->read_sequence;
-		s->d1->r_epoch++;
-		memcpy(&(s->d1->bitmap), &(s->d1->next_bitmap), sizeof(DTLS1_BITMAP));
-		memset(&(s->d1->next_bitmap), 0x00, sizeof(DTLS1_BITMAP));
-		}
-	else
-		{
-		seq = s->s3->write_sequence;
-		memcpy(s->d1->last_write_sequence, seq, sizeof(s->s3->write_sequence));
-		s->d1->w_epoch++;
-		}
+    if (rr->type == SSL3_RT_HANDSHAKE) {
+      dest_maxlen = sizeof s->d1->handshake_fragment;
+      dest = s->d1->handshake_fragment;
+      dest_len = &s->d1->handshake_fragment_len;
+    } else if (rr->type == SSL3_RT_ALERT) {
+      dest_maxlen = sizeof(s->d1->alert_fragment);
+      dest = s->d1->alert_fragment;
+      dest_len = &s->d1->alert_fragment_len;
+    }
+    /* else it's a CCS message, or application data or wrong */
+    else if (rr->type != SSL3_RT_CHANGE_CIPHER_SPEC) {
+      /* Application data while renegotiating is allowed. Try again reading. */
+      if (rr->type == SSL3_RT_APPLICATION_DATA) {
+        BIO *bio;
+        s->s3->in_read_app_data = 2;
+        bio = SSL_get_rbio(s);
+        s->rwstate = SSL_READING;
+        BIO_clear_retry_flags(bio);
+        BIO_set_retry_read(bio);
+        return -1;
+      }
 
-	memset(seq, 0x00, seq_bytes);
-	}
+      /* Not certain if this is the right error handling */
+      al = SSL_AD_UNEXPECTED_MESSAGE;
+      OPENSSL_PUT_ERROR(SSL, dtls1_read_bytes, SSL_R_UNEXPECTED_RECORD);
+      goto f_err;
+    }
+
+    if (dest_maxlen > 0) {
+      /* XDTLS:  In a pathalogical case, the Client Hello
+       *  may be fragmented--don't always expect dest_maxlen bytes */
+      if (rr->length < dest_maxlen) {
+        s->rstate = SSL_ST_READ_HEADER;
+        rr->length = 0;
+        goto start;
+      }
+
+      /* now move 'n' bytes: */
+      for (k = 0; k < dest_maxlen; k++) {
+        dest[k] = rr->data[rr->off++];
+        rr->length--;
+      }
+      *dest_len = dest_maxlen;
+    }
+  }
+
+  /* s->d1->handshake_fragment_len == 12  iff  rr->type == SSL3_RT_HANDSHAKE;
+   * s->d1->alert_fragment_len == 7      iff  rr->type == SSL3_RT_ALERT.
+   * (Possibly rr is 'empty' now, i.e. rr->length may be 0.) */
+
+  /* If we are a client, check for an incoming 'Hello Request': */
+  if (!s->server && s->d1->handshake_fragment_len >= DTLS1_HM_HEADER_LENGTH &&
+      s->d1->handshake_fragment[0] == SSL3_MT_HELLO_REQUEST &&
+      s->session != NULL && s->session->cipher != NULL) {
+    s->d1->handshake_fragment_len = 0;
+
+    if ((s->d1->handshake_fragment[1] != 0) ||
+        (s->d1->handshake_fragment[2] != 0) ||
+        (s->d1->handshake_fragment[3] != 0)) {
+      al = SSL_AD_DECODE_ERROR;
+      OPENSSL_PUT_ERROR(SSL, dtls1_read_bytes, SSL_R_BAD_HELLO_REQUEST);
+      goto f_err;
+    }
+
+    /* no need to check sequence number on HELLO REQUEST messages */
+
+    if (s->msg_callback) {
+      s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE,
+                      s->d1->handshake_fragment, 4, s, s->msg_callback_arg);
+    }
+
+    if (SSL_is_init_finished(s) && !s->s3->renegotiate) {
+      s->d1->handshake_read_seq++;
+      s->new_session = 1;
+      ssl3_renegotiate(s);
+      if (ssl3_renegotiate_check(s)) {
+        i = s->handshake_func(s);
+        if (i < 0) {
+          return i;
+        }
+        if (i == 0) {
+          OPENSSL_PUT_ERROR(SSL, dtls1_read_bytes, SSL_R_SSL_HANDSHAKE_FAILURE);
+          return -1;
+        }
+      }
+    }
+
+    /* we either finished a handshake or ignored the request, now try again to
+     * obtain the (application) data we were asked for */
+    goto start;
+  }
+
+  if (s->d1->alert_fragment_len >= DTLS1_AL_HEADER_LENGTH) {
+    int alert_level = s->d1->alert_fragment[0];
+    int alert_descr = s->d1->alert_fragment[1];
+
+    s->d1->alert_fragment_len = 0;
+
+    if (s->msg_callback) {
+      s->msg_callback(0, s->version, SSL3_RT_ALERT, s->d1->alert_fragment, 2, s,
+                      s->msg_callback_arg);
+    }
+
+    if (s->info_callback != NULL) {
+      cb = s->info_callback;
+    } else if (s->ctx->info_callback != NULL) {
+      cb = s->ctx->info_callback;
+    }
+
+    if (cb != NULL) {
+      j = (alert_level << 8) | alert_descr;
+      cb(s, SSL_CB_READ_ALERT, j);
+    }
+
+    if (alert_level == 1) { /* warning */
+      s->s3->warn_alert = alert_descr;
+      if (alert_descr == SSL_AD_CLOSE_NOTIFY) {
+        s->shutdown |= SSL_RECEIVED_SHUTDOWN;
+        return 0;
+      }
+    } else if (alert_level == 2) { /* fatal */
+      char tmp[16];
+
+      s->rwstate = SSL_NOTHING;
+      s->s3->fatal_alert = alert_descr;
+      OPENSSL_PUT_ERROR(SSL, dtls1_read_bytes,
+                        SSL_AD_REASON_OFFSET + alert_descr);
+      BIO_snprintf(tmp, sizeof tmp, "%d", alert_descr);
+      ERR_add_error_data(2, "SSL alert number ", tmp);
+      s->shutdown |= SSL_RECEIVED_SHUTDOWN;
+      SSL_CTX_remove_session(s->ctx, s->session);
+      return 0;
+    } else {
+      al = SSL_AD_ILLEGAL_PARAMETER;
+      OPENSSL_PUT_ERROR(SSL, dtls1_read_bytes, SSL_R_UNKNOWN_ALERT_TYPE);
+      goto f_err;
+    }
+
+    goto start;
+  }
+
+  if (s->shutdown & SSL_SENT_SHUTDOWN) {
+    /* but we have not received a shutdown */
+    s->rwstate = SSL_NOTHING;
+    rr->length = 0;
+    return 0;
+  }
+
+  if (rr->type == SSL3_RT_CHANGE_CIPHER_SPEC) {
+    struct ccs_header_st ccs_hdr;
+    unsigned int ccs_hdr_len = DTLS1_CCS_HEADER_LENGTH;
+
+    dtls1_get_ccs_header(rr->data, &ccs_hdr);
+
+    /* 'Change Cipher Spec' is just a single byte, so we know
+     * exactly what the record payload has to look like */
+    /* XDTLS: check that epoch is consistent */
+    if ((rr->length != ccs_hdr_len) || (rr->off != 0) ||
+        (rr->data[0] != SSL3_MT_CCS)) {
+      al = SSL_AD_ILLEGAL_PARAMETER;
+      OPENSSL_PUT_ERROR(SSL, dtls1_read_bytes, SSL_R_BAD_CHANGE_CIPHER_SPEC);
+      goto f_err;
+    }
+
+    rr->length = 0;
+
+    if (s->msg_callback) {
+      s->msg_callback(0, s->version, SSL3_RT_CHANGE_CIPHER_SPEC, rr->data, 1, s,
+                      s->msg_callback_arg);
+    }
+
+    /* We can't process a CCS now, because previous handshake
+     * messages are still missing, so just drop it.
+     */
+    if (!s->d1->change_cipher_spec_ok) {
+      goto start;
+    }
+
+    s->d1->change_cipher_spec_ok = 0;
+
+    s->s3->change_cipher_spec = 1;
+    if (!ssl3_do_change_cipher_spec(s)) {
+      goto err;
+    }
+
+    /* do this whenever CCS is processed */
+    dtls1_reset_seq_numbers(s, SSL3_CC_READ);
+
+    goto start;
+  }
+
+  /* Unexpected handshake message (Client Hello, or protocol violation) */
+  if ((s->d1->handshake_fragment_len >= DTLS1_HM_HEADER_LENGTH) &&
+      !s->in_handshake) {
+    struct hm_header_st msg_hdr;
+
+    /* this may just be a stale retransmit */
+    dtls1_get_message_header(rr->data, &msg_hdr);
+    if (rr->epoch != s->d1->r_epoch) {
+      rr->length = 0;
+      goto start;
+    }
+
+    /* If we are server, we may have a repeated FINISHED of the client here,
+     * then retransmit our CCS and FINISHED. */
+    if (msg_hdr.type == SSL3_MT_FINISHED) {
+      if (dtls1_check_timeout_num(s) < 0) {
+        return -1;
+      }
+
+      dtls1_retransmit_buffered_messages(s);
+      rr->length = 0;
+      goto start;
+    }
+
+    if ((s->state & SSL_ST_MASK) == SSL_ST_OK) {
+      s->state = s->server ? SSL_ST_ACCEPT : SSL_ST_CONNECT;
+      s->renegotiate = 1;
+      s->new_session = 1;
+    }
+    i = s->handshake_func(s);
+    if (i < 0) {
+      return i;
+    }
+    if (i == 0) {
+      OPENSSL_PUT_ERROR(SSL, dtls1_read_bytes, SSL_R_SSL_HANDSHAKE_FAILURE);
+      return -1;
+    }
+
+    goto start;
+  }
+
+  switch (rr->type) {
+    default:
+      /* TLS just ignores unknown message types */
+      if (s->version == TLS1_VERSION) {
+        rr->length = 0;
+        goto start;
+      }
+      al = SSL_AD_UNEXPECTED_MESSAGE;
+      OPENSSL_PUT_ERROR(SSL, dtls1_read_bytes, SSL_R_UNEXPECTED_RECORD);
+      goto f_err;
+
+    case SSL3_RT_CHANGE_CIPHER_SPEC:
+    case SSL3_RT_ALERT:
+    case SSL3_RT_HANDSHAKE:
+      /* we already handled all of these, with the possible exception of
+       * SSL3_RT_HANDSHAKE when s->in_handshake is set, but that should not
+       * happen when type != rr->type */
+      al = SSL_AD_UNEXPECTED_MESSAGE;
+      OPENSSL_PUT_ERROR(SSL, dtls1_read_bytes, ERR_R_INTERNAL_ERROR);
+      goto f_err;
+
+    case SSL3_RT_APPLICATION_DATA:
+      /* At this point, we were expecting handshake data, but have application
+       * data. If the library was running inside ssl3_read() (i.e.
+       * in_read_app_data is set) and it makes sense to read application data
+       * at this point (session renegotiation not yet started), we will indulge
+       * it. */
+      if (s->s3->in_read_app_data && (s->s3->total_renegotiations != 0) &&
+          (((s->state & SSL_ST_CONNECT) &&
+            (s->state >= SSL3_ST_CW_CLNT_HELLO_A) &&
+            (s->state <= SSL3_ST_CR_SRVR_HELLO_A)) ||
+           ((s->state & SSL_ST_ACCEPT) &&
+            (s->state <= SSL3_ST_SW_HELLO_REQ_A) &&
+            (s->state >= SSL3_ST_SR_CLNT_HELLO_A)))) {
+        s->s3->in_read_app_data = 2;
+        return -1;
+      } else {
+        al = SSL_AD_UNEXPECTED_MESSAGE;
+        OPENSSL_PUT_ERROR(SSL, dtls1_read_bytes, SSL_R_UNEXPECTED_RECORD);
+        goto f_err;
+      }
+  }
+
+  /* not reached */
+
+f_err:
+  ssl3_send_alert(s, SSL3_AL_FATAL, al);
+err:
+  return -1;
+}
+
+int dtls1_write_app_data_bytes(SSL *s, int type, const void *buf_, int len) {
+  int i;
+
+  if (SSL_in_init(s) && !s->in_handshake) {
+    i = s->handshake_func(s);
+    if (i < 0) {
+      return i;
+    }
+    if (i == 0) {
+      OPENSSL_PUT_ERROR(SSL, dtls1_write_app_data_bytes,
+                        SSL_R_SSL_HANDSHAKE_FAILURE);
+      return -1;
+    }
+  }
+
+  if (len > SSL3_RT_MAX_PLAIN_LENGTH) {
+    OPENSSL_PUT_ERROR(SSL, dtls1_write_app_data_bytes,
+                      SSL_R_DTLS_MESSAGE_TOO_BIG);
+    return -1;
+  }
+
+  i = dtls1_write_bytes(s, type, buf_, len);
+  return i;
+}
+
+
+/* this only happens when a client hello is received and a handshake is
+ * started. */
+static int have_handshake_fragment(SSL *s, int type, uint8_t *buf,
+                                   int len, int peek) {
+  if (type == SSL3_RT_HANDSHAKE && s->d1->handshake_fragment_len > 0) {
+    /* (partially) satisfy request from storage */
+    uint8_t *src = s->d1->handshake_fragment;
+    uint8_t *dst = buf;
+    unsigned int k, n;
+
+    /* peek == 0 */
+    n = 0;
+    while (len > 0 && s->d1->handshake_fragment_len > 0) {
+      *dst++ = *src++;
+      len--;
+      s->d1->handshake_fragment_len--;
+      n++;
+    }
+    /* move any remaining fragment bytes: */
+    for (k = 0; k < s->d1->handshake_fragment_len; k++) {
+      s->d1->handshake_fragment[k] = *src++;
+    }
+    return n;
+  }
+
+  return 0;
+}
+
+/* Call this to write data in records of type 'type' It will return <= 0 if not
+ * all data has been sent or non-blocking IO. */
+int dtls1_write_bytes(SSL *s, int type, const void *buf, int len) {
+  int i;
+
+  assert(len <= SSL3_RT_MAX_PLAIN_LENGTH);
+  s->rwstate = SSL_NOTHING;
+  i = do_dtls1_write(s, type, buf, len);
+  return i;
+}
+
+static int do_dtls1_write(SSL *s, int type, const uint8_t *buf,
+                          unsigned int len) {
+  uint8_t *p, *pseq;
+  int i, mac_size = 0;
+  int prefix_len = 0;
+  int eivlen = 0;
+  SSL3_RECORD *wr;
+  SSL3_BUFFER *wb;
+  SSL_SESSION *sess;
+
+  /* first check if there is a SSL3_BUFFER still being written
+   * out.  This will happen with non blocking IO */
+  if (s->s3->wbuf.left != 0) {
+    assert(0); /* XDTLS:  want to see if we ever get here */
+    return ssl3_write_pending(s, type, buf, len);
+  }
+
+  /* If we have an alert to send, lets send it */
+  if (s->s3->alert_dispatch) {
+    i = s->method->ssl_dispatch_alert(s);
+    if (i <= 0) {
+      return i;
+    }
+    /* if it went, fall through and send more stuff */
+  }
+
+  if (len == 0) {
+    return 0;
+  }
+
+  wr = &(s->s3->wrec);
+  wb = &(s->s3->wbuf);
+  sess = s->session;
+
+  if (sess != NULL && s->enc_write_ctx != NULL &&
+      EVP_MD_CTX_md(s->write_hash) != NULL) {
+    mac_size = EVP_MD_CTX_size(s->write_hash);
+    if (mac_size < 0) {
+      goto err;
+    }
+  }
+
+  p = wb->buf + prefix_len;
+
+  /* write the header */
+
+  *(p++) = type & 0xff;
+  wr->type = type;
+  /* Special case: for hello verify request, client version 1.0 and
+   * we haven't decided which version to use yet send back using
+   * version 1.0 header: otherwise some clients will ignore it.
+   */
+  if (!s->s3->have_version) {
+    *(p++) = DTLS1_VERSION >> 8;
+    *(p++) = DTLS1_VERSION & 0xff;
+  } else {
+    *(p++) = s->version >> 8;
+    *(p++) = s->version & 0xff;
+  }
+
+  /* field where we are to write out packet epoch, seq num and len */
+  pseq = p;
+  p += 10;
+
+  /* Explicit IV length, block ciphers appropriate version flag */
+  if (s->enc_write_ctx) {
+    int mode = EVP_CIPHER_CTX_mode(s->enc_write_ctx);
+    if (mode == EVP_CIPH_CBC_MODE) {
+      eivlen = EVP_CIPHER_CTX_iv_length(s->enc_write_ctx);
+      if (eivlen <= 1) {
+        eivlen = 0;
+      }
+    } else if (mode == EVP_CIPH_GCM_MODE) {
+      /* Need explicit part of IV for GCM mode */
+      eivlen = EVP_GCM_TLS_EXPLICIT_IV_LEN;
+    }
+  }
+
+  /* lets setup the record stuff. */
+  wr->data = p + eivlen; /* make room for IV in case of CBC */
+  wr->length = (int)len;
+  wr->input = (unsigned char *)buf;
+
+  /* we now 'read' from wr->input, wr->length bytes into wr->data */
+  memcpy(wr->data, wr->input, wr->length);
+  wr->input = wr->data;
+
+  /* we should still have the output to wr->data and the input from wr->input.
+   * Length should be wr->length. wr->data still points in the wb->buf */
+  if (mac_size != 0) {
+    if (s->enc_method->mac(s, &(p[wr->length + eivlen]), 1) < 0) {
+      goto err;
+    }
+    wr->length += mac_size;
+  }
+
+  /* this is true regardless of mac size */
+  wr->input = p;
+  wr->data = p;
+  wr->length += eivlen;
+
+  if (s->enc_method->enc(s, 1) < 1) {
+    goto err;
+  }
+
+  /* there's only one epoch between handshake and app data */
+  s2n(s->d1->w_epoch, pseq);
+
+  memcpy(pseq, &(s->s3->write_sequence[2]), 6);
+  pseq += 6;
+  s2n(wr->length, pseq);
+
+  if (s->msg_callback) {
+    s->msg_callback(1, 0, SSL3_RT_HEADER, pseq - DTLS1_RT_HEADER_LENGTH,
+                    DTLS1_RT_HEADER_LENGTH, s, s->msg_callback_arg);
+  }
+
+  /* we should now have wr->data pointing to the encrypted data, which is
+   * wr->length long */
+  wr->type = type; /* not needed but helps for debugging */
+  wr->length += DTLS1_RT_HEADER_LENGTH;
+
+  ssl3_record_sequence_update(&(s->s3->write_sequence[0]));
+
+  /* now let's set up wb */
+  wb->left = prefix_len + wr->length;
+  wb->offset = 0;
+
+  /* memorize arguments so that ssl3_write_pending can detect bad write retries
+   * later */
+  s->s3->wpend_tot = len;
+  s->s3->wpend_buf = buf;
+  s->s3->wpend_type = type;
+  s->s3->wpend_ret = len;
+
+  /* we now just need to write the buffer */
+  return ssl3_write_pending(s, type, buf, len);
+
+err:
+  return -1;
+}
+
+static int dtls1_record_replay_check(SSL *s, DTLS1_BITMAP *bitmap) {
+  int cmp;
+  unsigned int shift;
+  const uint8_t *seq = s->s3->read_sequence;
+
+  cmp = satsub64be(seq, bitmap->max_seq_num);
+  if (cmp > 0) {
+    memcpy(s->s3->rrec.seq_num, seq, 8);
+    return 1; /* this record in new */
+  }
+  shift = -cmp;
+  if (shift >= sizeof(bitmap->map) * 8) {
+    return 0; /* stale, outside the window */
+  } else if (bitmap->map & (((uint64_t)1) << shift)) {
+    return 0; /* record previously received */
+  }
+
+  memcpy(s->s3->rrec.seq_num, seq, 8);
+  return 1;
+}
+
+static void dtls1_record_bitmap_update(SSL *s, DTLS1_BITMAP *bitmap) {
+  int cmp;
+  unsigned int shift;
+  const uint8_t *seq = s->s3->read_sequence;
+
+  cmp = satsub64be(seq, bitmap->max_seq_num);
+  if (cmp > 0) {
+    shift = cmp;
+    if (shift < sizeof(bitmap->map) * 8) {
+      bitmap->map <<= shift, bitmap->map |= 1UL;
+    } else {
+      bitmap->map = 1UL;
+    }
+    memcpy(bitmap->max_seq_num, seq, 8);
+  } else {
+    shift = -cmp;
+    if (shift < sizeof(bitmap->map) * 8) {
+      bitmap->map |= ((uint64_t)1) << shift;
+    }
+  }
+}
+
+int dtls1_dispatch_alert(SSL *s) {
+  int i, j;
+  void (*cb)(const SSL *ssl, int type, int val) = NULL;
+  uint8_t buf[DTLS1_AL_HEADER_LENGTH];
+  uint8_t *ptr = &buf[0];
+
+  s->s3->alert_dispatch = 0;
+
+  memset(buf, 0x00, sizeof(buf));
+  *ptr++ = s->s3->send_alert[0];
+  *ptr++ = s->s3->send_alert[1];
+
+  i = do_dtls1_write(s, SSL3_RT_ALERT, &buf[0], sizeof(buf));
+  if (i <= 0) {
+    s->s3->alert_dispatch = 1;
+  } else {
+    if (s->s3->send_alert[0] == SSL3_AL_FATAL) {
+      (void)BIO_flush(s->wbio);
+    }
+
+    if (s->msg_callback) {
+      s->msg_callback(1, s->version, SSL3_RT_ALERT, s->s3->send_alert, 2, s,
+                      s->msg_callback_arg);
+    }
+
+    if (s->info_callback != NULL) {
+      cb = s->info_callback;
+    } else if (s->ctx->info_callback != NULL) {
+      cb = s->ctx->info_callback;
+    }
+
+    if (cb != NULL) {
+      j = (s->s3->send_alert[0] << 8) | s->s3->send_alert[1];
+      cb(s, SSL_CB_WRITE_ALERT, j);
+    }
+  }
+
+  return i;
+}
+
+static DTLS1_BITMAP *dtls1_get_bitmap(SSL *s, SSL3_RECORD *rr,
+                                      unsigned int *is_next_epoch) {
+  *is_next_epoch = 0;
+
+  /* In current epoch, accept HM, CCS, DATA, & ALERT */
+  if (rr->epoch == s->d1->r_epoch) {
+    return &s->d1->bitmap;
+  } else if (rr->epoch == (unsigned long)(s->d1->r_epoch + 1) &&
+             (rr->type == SSL3_RT_HANDSHAKE || rr->type == SSL3_RT_ALERT)) {
+    /* Only HM and ALERT messages can be from the next epoch */
+    *is_next_epoch = 1;
+    return &s->d1->next_bitmap;
+  }
+
+  return NULL;
+}
+
+void dtls1_reset_seq_numbers(SSL *s, int rw) {
+  uint8_t *seq;
+  unsigned int seq_bytes = sizeof(s->s3->read_sequence);
+
+  if (rw & SSL3_CC_READ) {
+    seq = s->s3->read_sequence;
+    s->d1->r_epoch++;
+    memcpy(&(s->d1->bitmap), &(s->d1->next_bitmap), sizeof(DTLS1_BITMAP));
+    memset(&(s->d1->next_bitmap), 0x00, sizeof(DTLS1_BITMAP));
+  } else {
+    seq = s->s3->write_sequence;
+    memcpy(s->d1->last_write_sequence, seq, sizeof(s->s3->write_sequence));
+    s->d1->w_epoch++;
+  }
+
+  memset(seq, 0x00, seq_bytes);
+}