diff options
author | jsing <> | 2014-06-21 17:02:25 +0000 |
---|---|---|
committer | jsing <> | 2014-06-21 17:02:25 +0000 |
commit | 840f85a4ae7fc3a3cf71d93ab17fbab37c2cc3fc (patch) | |
tree | f082331208091f9dab5ae7971f7bcd9d557ce5ea /src/lib | |
parent | 01ebd0cfc6bad80679edbaa1924e5d9323c29b2e (diff) | |
download | openbsd-840f85a4ae7fc3a3cf71d93ab17fbab37c2cc3fc.tar.gz openbsd-840f85a4ae7fc3a3cf71d93ab17fbab37c2cc3fc.tar.bz2 openbsd-840f85a4ae7fc3a3cf71d93ab17fbab37c2cc3fc.zip |
Pull the code that builds a DTLS sequence number out into its own function
to avoid duplication. Also use fewer magic numbers.
ok miod@
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/libssl/d1_lib.c | 15 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/d1_lib.c | 15 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/ssl_locl.h | 7 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/t1_enc.c | 30 | ||||
-rw-r--r-- | src/lib/libssl/ssl_locl.h | 7 | ||||
-rw-r--r-- | src/lib/libssl/t1_enc.c | 30 |
6 files changed, 58 insertions, 46 deletions
diff --git a/src/lib/libssl/d1_lib.c b/src/lib/libssl/d1_lib.c index 13c93a77cf..b90cc8eed3 100644 --- a/src/lib/libssl/d1_lib.c +++ b/src/lib/libssl/d1_lib.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: d1_lib.c,v 1.20 2014/06/13 04:29:13 miod Exp $ */ | 1 | /* $OpenBSD: d1_lib.c,v 1.21 2014/06/21 17:02:25 jsing Exp $ */ |
2 | /* | 2 | /* |
3 | * DTLS implementation written by Nagendra Modadugu | 3 | * DTLS implementation written by Nagendra Modadugu |
4 | * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. | 4 | * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. |
@@ -460,3 +460,16 @@ dtls1_listen(SSL *s, struct sockaddr *client) | |||
460 | (void)BIO_dgram_get_peer(SSL_get_rbio(s), client); | 460 | (void)BIO_dgram_get_peer(SSL_get_rbio(s), client); |
461 | return 1; | 461 | return 1; |
462 | } | 462 | } |
463 | |||
464 | void | ||
465 | dtls1_build_sequence_number(unsigned char *dst, unsigned char *seq, | ||
466 | unsigned short epoch) | ||
467 | { | ||
468 | unsigned char dtlsseq[SSL3_SEQUENCE_SIZE]; | ||
469 | unsigned char *p; | ||
470 | |||
471 | p = dtlsseq; | ||
472 | s2n(epoch, p); | ||
473 | memcpy(p, &seq[2], SSL3_SEQUENCE_SIZE - 2); | ||
474 | memcpy(dst, dtlsseq, SSL3_SEQUENCE_SIZE); | ||
475 | } | ||
diff --git a/src/lib/libssl/src/ssl/d1_lib.c b/src/lib/libssl/src/ssl/d1_lib.c index 13c93a77cf..b90cc8eed3 100644 --- a/src/lib/libssl/src/ssl/d1_lib.c +++ b/src/lib/libssl/src/ssl/d1_lib.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: d1_lib.c,v 1.20 2014/06/13 04:29:13 miod Exp $ */ | 1 | /* $OpenBSD: d1_lib.c,v 1.21 2014/06/21 17:02:25 jsing Exp $ */ |
2 | /* | 2 | /* |
3 | * DTLS implementation written by Nagendra Modadugu | 3 | * DTLS implementation written by Nagendra Modadugu |
4 | * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. | 4 | * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. |
@@ -460,3 +460,16 @@ dtls1_listen(SSL *s, struct sockaddr *client) | |||
460 | (void)BIO_dgram_get_peer(SSL_get_rbio(s), client); | 460 | (void)BIO_dgram_get_peer(SSL_get_rbio(s), client); |
461 | return 1; | 461 | return 1; |
462 | } | 462 | } |
463 | |||
464 | void | ||
465 | dtls1_build_sequence_number(unsigned char *dst, unsigned char *seq, | ||
466 | unsigned short epoch) | ||
467 | { | ||
468 | unsigned char dtlsseq[SSL3_SEQUENCE_SIZE]; | ||
469 | unsigned char *p; | ||
470 | |||
471 | p = dtlsseq; | ||
472 | s2n(epoch, p); | ||
473 | memcpy(p, &seq[2], SSL3_SEQUENCE_SIZE - 2); | ||
474 | memcpy(dst, dtlsseq, SSL3_SEQUENCE_SIZE); | ||
475 | } | ||
diff --git a/src/lib/libssl/src/ssl/ssl_locl.h b/src/lib/libssl/src/ssl/ssl_locl.h index e7fdda69a9..09d4b20334 100644 --- a/src/lib/libssl/src/ssl/ssl_locl.h +++ b/src/lib/libssl/src/ssl/ssl_locl.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_locl.h,v 1.52 2014/06/15 15:29:25 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_locl.h,v 1.53 2014/06/21 17:02:25 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -759,9 +759,12 @@ int dtls1_retransmit_message(SSL *s, unsigned short seq, | |||
759 | int dtls1_get_queue_priority(unsigned short seq, int is_ccs); | 759 | int dtls1_get_queue_priority(unsigned short seq, int is_ccs); |
760 | int dtls1_retransmit_buffered_messages(SSL *s); | 760 | int dtls1_retransmit_buffered_messages(SSL *s); |
761 | void dtls1_clear_record_buffer(SSL *s); | 761 | void dtls1_clear_record_buffer(SSL *s); |
762 | void dtls1_get_message_header(unsigned char *data, struct hm_header_st *msg_hdr); | 762 | void dtls1_get_message_header(unsigned char *data, |
763 | struct hm_header_st *msg_hdr); | ||
763 | void dtls1_get_ccs_header(unsigned char *data, struct ccs_header_st *ccs_hdr); | 764 | void dtls1_get_ccs_header(unsigned char *data, struct ccs_header_st *ccs_hdr); |
764 | void dtls1_reset_seq_numbers(SSL *s, int rw); | 765 | void dtls1_reset_seq_numbers(SSL *s, int rw); |
766 | void dtls1_build_sequence_number(unsigned char *dst, unsigned char *seq, | ||
767 | unsigned short epoch); | ||
765 | long dtls1_default_timeout(void); | 768 | long dtls1_default_timeout(void); |
766 | struct timeval* dtls1_get_timeout(SSL *s, struct timeval* timeleft); | 769 | struct timeval* dtls1_get_timeout(SSL *s, struct timeval* timeleft); |
767 | int dtls1_check_timeout_num(SSL *s); | 770 | int dtls1_check_timeout_num(SSL *s); |
diff --git a/src/lib/libssl/src/ssl/t1_enc.c b/src/lib/libssl/src/ssl/t1_enc.c index c4d53af556..373c2d0060 100644 --- a/src/lib/libssl/src/ssl/t1_enc.c +++ b/src/lib/libssl/src/ssl/t1_enc.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: t1_enc.c,v 1.62 2014/06/21 14:45:22 jsing Exp $ */ | 1 | /* $OpenBSD: t1_enc.c,v 1.63 2014/06/21 17:02:25 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -795,11 +795,8 @@ tls1_enc(SSL *s, int send) | |||
795 | ssize_t n; | 795 | ssize_t n; |
796 | 796 | ||
797 | if (SSL_IS_DTLS(s)) { | 797 | if (SSL_IS_DTLS(s)) { |
798 | unsigned char dtlsseq[9], *p = dtlsseq; | 798 | dtls1_build_sequence_number(ad, seq, |
799 | 799 | send ? s->d1->w_epoch : s->d1->r_epoch); | |
800 | s2n(send ? s->d1->w_epoch : s->d1->r_epoch, p); | ||
801 | memcpy(p, &seq[2], 6); | ||
802 | memcpy(ad, dtlsseq, 8); | ||
803 | } else { | 800 | } else { |
804 | memcpy(ad, seq, SSL3_SEQUENCE_SIZE); | 801 | memcpy(ad, seq, SSL3_SEQUENCE_SIZE); |
805 | ssl3_record_sequence_increment(seq); | 802 | ssl3_record_sequence_increment(seq); |
@@ -948,11 +945,8 @@ tls1_enc(SSL *s, int send) | |||
948 | unsigned char buf[13]; | 945 | unsigned char buf[13]; |
949 | 946 | ||
950 | if (SSL_IS_DTLS(s)) { | 947 | if (SSL_IS_DTLS(s)) { |
951 | unsigned char dtlsseq[9], *p = dtlsseq; | 948 | dtls1_build_sequence_number(buf, seq, |
952 | 949 | send ? s->d1->w_epoch : s->d1->r_epoch); | |
953 | s2n(send ? s->d1->w_epoch : s->d1->r_epoch, p); | ||
954 | memcpy(p, &seq[2], 6); | ||
955 | memcpy(buf, dtlsseq, 8); | ||
956 | } else { | 950 | } else { |
957 | memcpy(buf, seq, SSL3_SEQUENCE_SIZE); | 951 | memcpy(buf, seq, SSL3_SEQUENCE_SIZE); |
958 | ssl3_record_sequence_increment(seq); | 952 | ssl3_record_sequence_increment(seq); |
@@ -1131,15 +1125,11 @@ tls1_mac(SSL *ssl, unsigned char *md, int send) | |||
1131 | mac_ctx = &hmac; | 1125 | mac_ctx = &hmac; |
1132 | } | 1126 | } |
1133 | 1127 | ||
1134 | if (SSL_IS_DTLS(ssl)) { | 1128 | if (SSL_IS_DTLS(ssl)) |
1135 | unsigned char dtlsseq[8], *p = dtlsseq; | 1129 | dtls1_build_sequence_number(header, seq, |
1136 | 1130 | send ? ssl->d1->w_epoch : ssl->d1->r_epoch); | |
1137 | s2n(send ? ssl->d1->w_epoch : ssl->d1->r_epoch, p); | 1131 | else |
1138 | memcpy(p, &seq[2], 6); | 1132 | memcpy(header, seq, SSL3_SEQUENCE_SIZE); |
1139 | |||
1140 | memcpy(header, dtlsseq, 8); | ||
1141 | } else | ||
1142 | memcpy(header, seq, 8); | ||
1143 | 1133 | ||
1144 | /* kludge: tls1_cbc_remove_padding passes padding length in rec->type */ | 1134 | /* kludge: tls1_cbc_remove_padding passes padding length in rec->type */ |
1145 | orig_len = rec->length + md_size + ((unsigned int)rec->type >> 8); | 1135 | orig_len = rec->length + md_size + ((unsigned int)rec->type >> 8); |
diff --git a/src/lib/libssl/ssl_locl.h b/src/lib/libssl/ssl_locl.h index e7fdda69a9..09d4b20334 100644 --- a/src/lib/libssl/ssl_locl.h +++ b/src/lib/libssl/ssl_locl.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_locl.h,v 1.52 2014/06/15 15:29:25 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_locl.h,v 1.53 2014/06/21 17:02:25 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -759,9 +759,12 @@ int dtls1_retransmit_message(SSL *s, unsigned short seq, | |||
759 | int dtls1_get_queue_priority(unsigned short seq, int is_ccs); | 759 | int dtls1_get_queue_priority(unsigned short seq, int is_ccs); |
760 | int dtls1_retransmit_buffered_messages(SSL *s); | 760 | int dtls1_retransmit_buffered_messages(SSL *s); |
761 | void dtls1_clear_record_buffer(SSL *s); | 761 | void dtls1_clear_record_buffer(SSL *s); |
762 | void dtls1_get_message_header(unsigned char *data, struct hm_header_st *msg_hdr); | 762 | void dtls1_get_message_header(unsigned char *data, |
763 | struct hm_header_st *msg_hdr); | ||
763 | void dtls1_get_ccs_header(unsigned char *data, struct ccs_header_st *ccs_hdr); | 764 | void dtls1_get_ccs_header(unsigned char *data, struct ccs_header_st *ccs_hdr); |
764 | void dtls1_reset_seq_numbers(SSL *s, int rw); | 765 | void dtls1_reset_seq_numbers(SSL *s, int rw); |
766 | void dtls1_build_sequence_number(unsigned char *dst, unsigned char *seq, | ||
767 | unsigned short epoch); | ||
765 | long dtls1_default_timeout(void); | 768 | long dtls1_default_timeout(void); |
766 | struct timeval* dtls1_get_timeout(SSL *s, struct timeval* timeleft); | 769 | struct timeval* dtls1_get_timeout(SSL *s, struct timeval* timeleft); |
767 | int dtls1_check_timeout_num(SSL *s); | 770 | int dtls1_check_timeout_num(SSL *s); |
diff --git a/src/lib/libssl/t1_enc.c b/src/lib/libssl/t1_enc.c index c4d53af556..373c2d0060 100644 --- a/src/lib/libssl/t1_enc.c +++ b/src/lib/libssl/t1_enc.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: t1_enc.c,v 1.62 2014/06/21 14:45:22 jsing Exp $ */ | 1 | /* $OpenBSD: t1_enc.c,v 1.63 2014/06/21 17:02:25 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -795,11 +795,8 @@ tls1_enc(SSL *s, int send) | |||
795 | ssize_t n; | 795 | ssize_t n; |
796 | 796 | ||
797 | if (SSL_IS_DTLS(s)) { | 797 | if (SSL_IS_DTLS(s)) { |
798 | unsigned char dtlsseq[9], *p = dtlsseq; | 798 | dtls1_build_sequence_number(ad, seq, |
799 | 799 | send ? s->d1->w_epoch : s->d1->r_epoch); | |
800 | s2n(send ? s->d1->w_epoch : s->d1->r_epoch, p); | ||
801 | memcpy(p, &seq[2], 6); | ||
802 | memcpy(ad, dtlsseq, 8); | ||
803 | } else { | 800 | } else { |
804 | memcpy(ad, seq, SSL3_SEQUENCE_SIZE); | 801 | memcpy(ad, seq, SSL3_SEQUENCE_SIZE); |
805 | ssl3_record_sequence_increment(seq); | 802 | ssl3_record_sequence_increment(seq); |
@@ -948,11 +945,8 @@ tls1_enc(SSL *s, int send) | |||
948 | unsigned char buf[13]; | 945 | unsigned char buf[13]; |
949 | 946 | ||
950 | if (SSL_IS_DTLS(s)) { | 947 | if (SSL_IS_DTLS(s)) { |
951 | unsigned char dtlsseq[9], *p = dtlsseq; | 948 | dtls1_build_sequence_number(buf, seq, |
952 | 949 | send ? s->d1->w_epoch : s->d1->r_epoch); | |
953 | s2n(send ? s->d1->w_epoch : s->d1->r_epoch, p); | ||
954 | memcpy(p, &seq[2], 6); | ||
955 | memcpy(buf, dtlsseq, 8); | ||
956 | } else { | 950 | } else { |
957 | memcpy(buf, seq, SSL3_SEQUENCE_SIZE); | 951 | memcpy(buf, seq, SSL3_SEQUENCE_SIZE); |
958 | ssl3_record_sequence_increment(seq); | 952 | ssl3_record_sequence_increment(seq); |
@@ -1131,15 +1125,11 @@ tls1_mac(SSL *ssl, unsigned char *md, int send) | |||
1131 | mac_ctx = &hmac; | 1125 | mac_ctx = &hmac; |
1132 | } | 1126 | } |
1133 | 1127 | ||
1134 | if (SSL_IS_DTLS(ssl)) { | 1128 | if (SSL_IS_DTLS(ssl)) |
1135 | unsigned char dtlsseq[8], *p = dtlsseq; | 1129 | dtls1_build_sequence_number(header, seq, |
1136 | 1130 | send ? ssl->d1->w_epoch : ssl->d1->r_epoch); | |
1137 | s2n(send ? ssl->d1->w_epoch : ssl->d1->r_epoch, p); | 1131 | else |
1138 | memcpy(p, &seq[2], 6); | 1132 | memcpy(header, seq, SSL3_SEQUENCE_SIZE); |
1139 | |||
1140 | memcpy(header, dtlsseq, 8); | ||
1141 | } else | ||
1142 | memcpy(header, seq, 8); | ||
1143 | 1133 | ||
1144 | /* kludge: tls1_cbc_remove_padding passes padding length in rec->type */ | 1134 | /* kludge: tls1_cbc_remove_padding passes padding length in rec->type */ |
1145 | orig_len = rec->length + md_size + ((unsigned int)rec->type >> 8); | 1135 | orig_len = rec->length + md_size + ((unsigned int)rec->type >> 8); |