summaryrefslogtreecommitdiffstats
path: root/lib/libssl/src/ssl/s3_lib.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libssl/src/ssl/s3_lib.c')
-rw-r--r--lib/libssl/src/ssl/s3_lib.c54
1 files changed, 53 insertions, 1 deletions
diff --git a/lib/libssl/src/ssl/s3_lib.c b/lib/libssl/src/ssl/s3_lib.c
index e60f004e575..f372b6523c8 100644
--- a/lib/libssl/src/ssl/s3_lib.c
+++ b/lib/libssl/src/ssl/s3_lib.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: s3_lib.c,v 1.89 2014/12/14 15:30:50 jsing Exp $ */
+/* $OpenBSD: s3_lib.c,v 1.90 2014/12/14 16:07:26 jsing Exp $ */
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
@@ -1837,6 +1837,58 @@ ssl3_pending(const SSL *s)
s->s3->rrec.length : 0;
}
+unsigned char *
+ssl3_handshake_msg_start(SSL *s, uint8_t msg_type)
+{
+ unsigned char *d, *p;
+ int hdr_len;
+
+ d = p = (unsigned char *)s->init_buf->data;
+
+ hdr_len = SSL_IS_DTLS(s) ? DTLS1_HM_HEADER_LENGTH :
+ SSL3_HM_HEADER_LENGTH;
+
+ /* Handshake message type and length. */
+ *(p++) = msg_type;
+ l2n3(0, p);
+
+ return (d + hdr_len);
+}
+
+void
+ssl3_handshake_msg_finish(SSL *s, unsigned int len)
+{
+ unsigned char *d, *p;
+ uint8_t msg_type;
+ int hdr_len;
+
+ d = p = (unsigned char *)s->init_buf->data;
+
+ hdr_len = SSL_IS_DTLS(s) ? DTLS1_HM_HEADER_LENGTH :
+ SSL3_HM_HEADER_LENGTH;
+
+ /* Handshake message length. */
+ msg_type = *(p++);
+ l2n3(len, p);
+
+ s->init_num = hdr_len + (int)len;
+ s->init_off = 0;
+
+ if (SSL_IS_DTLS(s)) {
+ dtls1_set_message_header(s, d, msg_type, len, 0, len);
+ dtls1_buffer_message(s, 0);
+ }
+}
+
+int
+ssl3_handshake_write(SSL *s)
+{
+ if (SSL_IS_DTLS(s))
+ return dtls1_do_write(s, SSL3_RT_HANDSHAKE);
+
+ return ssl3_do_write(s, SSL3_RT_HANDSHAKE);
+}
+
int
ssl3_new(SSL *s)
{