summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjsing <>2018-08-22 17:46:29 +0000
committerjsing <>2018-08-22 17:46:29 +0000
commit0efe9a67702e1062521567f7091216b2696777ff (patch)
treeb52e454e7bc5ac62631455c9e2c1b0a0cae923a8 /src
parent53e398d973627d7a56dacc2650fcb0c86edff951 (diff)
downloadopenbsd-0efe9a67702e1062521567f7091216b2696777ff.tar.gz
openbsd-0efe9a67702e1062521567f7091216b2696777ff.tar.bz2
openbsd-0efe9a67702e1062521567f7091216b2696777ff.zip
Correct session ticket encryption.
The CBB conversion resulted in the ticket encryption being handled incorrectly, resulting in only the last block being used. Fix this and restore the previous behaviour. Issue found by inoguchi@ and sebastia@. ok inoguchi@ and tb@
Diffstat (limited to 'src')
-rw-r--r--src/lib/libssl/ssl_srvr.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/lib/libssl/ssl_srvr.c b/src/lib/libssl/ssl_srvr.c
index 01fe647500..3cf6d9a3cb 100644
--- a/src/lib/libssl/ssl_srvr.c
+++ b/src/lib/libssl/ssl_srvr.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssl_srvr.c,v 1.41 2018/08/19 15:38:03 jsing Exp $ */ 1/* $OpenBSD: ssl_srvr.c,v 1.42 2018/08/22 17:46:29 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 *
@@ -2532,7 +2532,7 @@ ssl3_send_newsession_ticket(SSL *s)
2532 const unsigned char *const_p; 2532 const unsigned char *const_p;
2533 unsigned char *p, *hmac; 2533 unsigned char *p, *hmac;
2534 size_t hmac_len; 2534 size_t hmac_len;
2535 int enc_ticket_len, slen; 2535 int enc_ticket_len, len, slen;
2536 int slen_full = 0; 2536 int slen_full = 0;
2537 SSL_SESSION *sess; 2537 SSL_SESSION *sess;
2538 unsigned int hlen; 2538 unsigned int hlen;
@@ -2610,9 +2610,16 @@ ssl3_send_newsession_ticket(SSL *s)
2610 /* Encrypt the session ticket. */ 2610 /* Encrypt the session ticket. */
2611 if ((enc_ticket = calloc(1, slen + EVP_MAX_BLOCK_LENGTH)) == NULL) 2611 if ((enc_ticket = calloc(1, slen + EVP_MAX_BLOCK_LENGTH)) == NULL)
2612 goto err; 2612 goto err;
2613 if (!EVP_EncryptUpdate(&ctx, enc_ticket, &enc_ticket_len, senc, slen)) 2613 enc_ticket_len = 0;
2614 if (!EVP_EncryptUpdate(&ctx, enc_ticket, &len, senc, slen))
2614 goto err; 2615 goto err;
2615 if (!EVP_EncryptFinal_ex(&ctx, enc_ticket, &enc_ticket_len)) 2616 enc_ticket_len += len;
2617 if (!EVP_EncryptFinal_ex(&ctx, enc_ticket + enc_ticket_len, &len))
2618 goto err;
2619 enc_ticket_len += len;
2620
2621 if (enc_ticket_len < 0 ||
2622 enc_ticket_len > slen + EVP_MAX_BLOCK_LENGTH)
2616 goto err; 2623 goto err;
2617 2624
2618 /* Generate the HMAC. */ 2625 /* Generate the HMAC. */