diff options
author | jsing <> | 2015-09-12 13:03:06 +0000 |
---|---|---|
committer | jsing <> | 2015-09-12 13:03:06 +0000 |
commit | e618cc5773b493ef02c564a16fe49339bdbcd146 (patch) | |
tree | f70e4602964abc6aede5edb02af8610557e50594 /src/lib | |
parent | b7cd3c0625c92074066326cf8ad47e913c3a58e5 (diff) | |
download | openbsd-e618cc5773b493ef02c564a16fe49339bdbcd146.tar.gz openbsd-e618cc5773b493ef02c564a16fe49339bdbcd146.tar.bz2 openbsd-e618cc5773b493ef02c564a16fe49339bdbcd146.zip |
Convert the rest of the server handshake functions to ssl3_handshake_msg_*.
ok beck@
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/libssl/s3_srvr.c | 79 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/s3_srvr.c | 79 |
2 files changed, 70 insertions, 88 deletions
diff --git a/src/lib/libssl/s3_srvr.c b/src/lib/libssl/s3_srvr.c index da7f6d71cd..e9496f9b9d 100644 --- a/src/lib/libssl/s3_srvr.c +++ b/src/lib/libssl/s3_srvr.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: s3_srvr.c,v 1.118 2015/09/11 18:08:21 jsing Exp $ */ | 1 | /* $OpenBSD: s3_srvr.c,v 1.119 2015/09/12 13:03:06 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 | * |
@@ -1256,8 +1256,7 @@ ssl3_send_server_key_exchange(SSL *s) | |||
1256 | r[0] = dh->p; | 1256 | r[0] = dh->p; |
1257 | r[1] = dh->g; | 1257 | r[1] = dh->g; |
1258 | r[2] = dh->pub_key; | 1258 | r[2] = dh->pub_key; |
1259 | } else | 1259 | } else if (type & SSL_kECDHE) { |
1260 | if (type & SSL_kECDHE) { | ||
1261 | const EC_GROUP *group; | 1260 | const EC_GROUP *group; |
1262 | 1261 | ||
1263 | ecdhp = cert->ecdh_tmp; | 1262 | ecdhp = cert->ecdh_tmp; |
@@ -1404,8 +1403,9 @@ ssl3_send_server_key_exchange(SSL *s) | |||
1404 | ERR_LIB_BUF); | 1403 | ERR_LIB_BUF); |
1405 | goto err; | 1404 | goto err; |
1406 | } | 1405 | } |
1407 | d = (unsigned char *)s->init_buf->data; | 1406 | |
1408 | p = &d[4]; | 1407 | d = p = ssl3_handshake_msg_start(s, |
1408 | SSL3_MT_SERVER_KEY_EXCHANGE); | ||
1409 | 1409 | ||
1410 | for (i = 0; i < 4 && r[i] != NULL; i++) { | 1410 | for (i = 0; i < 4 && r[i] != NULL; i++) { |
1411 | s2n(nr[i], p); | 1411 | s2n(nr[i], p); |
@@ -1458,7 +1458,7 @@ ssl3_send_server_key_exchange(SSL *s) | |||
1458 | EVP_DigestUpdate(&md_ctx, | 1458 | EVP_DigestUpdate(&md_ctx, |
1459 | s->s3->server_random, | 1459 | s->s3->server_random, |
1460 | SSL3_RANDOM_SIZE); | 1460 | SSL3_RANDOM_SIZE); |
1461 | EVP_DigestUpdate(&md_ctx, &d[4], n); | 1461 | EVP_DigestUpdate(&md_ctx, d, n); |
1462 | EVP_DigestFinal_ex(&md_ctx, q, | 1462 | EVP_DigestFinal_ex(&md_ctx, q, |
1463 | (unsigned int *)&i); | 1463 | (unsigned int *)&i); |
1464 | q += i; | 1464 | q += i; |
@@ -1493,7 +1493,7 @@ ssl3_send_server_key_exchange(SSL *s) | |||
1493 | EVP_SignUpdate(&md_ctx, | 1493 | EVP_SignUpdate(&md_ctx, |
1494 | s->s3->server_random, | 1494 | s->s3->server_random, |
1495 | SSL3_RANDOM_SIZE); | 1495 | SSL3_RANDOM_SIZE); |
1496 | EVP_SignUpdate(&md_ctx, &d[4], n); | 1496 | EVP_SignUpdate(&md_ctx, d, n); |
1497 | if (!EVP_SignFinal(&md_ctx, &p[2], | 1497 | if (!EVP_SignFinal(&md_ctx, &p[2], |
1498 | (unsigned int *)&i, pkey)) { | 1498 | (unsigned int *)&i, pkey)) { |
1499 | SSLerr( | 1499 | SSLerr( |
@@ -1514,17 +1514,14 @@ ssl3_send_server_key_exchange(SSL *s) | |||
1514 | } | 1514 | } |
1515 | } | 1515 | } |
1516 | 1516 | ||
1517 | *(d++) = SSL3_MT_SERVER_KEY_EXCHANGE; | 1517 | ssl3_handshake_msg_finish(s, n); |
1518 | l2n3(n, d); | ||
1519 | |||
1520 | /* we should now have things packed up, so lets send it off */ | ||
1521 | s->init_num = n + 4; | ||
1522 | s->init_off = 0; | ||
1523 | } | 1518 | } |
1524 | 1519 | ||
1525 | s->state = SSL3_ST_SW_KEY_EXCH_B; | 1520 | s->state = SSL3_ST_SW_KEY_EXCH_B; |
1526 | EVP_MD_CTX_cleanup(&md_ctx); | 1521 | EVP_MD_CTX_cleanup(&md_ctx); |
1527 | return (ssl3_do_write(s, SSL3_RT_HANDSHAKE)); | 1522 | |
1523 | return (ssl3_handshake_write(s)); | ||
1524 | |||
1528 | f_err: | 1525 | f_err: |
1529 | ssl3_send_alert(s, SSL3_AL_FATAL, al); | 1526 | ssl3_send_alert(s, SSL3_AL_FATAL, al); |
1530 | err: | 1527 | err: |
@@ -1546,7 +1543,8 @@ ssl3_send_certificate_request(SSL *s) | |||
1546 | if (s->state == SSL3_ST_SW_CERT_REQ_A) { | 1543 | if (s->state == SSL3_ST_SW_CERT_REQ_A) { |
1547 | buf = s->init_buf; | 1544 | buf = s->init_buf; |
1548 | 1545 | ||
1549 | d = p = (unsigned char *)&(buf->data[4]); | 1546 | d = p = ssl3_handshake_msg_start(s, |
1547 | SSL3_MT_CERTIFICATE_REQUEST); | ||
1550 | 1548 | ||
1551 | /* get the list of acceptable cert types */ | 1549 | /* get the list of acceptable cert types */ |
1552 | p++; | 1550 | p++; |
@@ -1578,7 +1576,8 @@ ssl3_send_certificate_request(SSL *s) | |||
1578 | ERR_R_BUF_LIB); | 1576 | ERR_R_BUF_LIB); |
1579 | goto err; | 1577 | goto err; |
1580 | } | 1578 | } |
1581 | p = (unsigned char *)&(buf->data[4 + n]); | 1579 | p = ssl3_handshake_msg_start(s, |
1580 | SSL3_MT_CERTIFICATE_REQUEST) + n; | ||
1582 | s2n(j, p); | 1581 | s2n(j, p); |
1583 | i2d_X509_NAME(name, &p); | 1582 | i2d_X509_NAME(name, &p); |
1584 | n += 2 + j; | 1583 | n += 2 + j; |
@@ -1586,22 +1585,17 @@ ssl3_send_certificate_request(SSL *s) | |||
1586 | } | 1585 | } |
1587 | } | 1586 | } |
1588 | /* else no CA names */ | 1587 | /* else no CA names */ |
1589 | p = (unsigned char *)&(buf->data[4 + off]); | 1588 | p = ssl3_handshake_msg_start(s, |
1589 | SSL3_MT_CERTIFICATE_REQUEST) + off; | ||
1590 | s2n(nl, p); | 1590 | s2n(nl, p); |
1591 | 1591 | ||
1592 | d = (unsigned char *)buf->data; | 1592 | ssl3_handshake_msg_finish(s, n); |
1593 | *(d++) = SSL3_MT_CERTIFICATE_REQUEST; | ||
1594 | l2n3(n, d); | ||
1595 | |||
1596 | /* we should now have things packed up, so lets send it off */ | ||
1597 | s->init_num = n + 4; | ||
1598 | s->init_off = 0; | ||
1599 | 1593 | ||
1600 | s->state = SSL3_ST_SW_CERT_REQ_B; | 1594 | s->state = SSL3_ST_SW_CERT_REQ_B; |
1601 | } | 1595 | } |
1602 | 1596 | ||
1603 | /* SSL3_ST_SW_CERT_REQ_B */ | 1597 | /* SSL3_ST_SW_CERT_REQ_B */ |
1604 | return (ssl3_do_write(s, SSL3_RT_HANDSHAKE)); | 1598 | return (ssl3_handshake_write(s)); |
1605 | err: | 1599 | err: |
1606 | return (-1); | 1600 | return (-1); |
1607 | } | 1601 | } |
@@ -2464,7 +2458,7 @@ ssl3_send_server_certificate(SSL *s) | |||
2464 | } | 2458 | } |
2465 | 2459 | ||
2466 | /* SSL3_ST_SW_CERT_B */ | 2460 | /* SSL3_ST_SW_CERT_B */ |
2467 | return (ssl3_do_write(s, SSL3_RT_HANDSHAKE)); | 2461 | return (ssl3_handshake_write(s)); |
2468 | } | 2462 | } |
2469 | 2463 | ||
2470 | /* send a new session ticket (not necessarily for a new session) */ | 2464 | /* send a new session ticket (not necessarily for a new session) */ |
@@ -2472,7 +2466,7 @@ int | |||
2472 | ssl3_send_newsession_ticket(SSL *s) | 2466 | ssl3_send_newsession_ticket(SSL *s) |
2473 | { | 2467 | { |
2474 | if (s->state == SSL3_ST_SW_SESSION_TICKET_A) { | 2468 | if (s->state == SSL3_ST_SW_SESSION_TICKET_A) { |
2475 | unsigned char *p, *senc, *macstart; | 2469 | unsigned char *d, *p, *senc, *macstart; |
2476 | const unsigned char *const_p; | 2470 | const unsigned char *const_p; |
2477 | int len, slen_full, slen; | 2471 | int len, slen_full, slen; |
2478 | SSL_SESSION *sess; | 2472 | SSL_SESSION *sess; |
@@ -2536,13 +2530,11 @@ ssl3_send_newsession_ticket(SSL *s) | |||
2536 | return (-1); | 2530 | return (-1); |
2537 | } | 2531 | } |
2538 | 2532 | ||
2539 | p = (unsigned char *)s->init_buf->data; | 2533 | d = p = ssl3_handshake_msg_start(s, SSL3_MT_NEWSESSION_TICKET); |
2540 | /* do the header */ | 2534 | |
2541 | *(p++) = SSL3_MT_NEWSESSION_TICKET; | ||
2542 | /* Skip message length for now */ | ||
2543 | p += 3; | ||
2544 | EVP_CIPHER_CTX_init(&ctx); | 2535 | EVP_CIPHER_CTX_init(&ctx); |
2545 | HMAC_CTX_init(&hctx); | 2536 | HMAC_CTX_init(&hctx); |
2537 | |||
2546 | /* | 2538 | /* |
2547 | * Initialize HMAC and cipher contexts. If callback present | 2539 | * Initialize HMAC and cipher contexts. If callback present |
2548 | * it does all the work otherwise use generated values | 2540 | * it does all the work otherwise use generated values |
@@ -2591,26 +2583,25 @@ ssl3_send_newsession_ticket(SSL *s) | |||
2591 | HMAC_Update(&hctx, macstart, p - macstart); | 2583 | HMAC_Update(&hctx, macstart, p - macstart); |
2592 | HMAC_Final(&hctx, p, &hlen); | 2584 | HMAC_Final(&hctx, p, &hlen); |
2593 | HMAC_CTX_cleanup(&hctx); | 2585 | HMAC_CTX_cleanup(&hctx); |
2594 | |||
2595 | p += hlen; | 2586 | p += hlen; |
2587 | |||
2596 | /* Now write out lengths: p points to end of data written */ | 2588 | /* Now write out lengths: p points to end of data written */ |
2597 | /* Total length */ | 2589 | /* Total length */ |
2598 | len = p - (unsigned char *)s->init_buf->data; | 2590 | len = p - d; |
2599 | p = (unsigned char *)s->init_buf->data + 1; | 2591 | |
2600 | l2n3(len - 4, p); /* Message length */ | 2592 | /* Skip ticket lifetime hint. */ |
2601 | p += 4; | 2593 | p = d + 4; |
2602 | s2n(len - 10, p); | 2594 | s2n(len - 6, p); /* Message length */ |
2603 | /* Ticket length */ | 2595 | |
2604 | 2596 | ssl3_handshake_msg_finish(s, len); | |
2605 | /* number of bytes to write */ | 2597 | |
2606 | s->init_num = len; | ||
2607 | s->state = SSL3_ST_SW_SESSION_TICKET_B; | 2598 | s->state = SSL3_ST_SW_SESSION_TICKET_B; |
2608 | s->init_off = 0; | 2599 | |
2609 | free(senc); | 2600 | free(senc); |
2610 | } | 2601 | } |
2611 | 2602 | ||
2612 | /* SSL3_ST_SW_SESSION_TICKET_B */ | 2603 | /* SSL3_ST_SW_SESSION_TICKET_B */ |
2613 | return (ssl3_do_write(s, SSL3_RT_HANDSHAKE)); | 2604 | return (ssl3_handshake_write(s)); |
2614 | } | 2605 | } |
2615 | 2606 | ||
2616 | int | 2607 | int |
diff --git a/src/lib/libssl/src/ssl/s3_srvr.c b/src/lib/libssl/src/ssl/s3_srvr.c index da7f6d71cd..e9496f9b9d 100644 --- a/src/lib/libssl/src/ssl/s3_srvr.c +++ b/src/lib/libssl/src/ssl/s3_srvr.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: s3_srvr.c,v 1.118 2015/09/11 18:08:21 jsing Exp $ */ | 1 | /* $OpenBSD: s3_srvr.c,v 1.119 2015/09/12 13:03:06 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 | * |
@@ -1256,8 +1256,7 @@ ssl3_send_server_key_exchange(SSL *s) | |||
1256 | r[0] = dh->p; | 1256 | r[0] = dh->p; |
1257 | r[1] = dh->g; | 1257 | r[1] = dh->g; |
1258 | r[2] = dh->pub_key; | 1258 | r[2] = dh->pub_key; |
1259 | } else | 1259 | } else if (type & SSL_kECDHE) { |
1260 | if (type & SSL_kECDHE) { | ||
1261 | const EC_GROUP *group; | 1260 | const EC_GROUP *group; |
1262 | 1261 | ||
1263 | ecdhp = cert->ecdh_tmp; | 1262 | ecdhp = cert->ecdh_tmp; |
@@ -1404,8 +1403,9 @@ ssl3_send_server_key_exchange(SSL *s) | |||
1404 | ERR_LIB_BUF); | 1403 | ERR_LIB_BUF); |
1405 | goto err; | 1404 | goto err; |
1406 | } | 1405 | } |
1407 | d = (unsigned char *)s->init_buf->data; | 1406 | |
1408 | p = &d[4]; | 1407 | d = p = ssl3_handshake_msg_start(s, |
1408 | SSL3_MT_SERVER_KEY_EXCHANGE); | ||
1409 | 1409 | ||
1410 | for (i = 0; i < 4 && r[i] != NULL; i++) { | 1410 | for (i = 0; i < 4 && r[i] != NULL; i++) { |
1411 | s2n(nr[i], p); | 1411 | s2n(nr[i], p); |
@@ -1458,7 +1458,7 @@ ssl3_send_server_key_exchange(SSL *s) | |||
1458 | EVP_DigestUpdate(&md_ctx, | 1458 | EVP_DigestUpdate(&md_ctx, |
1459 | s->s3->server_random, | 1459 | s->s3->server_random, |
1460 | SSL3_RANDOM_SIZE); | 1460 | SSL3_RANDOM_SIZE); |
1461 | EVP_DigestUpdate(&md_ctx, &d[4], n); | 1461 | EVP_DigestUpdate(&md_ctx, d, n); |
1462 | EVP_DigestFinal_ex(&md_ctx, q, | 1462 | EVP_DigestFinal_ex(&md_ctx, q, |
1463 | (unsigned int *)&i); | 1463 | (unsigned int *)&i); |
1464 | q += i; | 1464 | q += i; |
@@ -1493,7 +1493,7 @@ ssl3_send_server_key_exchange(SSL *s) | |||
1493 | EVP_SignUpdate(&md_ctx, | 1493 | EVP_SignUpdate(&md_ctx, |
1494 | s->s3->server_random, | 1494 | s->s3->server_random, |
1495 | SSL3_RANDOM_SIZE); | 1495 | SSL3_RANDOM_SIZE); |
1496 | EVP_SignUpdate(&md_ctx, &d[4], n); | 1496 | EVP_SignUpdate(&md_ctx, d, n); |
1497 | if (!EVP_SignFinal(&md_ctx, &p[2], | 1497 | if (!EVP_SignFinal(&md_ctx, &p[2], |
1498 | (unsigned int *)&i, pkey)) { | 1498 | (unsigned int *)&i, pkey)) { |
1499 | SSLerr( | 1499 | SSLerr( |
@@ -1514,17 +1514,14 @@ ssl3_send_server_key_exchange(SSL *s) | |||
1514 | } | 1514 | } |
1515 | } | 1515 | } |
1516 | 1516 | ||
1517 | *(d++) = SSL3_MT_SERVER_KEY_EXCHANGE; | 1517 | ssl3_handshake_msg_finish(s, n); |
1518 | l2n3(n, d); | ||
1519 | |||
1520 | /* we should now have things packed up, so lets send it off */ | ||
1521 | s->init_num = n + 4; | ||
1522 | s->init_off = 0; | ||
1523 | } | 1518 | } |
1524 | 1519 | ||
1525 | s->state = SSL3_ST_SW_KEY_EXCH_B; | 1520 | s->state = SSL3_ST_SW_KEY_EXCH_B; |
1526 | EVP_MD_CTX_cleanup(&md_ctx); | 1521 | EVP_MD_CTX_cleanup(&md_ctx); |
1527 | return (ssl3_do_write(s, SSL3_RT_HANDSHAKE)); | 1522 | |
1523 | return (ssl3_handshake_write(s)); | ||
1524 | |||
1528 | f_err: | 1525 | f_err: |
1529 | ssl3_send_alert(s, SSL3_AL_FATAL, al); | 1526 | ssl3_send_alert(s, SSL3_AL_FATAL, al); |
1530 | err: | 1527 | err: |
@@ -1546,7 +1543,8 @@ ssl3_send_certificate_request(SSL *s) | |||
1546 | if (s->state == SSL3_ST_SW_CERT_REQ_A) { | 1543 | if (s->state == SSL3_ST_SW_CERT_REQ_A) { |
1547 | buf = s->init_buf; | 1544 | buf = s->init_buf; |
1548 | 1545 | ||
1549 | d = p = (unsigned char *)&(buf->data[4]); | 1546 | d = p = ssl3_handshake_msg_start(s, |
1547 | SSL3_MT_CERTIFICATE_REQUEST); | ||
1550 | 1548 | ||
1551 | /* get the list of acceptable cert types */ | 1549 | /* get the list of acceptable cert types */ |
1552 | p++; | 1550 | p++; |
@@ -1578,7 +1576,8 @@ ssl3_send_certificate_request(SSL *s) | |||
1578 | ERR_R_BUF_LIB); | 1576 | ERR_R_BUF_LIB); |
1579 | goto err; | 1577 | goto err; |
1580 | } | 1578 | } |
1581 | p = (unsigned char *)&(buf->data[4 + n]); | 1579 | p = ssl3_handshake_msg_start(s, |
1580 | SSL3_MT_CERTIFICATE_REQUEST) + n; | ||
1582 | s2n(j, p); | 1581 | s2n(j, p); |
1583 | i2d_X509_NAME(name, &p); | 1582 | i2d_X509_NAME(name, &p); |
1584 | n += 2 + j; | 1583 | n += 2 + j; |
@@ -1586,22 +1585,17 @@ ssl3_send_certificate_request(SSL *s) | |||
1586 | } | 1585 | } |
1587 | } | 1586 | } |
1588 | /* else no CA names */ | 1587 | /* else no CA names */ |
1589 | p = (unsigned char *)&(buf->data[4 + off]); | 1588 | p = ssl3_handshake_msg_start(s, |
1589 | SSL3_MT_CERTIFICATE_REQUEST) + off; | ||
1590 | s2n(nl, p); | 1590 | s2n(nl, p); |
1591 | 1591 | ||
1592 | d = (unsigned char *)buf->data; | 1592 | ssl3_handshake_msg_finish(s, n); |
1593 | *(d++) = SSL3_MT_CERTIFICATE_REQUEST; | ||
1594 | l2n3(n, d); | ||
1595 | |||
1596 | /* we should now have things packed up, so lets send it off */ | ||
1597 | s->init_num = n + 4; | ||
1598 | s->init_off = 0; | ||
1599 | 1593 | ||
1600 | s->state = SSL3_ST_SW_CERT_REQ_B; | 1594 | s->state = SSL3_ST_SW_CERT_REQ_B; |
1601 | } | 1595 | } |
1602 | 1596 | ||
1603 | /* SSL3_ST_SW_CERT_REQ_B */ | 1597 | /* SSL3_ST_SW_CERT_REQ_B */ |
1604 | return (ssl3_do_write(s, SSL3_RT_HANDSHAKE)); | 1598 | return (ssl3_handshake_write(s)); |
1605 | err: | 1599 | err: |
1606 | return (-1); | 1600 | return (-1); |
1607 | } | 1601 | } |
@@ -2464,7 +2458,7 @@ ssl3_send_server_certificate(SSL *s) | |||
2464 | } | 2458 | } |
2465 | 2459 | ||
2466 | /* SSL3_ST_SW_CERT_B */ | 2460 | /* SSL3_ST_SW_CERT_B */ |
2467 | return (ssl3_do_write(s, SSL3_RT_HANDSHAKE)); | 2461 | return (ssl3_handshake_write(s)); |
2468 | } | 2462 | } |
2469 | 2463 | ||
2470 | /* send a new session ticket (not necessarily for a new session) */ | 2464 | /* send a new session ticket (not necessarily for a new session) */ |
@@ -2472,7 +2466,7 @@ int | |||
2472 | ssl3_send_newsession_ticket(SSL *s) | 2466 | ssl3_send_newsession_ticket(SSL *s) |
2473 | { | 2467 | { |
2474 | if (s->state == SSL3_ST_SW_SESSION_TICKET_A) { | 2468 | if (s->state == SSL3_ST_SW_SESSION_TICKET_A) { |
2475 | unsigned char *p, *senc, *macstart; | 2469 | unsigned char *d, *p, *senc, *macstart; |
2476 | const unsigned char *const_p; | 2470 | const unsigned char *const_p; |
2477 | int len, slen_full, slen; | 2471 | int len, slen_full, slen; |
2478 | SSL_SESSION *sess; | 2472 | SSL_SESSION *sess; |
@@ -2536,13 +2530,11 @@ ssl3_send_newsession_ticket(SSL *s) | |||
2536 | return (-1); | 2530 | return (-1); |
2537 | } | 2531 | } |
2538 | 2532 | ||
2539 | p = (unsigned char *)s->init_buf->data; | 2533 | d = p = ssl3_handshake_msg_start(s, SSL3_MT_NEWSESSION_TICKET); |
2540 | /* do the header */ | 2534 | |
2541 | *(p++) = SSL3_MT_NEWSESSION_TICKET; | ||
2542 | /* Skip message length for now */ | ||
2543 | p += 3; | ||
2544 | EVP_CIPHER_CTX_init(&ctx); | 2535 | EVP_CIPHER_CTX_init(&ctx); |
2545 | HMAC_CTX_init(&hctx); | 2536 | HMAC_CTX_init(&hctx); |
2537 | |||
2546 | /* | 2538 | /* |
2547 | * Initialize HMAC and cipher contexts. If callback present | 2539 | * Initialize HMAC and cipher contexts. If callback present |
2548 | * it does all the work otherwise use generated values | 2540 | * it does all the work otherwise use generated values |
@@ -2591,26 +2583,25 @@ ssl3_send_newsession_ticket(SSL *s) | |||
2591 | HMAC_Update(&hctx, macstart, p - macstart); | 2583 | HMAC_Update(&hctx, macstart, p - macstart); |
2592 | HMAC_Final(&hctx, p, &hlen); | 2584 | HMAC_Final(&hctx, p, &hlen); |
2593 | HMAC_CTX_cleanup(&hctx); | 2585 | HMAC_CTX_cleanup(&hctx); |
2594 | |||
2595 | p += hlen; | 2586 | p += hlen; |
2587 | |||
2596 | /* Now write out lengths: p points to end of data written */ | 2588 | /* Now write out lengths: p points to end of data written */ |
2597 | /* Total length */ | 2589 | /* Total length */ |
2598 | len = p - (unsigned char *)s->init_buf->data; | 2590 | len = p - d; |
2599 | p = (unsigned char *)s->init_buf->data + 1; | 2591 | |
2600 | l2n3(len - 4, p); /* Message length */ | 2592 | /* Skip ticket lifetime hint. */ |
2601 | p += 4; | 2593 | p = d + 4; |
2602 | s2n(len - 10, p); | 2594 | s2n(len - 6, p); /* Message length */ |
2603 | /* Ticket length */ | 2595 | |
2604 | 2596 | ssl3_handshake_msg_finish(s, len); | |
2605 | /* number of bytes to write */ | 2597 | |
2606 | s->init_num = len; | ||
2607 | s->state = SSL3_ST_SW_SESSION_TICKET_B; | 2598 | s->state = SSL3_ST_SW_SESSION_TICKET_B; |
2608 | s->init_off = 0; | 2599 | |
2609 | free(senc); | 2600 | free(senc); |
2610 | } | 2601 | } |
2611 | 2602 | ||
2612 | /* SSL3_ST_SW_SESSION_TICKET_B */ | 2603 | /* SSL3_ST_SW_SESSION_TICKET_B */ |
2613 | return (ssl3_do_write(s, SSL3_RT_HANDSHAKE)); | 2604 | return (ssl3_handshake_write(s)); |
2614 | } | 2605 | } |
2615 | 2606 | ||
2616 | int | 2607 | int |