diff options
Diffstat (limited to '')
| -rw-r--r-- | src/lib/libssl/d1_both.c | 178 | ||||
| -rw-r--r-- | src/lib/libssl/d1_enc.c | 2 | ||||
| -rw-r--r-- | src/lib/libssl/d1_lib.c | 54 | ||||
| -rw-r--r-- | src/lib/libssl/d1_srtp.c | 493 | ||||
| -rw-r--r-- | src/lib/libssl/srtp.h | 145 | ||||
| -rw-r--r-- | src/lib/libssl/test/P1ss.cnf | 2 | ||||
| -rw-r--r-- | src/lib/libssl/test/P2ss.cnf | 2 | ||||
| -rw-r--r-- | src/lib/libssl/test/pkits-test.pl | 9 | ||||
| -rw-r--r-- | src/lib/libssl/test/test.cnf | 2 |
9 files changed, 869 insertions, 18 deletions
diff --git a/src/lib/libssl/d1_both.c b/src/lib/libssl/d1_both.c index 9f898d6997..de8bab873f 100644 --- a/src/lib/libssl/d1_both.c +++ b/src/lib/libssl/d1_both.c | |||
| @@ -227,14 +227,14 @@ int dtls1_do_write(SSL *s, int type) | |||
| 227 | unsigned int len, frag_off, mac_size, blocksize; | 227 | unsigned int len, frag_off, mac_size, blocksize; |
| 228 | 228 | ||
| 229 | /* AHA! Figure out the MTU, and stick to the right size */ | 229 | /* AHA! Figure out the MTU, and stick to the right size */ |
| 230 | if ( ! (SSL_get_options(s) & SSL_OP_NO_QUERY_MTU)) | 230 | if (s->d1->mtu < dtls1_min_mtu() && !(SSL_get_options(s) & SSL_OP_NO_QUERY_MTU)) |
| 231 | { | 231 | { |
| 232 | s->d1->mtu = | 232 | s->d1->mtu = |
| 233 | BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_QUERY_MTU, 0, NULL); | 233 | BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_QUERY_MTU, 0, NULL); |
| 234 | 234 | ||
| 235 | /* I've seen the kernel return bogus numbers when it doesn't know | 235 | /* I've seen the kernel return bogus numbers when it doesn't know |
| 236 | * (initial write), so just make sure we have a reasonable number */ | 236 | * (initial write), so just make sure we have a reasonable number */ |
| 237 | if ( s->d1->mtu < dtls1_min_mtu()) | 237 | if (s->d1->mtu < dtls1_min_mtu()) |
| 238 | { | 238 | { |
| 239 | s->d1->mtu = 0; | 239 | s->d1->mtu = 0; |
| 240 | s->d1->mtu = dtls1_guess_mtu(s->d1->mtu); | 240 | s->d1->mtu = dtls1_guess_mtu(s->d1->mtu); |
| @@ -1084,7 +1084,11 @@ int dtls1_read_failed(SSL *s, int code) | |||
| 1084 | return code; | 1084 | return code; |
| 1085 | } | 1085 | } |
| 1086 | 1086 | ||
| 1087 | if ( ! SSL_in_init(s)) /* done, no need to send a retransmit */ | 1087 | #ifndef OPENSSL_NO_HEARTBEATS |
| 1088 | if (!SSL_in_init(s) && !s->tlsext_hb_pending) /* done, no need to send a retransmit */ | ||
| 1089 | #else | ||
| 1090 | if (!SSL_in_init(s)) /* done, no need to send a retransmit */ | ||
| 1091 | #endif | ||
| 1088 | { | 1092 | { |
| 1089 | BIO_set_flags(SSL_get_rbio(s), BIO_FLAGS_READ); | 1093 | BIO_set_flags(SSL_get_rbio(s), BIO_FLAGS_READ); |
| 1090 | return code; | 1094 | return code; |
| @@ -1417,3 +1421,171 @@ dtls1_get_ccs_header(unsigned char *data, struct ccs_header_st *ccs_hdr) | |||
| 1417 | 1421 | ||
| 1418 | ccs_hdr->type = *(data++); | 1422 | ccs_hdr->type = *(data++); |
| 1419 | } | 1423 | } |
| 1424 | |||
| 1425 | int dtls1_shutdown(SSL *s) | ||
| 1426 | { | ||
| 1427 | int ret; | ||
| 1428 | #ifndef OPENSSL_NO_SCTP | ||
| 1429 | if (BIO_dgram_is_sctp(SSL_get_wbio(s)) && | ||
| 1430 | !(s->shutdown & SSL_SENT_SHUTDOWN)) | ||
| 1431 | { | ||
| 1432 | ret = BIO_dgram_sctp_wait_for_dry(SSL_get_wbio(s)); | ||
| 1433 | if (ret < 0) return -1; | ||
| 1434 | |||
| 1435 | if (ret == 0) | ||
| 1436 | BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_SAVE_SHUTDOWN, 1, NULL); | ||
| 1437 | } | ||
| 1438 | #endif | ||
| 1439 | ret = ssl3_shutdown(s); | ||
| 1440 | #ifndef OPENSSL_NO_SCTP | ||
| 1441 | BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_SAVE_SHUTDOWN, 0, NULL); | ||
| 1442 | #endif | ||
| 1443 | return ret; | ||
| 1444 | } | ||
| 1445 | |||
| 1446 | #ifndef OPENSSL_NO_HEARTBEATS | ||
| 1447 | int | ||
| 1448 | dtls1_process_heartbeat(SSL *s) | ||
| 1449 | { | ||
| 1450 | unsigned char *p = &s->s3->rrec.data[0], *pl; | ||
| 1451 | unsigned short hbtype; | ||
| 1452 | unsigned int payload; | ||
| 1453 | unsigned int padding = 16; /* Use minimum padding */ | ||
| 1454 | |||
| 1455 | /* Read type and payload length first */ | ||
| 1456 | hbtype = *p++; | ||
| 1457 | n2s(p, payload); | ||
| 1458 | pl = p; | ||
| 1459 | |||
| 1460 | if (s->msg_callback) | ||
| 1461 | s->msg_callback(0, s->version, TLS1_RT_HEARTBEAT, | ||
| 1462 | &s->s3->rrec.data[0], s->s3->rrec.length, | ||
| 1463 | s, s->msg_callback_arg); | ||
| 1464 | |||
| 1465 | if (hbtype == TLS1_HB_REQUEST) | ||
| 1466 | { | ||
| 1467 | unsigned char *buffer, *bp; | ||
| 1468 | int r; | ||
| 1469 | |||
| 1470 | /* Allocate memory for the response, size is 1 byte | ||
| 1471 | * message type, plus 2 bytes payload length, plus | ||
| 1472 | * payload, plus padding | ||
| 1473 | */ | ||
| 1474 | buffer = OPENSSL_malloc(1 + 2 + payload + padding); | ||
| 1475 | bp = buffer; | ||
| 1476 | |||
| 1477 | /* Enter response type, length and copy payload */ | ||
| 1478 | *bp++ = TLS1_HB_RESPONSE; | ||
| 1479 | s2n(payload, bp); | ||
| 1480 | memcpy(bp, pl, payload); | ||
| 1481 | bp += payload; | ||
| 1482 | /* Random padding */ | ||
| 1483 | RAND_pseudo_bytes(bp, padding); | ||
| 1484 | |||
| 1485 | r = dtls1_write_bytes(s, TLS1_RT_HEARTBEAT, buffer, 3 + payload + padding); | ||
| 1486 | |||
| 1487 | if (r >= 0 && s->msg_callback) | ||
| 1488 | s->msg_callback(1, s->version, TLS1_RT_HEARTBEAT, | ||
| 1489 | buffer, 3 + payload + padding, | ||
| 1490 | s, s->msg_callback_arg); | ||
| 1491 | |||
| 1492 | OPENSSL_free(buffer); | ||
| 1493 | |||
| 1494 | if (r < 0) | ||
| 1495 | return r; | ||
| 1496 | } | ||
| 1497 | else if (hbtype == TLS1_HB_RESPONSE) | ||
| 1498 | { | ||
| 1499 | unsigned int seq; | ||
| 1500 | |||
| 1501 | /* We only send sequence numbers (2 bytes unsigned int), | ||
| 1502 | * and 16 random bytes, so we just try to read the | ||
| 1503 | * sequence number */ | ||
| 1504 | n2s(pl, seq); | ||
| 1505 | |||
| 1506 | if (payload == 18 && seq == s->tlsext_hb_seq) | ||
| 1507 | { | ||
| 1508 | dtls1_stop_timer(s); | ||
| 1509 | s->tlsext_hb_seq++; | ||
| 1510 | s->tlsext_hb_pending = 0; | ||
| 1511 | } | ||
| 1512 | } | ||
| 1513 | |||
| 1514 | return 0; | ||
| 1515 | } | ||
| 1516 | |||
| 1517 | int | ||
| 1518 | dtls1_heartbeat(SSL *s) | ||
| 1519 | { | ||
| 1520 | unsigned char *buf, *p; | ||
| 1521 | int ret; | ||
| 1522 | unsigned int payload = 18; /* Sequence number + random bytes */ | ||
| 1523 | unsigned int padding = 16; /* Use minimum padding */ | ||
| 1524 | |||
| 1525 | /* Only send if peer supports and accepts HB requests... */ | ||
| 1526 | if (!(s->tlsext_heartbeat & SSL_TLSEXT_HB_ENABLED) || | ||
| 1527 | s->tlsext_heartbeat & SSL_TLSEXT_HB_DONT_SEND_REQUESTS) | ||
| 1528 | { | ||
| 1529 | SSLerr(SSL_F_DTLS1_HEARTBEAT,SSL_R_TLS_HEARTBEAT_PEER_DOESNT_ACCEPT); | ||
| 1530 | return -1; | ||
| 1531 | } | ||
| 1532 | |||
| 1533 | /* ...and there is none in flight yet... */ | ||
| 1534 | if (s->tlsext_hb_pending) | ||
| 1535 | { | ||
| 1536 | SSLerr(SSL_F_DTLS1_HEARTBEAT,SSL_R_TLS_HEARTBEAT_PENDING); | ||
| 1537 | return -1; | ||
| 1538 | } | ||
| 1539 | |||
| 1540 | /* ...and no handshake in progress. */ | ||
| 1541 | if (SSL_in_init(s) || s->in_handshake) | ||
| 1542 | { | ||
| 1543 | SSLerr(SSL_F_DTLS1_HEARTBEAT,SSL_R_UNEXPECTED_MESSAGE); | ||
| 1544 | return -1; | ||
| 1545 | } | ||
| 1546 | |||
| 1547 | /* Check if padding is too long, payload and padding | ||
| 1548 | * must not exceed 2^14 - 3 = 16381 bytes in total. | ||
| 1549 | */ | ||
| 1550 | OPENSSL_assert(payload + padding <= 16381); | ||
| 1551 | |||
| 1552 | /* Create HeartBeat message, we just use a sequence number | ||
| 1553 | * as payload to distuingish different messages and add | ||
| 1554 | * some random stuff. | ||
| 1555 | * - Message Type, 1 byte | ||
| 1556 | * - Payload Length, 2 bytes (unsigned int) | ||
| 1557 | * - Payload, the sequence number (2 bytes uint) | ||
| 1558 | * - Payload, random bytes (16 bytes uint) | ||
| 1559 | * - Padding | ||
| 1560 | */ | ||
| 1561 | buf = OPENSSL_malloc(1 + 2 + payload + padding); | ||
| 1562 | p = buf; | ||
| 1563 | /* Message Type */ | ||
| 1564 | *p++ = TLS1_HB_REQUEST; | ||
| 1565 | /* Payload length (18 bytes here) */ | ||
| 1566 | s2n(payload, p); | ||
| 1567 | /* Sequence number */ | ||
| 1568 | s2n(s->tlsext_hb_seq, p); | ||
| 1569 | /* 16 random bytes */ | ||
| 1570 | RAND_pseudo_bytes(p, 16); | ||
| 1571 | p += 16; | ||
| 1572 | /* Random padding */ | ||
| 1573 | RAND_pseudo_bytes(p, padding); | ||
| 1574 | |||
| 1575 | ret = dtls1_write_bytes(s, TLS1_RT_HEARTBEAT, buf, 3 + payload + padding); | ||
| 1576 | if (ret >= 0) | ||
| 1577 | { | ||
| 1578 | if (s->msg_callback) | ||
| 1579 | s->msg_callback(1, s->version, TLS1_RT_HEARTBEAT, | ||
| 1580 | buf, 3 + payload + padding, | ||
| 1581 | s, s->msg_callback_arg); | ||
| 1582 | |||
| 1583 | dtls1_start_timer(s); | ||
| 1584 | s->tlsext_hb_pending = 1; | ||
| 1585 | } | ||
| 1586 | |||
| 1587 | OPENSSL_free(buf); | ||
| 1588 | |||
| 1589 | return ret; | ||
| 1590 | } | ||
| 1591 | #endif | ||
diff --git a/src/lib/libssl/d1_enc.c b/src/lib/libssl/d1_enc.c index becbab91c2..07a5e97ce5 100644 --- a/src/lib/libssl/d1_enc.c +++ b/src/lib/libssl/d1_enc.c | |||
| @@ -260,7 +260,7 @@ int dtls1_enc(SSL *s, int send) | |||
| 260 | } | 260 | } |
| 261 | /* TLS 1.0 does not bound the number of padding bytes by the block size. | 261 | /* TLS 1.0 does not bound the number of padding bytes by the block size. |
| 262 | * All of them must have value 'padding_length'. */ | 262 | * All of them must have value 'padding_length'. */ |
| 263 | if (i > (int)rec->length) | 263 | if (i + bs > (int)rec->length) |
| 264 | { | 264 | { |
| 265 | /* Incorrect padding. SSLerr() and ssl3_alert are done | 265 | /* Incorrect padding. SSLerr() and ssl3_alert are done |
| 266 | * by caller: we don't want to reveal whether this is | 266 | * by caller: we don't want to reveal whether this is |
diff --git a/src/lib/libssl/d1_lib.c b/src/lib/libssl/d1_lib.c index c3b77c889b..f61f718183 100644 --- a/src/lib/libssl/d1_lib.c +++ b/src/lib/libssl/d1_lib.c | |||
| @@ -82,6 +82,7 @@ SSL3_ENC_METHOD DTLSv1_enc_data={ | |||
| 82 | TLS_MD_CLIENT_FINISH_CONST,TLS_MD_CLIENT_FINISH_CONST_SIZE, | 82 | TLS_MD_CLIENT_FINISH_CONST,TLS_MD_CLIENT_FINISH_CONST_SIZE, |
| 83 | TLS_MD_SERVER_FINISH_CONST,TLS_MD_SERVER_FINISH_CONST_SIZE, | 83 | TLS_MD_SERVER_FINISH_CONST,TLS_MD_SERVER_FINISH_CONST_SIZE, |
| 84 | tls1_alert_code, | 84 | tls1_alert_code, |
| 85 | tls1_export_keying_material, | ||
| 85 | }; | 86 | }; |
| 86 | 87 | ||
| 87 | long dtls1_default_timeout(void) | 88 | long dtls1_default_timeout(void) |
| @@ -291,6 +292,15 @@ const SSL_CIPHER *dtls1_get_cipher(unsigned int u) | |||
| 291 | 292 | ||
| 292 | void dtls1_start_timer(SSL *s) | 293 | void dtls1_start_timer(SSL *s) |
| 293 | { | 294 | { |
| 295 | #ifndef OPENSSL_NO_SCTP | ||
| 296 | /* Disable timer for SCTP */ | ||
| 297 | if (BIO_dgram_is_sctp(SSL_get_wbio(s))) | ||
| 298 | { | ||
| 299 | memset(&(s->d1->next_timeout), 0, sizeof(struct timeval)); | ||
| 300 | return; | ||
| 301 | } | ||
| 302 | #endif | ||
| 303 | |||
| 294 | /* If timer is not set, initialize duration with 1 second */ | 304 | /* If timer is not set, initialize duration with 1 second */ |
| 295 | if (s->d1->next_timeout.tv_sec == 0 && s->d1->next_timeout.tv_usec == 0) | 305 | if (s->d1->next_timeout.tv_sec == 0 && s->d1->next_timeout.tv_usec == 0) |
| 296 | { | 306 | { |
| @@ -381,6 +391,7 @@ void dtls1_double_timeout(SSL *s) | |||
| 381 | void dtls1_stop_timer(SSL *s) | 391 | void dtls1_stop_timer(SSL *s) |
| 382 | { | 392 | { |
| 383 | /* Reset everything */ | 393 | /* Reset everything */ |
| 394 | memset(&(s->d1->timeout), 0, sizeof(struct dtls1_timeout_st)); | ||
| 384 | memset(&(s->d1->next_timeout), 0, sizeof(struct timeval)); | 395 | memset(&(s->d1->next_timeout), 0, sizeof(struct timeval)); |
| 385 | s->d1->timeout_duration = 1; | 396 | s->d1->timeout_duration = 1; |
| 386 | BIO_ctrl(SSL_get_rbio(s), BIO_CTRL_DGRAM_SET_NEXT_TIMEOUT, 0, &(s->d1->next_timeout)); | 397 | BIO_ctrl(SSL_get_rbio(s), BIO_CTRL_DGRAM_SET_NEXT_TIMEOUT, 0, &(s->d1->next_timeout)); |
| @@ -388,10 +399,28 @@ void dtls1_stop_timer(SSL *s) | |||
| 388 | dtls1_clear_record_buffer(s); | 399 | dtls1_clear_record_buffer(s); |
| 389 | } | 400 | } |
| 390 | 401 | ||
| 391 | int dtls1_handle_timeout(SSL *s) | 402 | int dtls1_check_timeout_num(SSL *s) |
| 392 | { | 403 | { |
| 393 | DTLS1_STATE *state; | 404 | s->d1->timeout.num_alerts++; |
| 405 | |||
| 406 | /* Reduce MTU after 2 unsuccessful retransmissions */ | ||
| 407 | if (s->d1->timeout.num_alerts > 2) | ||
| 408 | { | ||
| 409 | s->d1->mtu = BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_GET_FALLBACK_MTU, 0, NULL); | ||
| 410 | } | ||
| 394 | 411 | ||
| 412 | if (s->d1->timeout.num_alerts > DTLS1_TMO_ALERT_COUNT) | ||
| 413 | { | ||
| 414 | /* fail the connection, enough alerts have been sent */ | ||
| 415 | SSLerr(SSL_F_DTLS1_CHECK_TIMEOUT_NUM,SSL_R_READ_TIMEOUT_EXPIRED); | ||
| 416 | return -1; | ||
| 417 | } | ||
| 418 | |||
| 419 | return 0; | ||
| 420 | } | ||
| 421 | |||
| 422 | int dtls1_handle_timeout(SSL *s) | ||
| 423 | { | ||
| 395 | /* if no timer is expired, don't do anything */ | 424 | /* if no timer is expired, don't do anything */ |
| 396 | if (!dtls1_is_timer_expired(s)) | 425 | if (!dtls1_is_timer_expired(s)) |
| 397 | { | 426 | { |
| @@ -399,20 +428,23 @@ int dtls1_handle_timeout(SSL *s) | |||
| 399 | } | 428 | } |
| 400 | 429 | ||
| 401 | dtls1_double_timeout(s); | 430 | dtls1_double_timeout(s); |
| 402 | state = s->d1; | 431 | |
| 403 | state->timeout.num_alerts++; | 432 | if (dtls1_check_timeout_num(s) < 0) |
| 404 | if ( state->timeout.num_alerts > DTLS1_TMO_ALERT_COUNT) | ||
| 405 | { | ||
| 406 | /* fail the connection, enough alerts have been sent */ | ||
| 407 | SSLerr(SSL_F_DTLS1_HANDLE_TIMEOUT,SSL_R_READ_TIMEOUT_EXPIRED); | ||
| 408 | return -1; | 433 | return -1; |
| 434 | |||
| 435 | s->d1->timeout.read_timeouts++; | ||
| 436 | if (s->d1->timeout.read_timeouts > DTLS1_TMO_READ_COUNT) | ||
| 437 | { | ||
| 438 | s->d1->timeout.read_timeouts = 1; | ||
| 409 | } | 439 | } |
| 410 | 440 | ||
| 411 | state->timeout.read_timeouts++; | 441 | #ifndef OPENSSL_NO_HEARTBEATS |
| 412 | if ( state->timeout.read_timeouts > DTLS1_TMO_READ_COUNT) | 442 | if (s->tlsext_hb_pending) |
| 413 | { | 443 | { |
| 414 | state->timeout.read_timeouts = 1; | 444 | s->tlsext_hb_pending = 0; |
| 445 | return dtls1_heartbeat(s); | ||
| 415 | } | 446 | } |
| 447 | #endif | ||
| 416 | 448 | ||
| 417 | dtls1_start_timer(s); | 449 | dtls1_start_timer(s); |
| 418 | return dtls1_retransmit_buffered_messages(s); | 450 | return dtls1_retransmit_buffered_messages(s); |
diff --git a/src/lib/libssl/d1_srtp.c b/src/lib/libssl/d1_srtp.c new file mode 100644 index 0000000000..928935bd8b --- /dev/null +++ b/src/lib/libssl/d1_srtp.c | |||
| @@ -0,0 +1,493 @@ | |||
| 1 | /* ssl/t1_lib.c */ | ||
| 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | ||
| 3 | * All rights reserved. | ||
| 4 | * | ||
| 5 | * This package is an SSL implementation written | ||
| 6 | * by Eric Young (eay@cryptsoft.com). | ||
| 7 | * The implementation was written so as to conform with Netscapes SSL. | ||
| 8 | * | ||
| 9 | * This library is free for commercial and non-commercial use as long as | ||
| 10 | * the following conditions are aheared to. The following conditions | ||
| 11 | * apply to all code found in this distribution, be it the RC4, RSA, | ||
| 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | ||
| 13 | * included with this distribution is covered by the same copyright terms | ||
| 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | ||
| 15 | * | ||
| 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | ||
| 17 | * the code are not to be removed. | ||
| 18 | * If this package is used in a product, Eric Young should be given attribution | ||
| 19 | * as the author of the parts of the library used. | ||
| 20 | * This can be in the form of a textual message at program startup or | ||
| 21 | * in documentation (online or textual) provided with the package. | ||
| 22 | * | ||
| 23 | * Redistribution and use in source and binary forms, with or without | ||
| 24 | * modification, are permitted provided that the following conditions | ||
| 25 | * are met: | ||
| 26 | * 1. Redistributions of source code must retain the copyright | ||
| 27 | * notice, this list of conditions and the following disclaimer. | ||
| 28 | * 2. Redistributions in binary form must reproduce the above copyright | ||
| 29 | * notice, this list of conditions and the following disclaimer in the | ||
| 30 | * documentation and/or other materials provided with the distribution. | ||
| 31 | * 3. All advertising materials mentioning features or use of this software | ||
| 32 | * must display the following acknowledgement: | ||
| 33 | * "This product includes cryptographic software written by | ||
| 34 | * Eric Young (eay@cryptsoft.com)" | ||
| 35 | * The word 'cryptographic' can be left out if the rouines from the library | ||
| 36 | * being used are not cryptographic related :-). | ||
| 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | ||
| 38 | * the apps directory (application code) you must include an acknowledgement: | ||
| 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | ||
| 40 | * | ||
| 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | ||
| 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
| 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||
| 44 | * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE | ||
| 45 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||
| 46 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||
| 47 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
| 48 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||
| 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | ||
| 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | ||
| 51 | * SUCH DAMAGE. | ||
| 52 | * | ||
| 53 | * The licence and distribution terms for any publically available version or | ||
| 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | ||
| 55 | * copied and put under another distribution licence | ||
| 56 | * [including the GNU Public Licence.] | ||
| 57 | */ | ||
| 58 | /* ==================================================================== | ||
| 59 | * Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved. | ||
| 60 | * | ||
| 61 | * Redistribution and use in source and binary forms, with or without | ||
| 62 | * modification, are permitted provided that the following conditions | ||
| 63 | * are met: | ||
| 64 | * | ||
| 65 | * 1. Redistributions of source code must retain the above copyright | ||
| 66 | * notice, this list of conditions and the following disclaimer. | ||
| 67 | * | ||
| 68 | * 2. Redistributions in binary form must reproduce the above copyright | ||
| 69 | * notice, this list of conditions and the following disclaimer in | ||
| 70 | * the documentation and/or other materials provided with the | ||
| 71 | * distribution. | ||
| 72 | * | ||
| 73 | * 3. All advertising materials mentioning features or use of this | ||
| 74 | * software must display the following acknowledgment: | ||
| 75 | * "This product includes software developed by the OpenSSL Project | ||
| 76 | * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" | ||
| 77 | * | ||
| 78 | * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to | ||
| 79 | * endorse or promote products derived from this software without | ||
| 80 | * prior written permission. For written permission, please contact | ||
| 81 | * openssl-core@openssl.org. | ||
| 82 | * | ||
| 83 | * 5. Products derived from this software may not be called "OpenSSL" | ||
| 84 | * nor may "OpenSSL" appear in their names without prior written | ||
| 85 | * permission of the OpenSSL Project. | ||
| 86 | * | ||
| 87 | * 6. Redistributions of any form whatsoever must retain the following | ||
| 88 | * acknowledgment: | ||
| 89 | * "This product includes software developed by the OpenSSL Project | ||
| 90 | * for use in the OpenSSL Toolkit (http://www.openssl.org/)" | ||
| 91 | * | ||
| 92 | * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY | ||
| 93 | * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
| 94 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | ||
| 95 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR | ||
| 96 | * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
| 97 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
| 98 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
| 99 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
| 100 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||
| 101 | * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
| 102 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED | ||
| 103 | * OF THE POSSIBILITY OF SUCH DAMAGE. | ||
| 104 | * ==================================================================== | ||
| 105 | * | ||
| 106 | * This product includes cryptographic software written by Eric Young | ||
| 107 | * (eay@cryptsoft.com). This product includes software written by Tim | ||
| 108 | * Hudson (tjh@cryptsoft.com). | ||
| 109 | * | ||
| 110 | */ | ||
| 111 | /* | ||
| 112 | DTLS code by Eric Rescorla <ekr@rtfm.com> | ||
| 113 | |||
| 114 | Copyright (C) 2006, Network Resonance, Inc. | ||
| 115 | Copyright (C) 2011, RTFM, Inc. | ||
| 116 | */ | ||
| 117 | |||
| 118 | #ifndef OPENSSL_NO_SRTP | ||
| 119 | |||
| 120 | #include <stdio.h> | ||
| 121 | #include <openssl/objects.h> | ||
| 122 | #include "ssl_locl.h" | ||
| 123 | #include "srtp.h" | ||
| 124 | |||
| 125 | |||
| 126 | static SRTP_PROTECTION_PROFILE srtp_known_profiles[]= | ||
| 127 | { | ||
| 128 | { | ||
| 129 | "SRTP_AES128_CM_SHA1_80", | ||
| 130 | SRTP_AES128_CM_SHA1_80, | ||
| 131 | }, | ||
| 132 | { | ||
| 133 | "SRTP_AES128_CM_SHA1_32", | ||
| 134 | SRTP_AES128_CM_SHA1_32, | ||
| 135 | }, | ||
| 136 | #if 0 | ||
| 137 | { | ||
| 138 | "SRTP_NULL_SHA1_80", | ||
| 139 | SRTP_NULL_SHA1_80, | ||
| 140 | }, | ||
| 141 | { | ||
| 142 | "SRTP_NULL_SHA1_32", | ||
| 143 | SRTP_NULL_SHA1_32, | ||
| 144 | }, | ||
| 145 | #endif | ||
| 146 | {0} | ||
| 147 | }; | ||
| 148 | |||
| 149 | static int find_profile_by_name(char *profile_name, | ||
| 150 | SRTP_PROTECTION_PROFILE **pptr,unsigned len) | ||
| 151 | { | ||
| 152 | SRTP_PROTECTION_PROFILE *p; | ||
| 153 | |||
| 154 | p=srtp_known_profiles; | ||
| 155 | while(p->name) | ||
| 156 | { | ||
| 157 | if((len == strlen(p->name)) && !strncmp(p->name,profile_name, | ||
| 158 | len)) | ||
| 159 | { | ||
| 160 | *pptr=p; | ||
| 161 | return 0; | ||
| 162 | } | ||
| 163 | |||
| 164 | p++; | ||
| 165 | } | ||
| 166 | |||
| 167 | return 1; | ||
| 168 | } | ||
| 169 | |||
| 170 | static int find_profile_by_num(unsigned profile_num, | ||
| 171 | SRTP_PROTECTION_PROFILE **pptr) | ||
| 172 | { | ||
| 173 | SRTP_PROTECTION_PROFILE *p; | ||
| 174 | |||
| 175 | p=srtp_known_profiles; | ||
| 176 | while(p->name) | ||
| 177 | { | ||
| 178 | if(p->id == profile_num) | ||
| 179 | { | ||
| 180 | *pptr=p; | ||
| 181 | return 0; | ||
| 182 | } | ||
| 183 | p++; | ||
| 184 | } | ||
| 185 | |||
| 186 | return 1; | ||
| 187 | } | ||
| 188 | |||
| 189 | static int ssl_ctx_make_profiles(const char *profiles_string,STACK_OF(SRTP_PROTECTION_PROFILE) **out) | ||
| 190 | { | ||
| 191 | STACK_OF(SRTP_PROTECTION_PROFILE) *profiles; | ||
| 192 | |||
| 193 | char *col; | ||
| 194 | char *ptr=(char *)profiles_string; | ||
| 195 | |||
| 196 | SRTP_PROTECTION_PROFILE *p; | ||
| 197 | |||
| 198 | if(!(profiles=sk_SRTP_PROTECTION_PROFILE_new_null())) | ||
| 199 | { | ||
| 200 | SSLerr(SSL_F_SSL_CTX_MAKE_PROFILES, SSL_R_SRTP_COULD_NOT_ALLOCATE_PROFILES); | ||
| 201 | return 1; | ||
| 202 | } | ||
| 203 | |||
| 204 | do | ||
| 205 | { | ||
| 206 | col=strchr(ptr,':'); | ||
| 207 | |||
| 208 | if(!find_profile_by_name(ptr,&p, | ||
| 209 | col ? col-ptr : (int)strlen(ptr))) | ||
| 210 | { | ||
| 211 | sk_SRTP_PROTECTION_PROFILE_push(profiles,p); | ||
| 212 | } | ||
| 213 | else | ||
| 214 | { | ||
| 215 | SSLerr(SSL_F_SSL_CTX_MAKE_PROFILES,SSL_R_SRTP_UNKNOWN_PROTECTION_PROFILE); | ||
| 216 | return 1; | ||
| 217 | } | ||
| 218 | |||
| 219 | if(col) ptr=col+1; | ||
| 220 | } while (col); | ||
| 221 | |||
| 222 | *out=profiles; | ||
| 223 | |||
| 224 | return 0; | ||
| 225 | } | ||
| 226 | |||
| 227 | int SSL_CTX_set_tlsext_use_srtp(SSL_CTX *ctx,const char *profiles) | ||
| 228 | { | ||
| 229 | return ssl_ctx_make_profiles(profiles,&ctx->srtp_profiles); | ||
| 230 | } | ||
| 231 | |||
| 232 | int SSL_set_tlsext_use_srtp(SSL *s,const char *profiles) | ||
| 233 | { | ||
| 234 | return ssl_ctx_make_profiles(profiles,&s->srtp_profiles); | ||
| 235 | } | ||
| 236 | |||
| 237 | |||
| 238 | STACK_OF(SRTP_PROTECTION_PROFILE) *SSL_get_srtp_profiles(SSL *s) | ||
| 239 | { | ||
| 240 | if(s != NULL) | ||
| 241 | { | ||
| 242 | if(s->srtp_profiles != NULL) | ||
| 243 | { | ||
| 244 | return s->srtp_profiles; | ||
| 245 | } | ||
| 246 | else if((s->ctx != NULL) && | ||
| 247 | (s->ctx->srtp_profiles != NULL)) | ||
| 248 | { | ||
| 249 | return s->ctx->srtp_profiles; | ||
| 250 | } | ||
| 251 | } | ||
| 252 | |||
| 253 | return NULL; | ||
| 254 | } | ||
| 255 | |||
| 256 | SRTP_PROTECTION_PROFILE *SSL_get_selected_srtp_profile(SSL *s) | ||
| 257 | { | ||
| 258 | return s->srtp_profile; | ||
| 259 | } | ||
| 260 | |||
| 261 | /* Note: this function returns 0 length if there are no | ||
| 262 | profiles specified */ | ||
| 263 | int ssl_add_clienthello_use_srtp_ext(SSL *s, unsigned char *p, int *len, int maxlen) | ||
| 264 | { | ||
| 265 | int ct=0; | ||
| 266 | int i; | ||
| 267 | STACK_OF(SRTP_PROTECTION_PROFILE) *clnt=0; | ||
| 268 | SRTP_PROTECTION_PROFILE *prof; | ||
| 269 | |||
| 270 | clnt=SSL_get_srtp_profiles(s); | ||
| 271 | ct=sk_SRTP_PROTECTION_PROFILE_num(clnt); /* -1 if clnt == 0 */ | ||
| 272 | |||
| 273 | if(p) | ||
| 274 | { | ||
| 275 | if(ct==0) | ||
| 276 | { | ||
| 277 | SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_USE_SRTP_EXT,SSL_R_EMPTY_SRTP_PROTECTION_PROFILE_LIST); | ||
| 278 | return 1; | ||
| 279 | } | ||
| 280 | |||
| 281 | if((2 + ct*2 + 1) > maxlen) | ||
| 282 | { | ||
| 283 | SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_USE_SRTP_EXT,SSL_R_SRTP_PROTECTION_PROFILE_LIST_TOO_LONG); | ||
| 284 | return 1; | ||
| 285 | } | ||
| 286 | |||
| 287 | /* Add the length */ | ||
| 288 | s2n(ct * 2, p); | ||
| 289 | for(i=0;i<ct;i++) | ||
| 290 | { | ||
| 291 | prof=sk_SRTP_PROTECTION_PROFILE_value(clnt,i); | ||
| 292 | s2n(prof->id,p); | ||
| 293 | } | ||
| 294 | |||
| 295 | /* Add an empty use_mki value */ | ||
| 296 | *p++ = 0; | ||
| 297 | } | ||
| 298 | |||
| 299 | *len=2 + ct*2 + 1; | ||
| 300 | |||
| 301 | return 0; | ||
| 302 | } | ||
| 303 | |||
| 304 | |||
| 305 | int ssl_parse_clienthello_use_srtp_ext(SSL *s, unsigned char *d, int len,int *al) | ||
| 306 | { | ||
| 307 | SRTP_PROTECTION_PROFILE *cprof,*sprof; | ||
| 308 | STACK_OF(SRTP_PROTECTION_PROFILE) *clnt=0,*srvr; | ||
| 309 | int ct; | ||
| 310 | int mki_len; | ||
| 311 | int i,j; | ||
| 312 | int id; | ||
| 313 | int ret; | ||
| 314 | |||
| 315 | /* Length value + the MKI length */ | ||
| 316 | if(len < 3) | ||
| 317 | { | ||
| 318 | SSLerr(SSL_F_SSL_PARSE_CLIENTHELLO_USE_SRTP_EXT,SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST); | ||
| 319 | *al=SSL_AD_DECODE_ERROR; | ||
| 320 | return 1; | ||
| 321 | } | ||
| 322 | |||
| 323 | /* Pull off the length of the cipher suite list */ | ||
| 324 | n2s(d, ct); | ||
| 325 | len -= 2; | ||
| 326 | |||
| 327 | /* Check that it is even */ | ||
| 328 | if(ct%2) | ||
| 329 | { | ||
| 330 | SSLerr(SSL_F_SSL_PARSE_CLIENTHELLO_USE_SRTP_EXT,SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST); | ||
| 331 | *al=SSL_AD_DECODE_ERROR; | ||
| 332 | return 1; | ||
| 333 | } | ||
| 334 | |||
| 335 | /* Check that lengths are consistent */ | ||
| 336 | if(len < (ct + 1)) | ||
| 337 | { | ||
| 338 | SSLerr(SSL_F_SSL_PARSE_CLIENTHELLO_USE_SRTP_EXT,SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST); | ||
| 339 | *al=SSL_AD_DECODE_ERROR; | ||
| 340 | return 1; | ||
| 341 | } | ||
| 342 | |||
| 343 | |||
| 344 | clnt=sk_SRTP_PROTECTION_PROFILE_new_null(); | ||
| 345 | |||
| 346 | while(ct) | ||
| 347 | { | ||
| 348 | n2s(d,id); | ||
| 349 | ct-=2; | ||
| 350 | len-=2; | ||
| 351 | |||
| 352 | if(!find_profile_by_num(id,&cprof)) | ||
| 353 | { | ||
| 354 | sk_SRTP_PROTECTION_PROFILE_push(clnt,cprof); | ||
| 355 | } | ||
| 356 | else | ||
| 357 | { | ||
| 358 | ; /* Ignore */ | ||
| 359 | } | ||
| 360 | } | ||
| 361 | |||
| 362 | /* Now extract the MKI value as a sanity check, but discard it for now */ | ||
| 363 | mki_len = *d; | ||
| 364 | d++; len--; | ||
| 365 | |||
| 366 | if (mki_len != len) | ||
| 367 | { | ||
| 368 | SSLerr(SSL_F_SSL_PARSE_CLIENTHELLO_USE_SRTP_EXT,SSL_R_BAD_SRTP_MKI_VALUE); | ||
| 369 | *al=SSL_AD_DECODE_ERROR; | ||
| 370 | return 1; | ||
| 371 | } | ||
| 372 | |||
| 373 | srvr=SSL_get_srtp_profiles(s); | ||
| 374 | |||
| 375 | /* Pick our most preferred profile. If no profiles have been | ||
| 376 | configured then the outer loop doesn't run | ||
| 377 | (sk_SRTP_PROTECTION_PROFILE_num() = -1) | ||
| 378 | and so we just return without doing anything */ | ||
| 379 | for(i=0;i<sk_SRTP_PROTECTION_PROFILE_num(srvr);i++) | ||
| 380 | { | ||
| 381 | sprof=sk_SRTP_PROTECTION_PROFILE_value(srvr,i); | ||
| 382 | |||
| 383 | for(j=0;j<sk_SRTP_PROTECTION_PROFILE_num(clnt);j++) | ||
| 384 | { | ||
| 385 | cprof=sk_SRTP_PROTECTION_PROFILE_value(clnt,j); | ||
| 386 | |||
| 387 | if(cprof->id==sprof->id) | ||
| 388 | { | ||
| 389 | s->srtp_profile=sprof; | ||
| 390 | *al=0; | ||
| 391 | ret=0; | ||
| 392 | goto done; | ||
| 393 | } | ||
| 394 | } | ||
| 395 | } | ||
| 396 | |||
| 397 | ret=0; | ||
| 398 | |||
| 399 | done: | ||
| 400 | if(clnt) sk_SRTP_PROTECTION_PROFILE_free(clnt); | ||
| 401 | |||
| 402 | return ret; | ||
| 403 | } | ||
| 404 | |||
| 405 | int ssl_add_serverhello_use_srtp_ext(SSL *s, unsigned char *p, int *len, int maxlen) | ||
| 406 | { | ||
| 407 | if(p) | ||
| 408 | { | ||
| 409 | if(maxlen < 5) | ||
| 410 | { | ||
| 411 | SSLerr(SSL_F_SSL_ADD_SERVERHELLO_USE_SRTP_EXT,SSL_R_SRTP_PROTECTION_PROFILE_LIST_TOO_LONG); | ||
| 412 | return 1; | ||
| 413 | } | ||
| 414 | |||
| 415 | if(s->srtp_profile==0) | ||
| 416 | { | ||
| 417 | SSLerr(SSL_F_SSL_ADD_SERVERHELLO_USE_SRTP_EXT,SSL_R_USE_SRTP_NOT_NEGOTIATED); | ||
| 418 | return 1; | ||
| 419 | } | ||
| 420 | s2n(2, p); | ||
| 421 | s2n(s->srtp_profile->id,p); | ||
| 422 | *p++ = 0; | ||
| 423 | } | ||
| 424 | *len=5; | ||
| 425 | |||
| 426 | return 0; | ||
| 427 | } | ||
| 428 | |||
| 429 | |||
| 430 | int ssl_parse_serverhello_use_srtp_ext(SSL *s, unsigned char *d, int len,int *al) | ||
| 431 | { | ||
| 432 | unsigned id; | ||
| 433 | int i; | ||
| 434 | int ct; | ||
| 435 | |||
| 436 | STACK_OF(SRTP_PROTECTION_PROFILE) *clnt; | ||
| 437 | SRTP_PROTECTION_PROFILE *prof; | ||
| 438 | |||
| 439 | if(len!=5) | ||
| 440 | { | ||
| 441 | SSLerr(SSL_F_SSL_PARSE_SERVERHELLO_USE_SRTP_EXT,SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST); | ||
| 442 | *al=SSL_AD_DECODE_ERROR; | ||
| 443 | return 1; | ||
| 444 | } | ||
| 445 | |||
| 446 | n2s(d, ct); | ||
| 447 | if(ct!=2) | ||
| 448 | { | ||
| 449 | SSLerr(SSL_F_SSL_PARSE_SERVERHELLO_USE_SRTP_EXT,SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST); | ||
| 450 | *al=SSL_AD_DECODE_ERROR; | ||
| 451 | return 1; | ||
| 452 | } | ||
| 453 | |||
| 454 | n2s(d,id); | ||
| 455 | if (*d) /* Must be no MKI, since we never offer one */ | ||
| 456 | { | ||
| 457 | SSLerr(SSL_F_SSL_PARSE_SERVERHELLO_USE_SRTP_EXT,SSL_R_BAD_SRTP_MKI_VALUE); | ||
| 458 | *al=SSL_AD_ILLEGAL_PARAMETER; | ||
| 459 | return 1; | ||
| 460 | } | ||
| 461 | |||
| 462 | clnt=SSL_get_srtp_profiles(s); | ||
| 463 | |||
| 464 | /* Throw an error if the server gave us an unsolicited extension */ | ||
| 465 | if (clnt == NULL) | ||
| 466 | { | ||
| 467 | SSLerr(SSL_F_SSL_PARSE_SERVERHELLO_USE_SRTP_EXT,SSL_R_NO_SRTP_PROFILES); | ||
| 468 | *al=SSL_AD_DECODE_ERROR; | ||
| 469 | return 1; | ||
| 470 | } | ||
| 471 | |||
| 472 | /* Check to see if the server gave us something we support | ||
| 473 | (and presumably offered) | ||
| 474 | */ | ||
| 475 | for(i=0;i<sk_SRTP_PROTECTION_PROFILE_num(clnt);i++) | ||
| 476 | { | ||
| 477 | prof=sk_SRTP_PROTECTION_PROFILE_value(clnt,i); | ||
| 478 | |||
| 479 | if(prof->id == id) | ||
| 480 | { | ||
| 481 | s->srtp_profile=prof; | ||
| 482 | *al=0; | ||
| 483 | return 0; | ||
| 484 | } | ||
| 485 | } | ||
| 486 | |||
| 487 | SSLerr(SSL_F_SSL_PARSE_SERVERHELLO_USE_SRTP_EXT,SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST); | ||
| 488 | *al=SSL_AD_DECODE_ERROR; | ||
| 489 | return 1; | ||
| 490 | } | ||
| 491 | |||
| 492 | |||
| 493 | #endif | ||
diff --git a/src/lib/libssl/srtp.h b/src/lib/libssl/srtp.h new file mode 100644 index 0000000000..c0cf33ef28 --- /dev/null +++ b/src/lib/libssl/srtp.h | |||
| @@ -0,0 +1,145 @@ | |||
| 1 | /* ssl/tls1.h */ | ||
| 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | ||
| 3 | * All rights reserved. | ||
| 4 | * | ||
| 5 | * This package is an SSL implementation written | ||
| 6 | * by Eric Young (eay@cryptsoft.com). | ||
| 7 | * The implementation was written so as to conform with Netscapes SSL. | ||
| 8 | * | ||
| 9 | * This library is free for commercial and non-commercial use as long as | ||
| 10 | * the following conditions are aheared to. The following conditions | ||
| 11 | * apply to all code found in this distribution, be it the RC4, RSA, | ||
| 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | ||
| 13 | * included with this distribution is covered by the same copyright terms | ||
| 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | ||
| 15 | * | ||
| 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | ||
| 17 | * the code are not to be removed. | ||
| 18 | * If this package is used in a product, Eric Young should be given attribution | ||
| 19 | * as the author of the parts of the library used. | ||
| 20 | * This can be in the form of a textual message at program startup or | ||
| 21 | * in documentation (online or textual) provided with the package. | ||
| 22 | * | ||
| 23 | * Redistribution and use in source and binary forms, with or without | ||
| 24 | * modification, are permitted provided that the following conditions | ||
| 25 | * are met: | ||
| 26 | * 1. Redistributions of source code must retain the copyright | ||
| 27 | * notice, this list of conditions and the following disclaimer. | ||
| 28 | * 2. Redistributions in binary form must reproduce the above copyright | ||
| 29 | * notice, this list of conditions and the following disclaimer in the | ||
| 30 | * documentation and/or other materials provided with the distribution. | ||
| 31 | * 3. All advertising materials mentioning features or use of this software | ||
| 32 | * must display the following acknowledgement: | ||
| 33 | * "This product includes cryptographic software written by | ||
| 34 | * Eric Young (eay@cryptsoft.com)" | ||
| 35 | * The word 'cryptographic' can be left out if the rouines from the library | ||
| 36 | * being used are not cryptographic related :-). | ||
| 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | ||
| 38 | * the apps directory (application code) you must include an acknowledgement: | ||
| 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | ||
| 40 | * | ||
| 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | ||
| 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
| 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||
| 44 | * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE | ||
| 45 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||
| 46 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||
| 47 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
| 48 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||
| 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | ||
| 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | ||
| 51 | * SUCH DAMAGE. | ||
| 52 | * | ||
| 53 | * The licence and distribution terms for any publically available version or | ||
| 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | ||
| 55 | * copied and put under another distribution licence | ||
| 56 | * [including the GNU Public Licence.] | ||
| 57 | */ | ||
| 58 | /* ==================================================================== | ||
| 59 | * Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved. | ||
| 60 | * | ||
| 61 | * Redistribution and use in source and binary forms, with or without | ||
| 62 | * modification, are permitted provided that the following conditions | ||
| 63 | * are met: | ||
| 64 | * | ||
| 65 | * 1. Redistributions of source code must retain the above copyright | ||
| 66 | * notice, this list of conditions and the following disclaimer. | ||
| 67 | * | ||
| 68 | * 2. Redistributions in binary form must reproduce the above copyright | ||
| 69 | * notice, this list of conditions and the following disclaimer in | ||
| 70 | * the documentation and/or other materials provided with the | ||
| 71 | * distribution. | ||
| 72 | * | ||
| 73 | * 3. All advertising materials mentioning features or use of this | ||
| 74 | * software must display the following acknowledgment: | ||
| 75 | * "This product includes software developed by the OpenSSL Project | ||
| 76 | * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" | ||
| 77 | * | ||
| 78 | * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to | ||
| 79 | * endorse or promote products derived from this software without | ||
| 80 | * prior written permission. For written permission, please contact | ||
| 81 | * openssl-core@openssl.org. | ||
| 82 | * | ||
| 83 | * 5. Products derived from this software may not be called "OpenSSL" | ||
| 84 | * nor may "OpenSSL" appear in their names without prior written | ||
| 85 | * permission of the OpenSSL Project. | ||
| 86 | * | ||
| 87 | * 6. Redistributions of any form whatsoever must retain the following | ||
| 88 | * acknowledgment: | ||
| 89 | * "This product includes software developed by the OpenSSL Project | ||
| 90 | * for use in the OpenSSL Toolkit (http://www.openssl.org/)" | ||
| 91 | * | ||
| 92 | * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY | ||
| 93 | * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
| 94 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | ||
| 95 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR | ||
| 96 | * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
| 97 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
| 98 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
| 99 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
| 100 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||
| 101 | * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
| 102 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED | ||
| 103 | * OF THE POSSIBILITY OF SUCH DAMAGE. | ||
| 104 | * ==================================================================== | ||
| 105 | * | ||
| 106 | * This product includes cryptographic software written by Eric Young | ||
| 107 | * (eay@cryptsoft.com). This product includes software written by Tim | ||
| 108 | * Hudson (tjh@cryptsoft.com). | ||
| 109 | * | ||
| 110 | */ | ||
| 111 | /* | ||
| 112 | DTLS code by Eric Rescorla <ekr@rtfm.com> | ||
| 113 | |||
| 114 | Copyright (C) 2006, Network Resonance, Inc. | ||
| 115 | Copyright (C) 2011, RTFM, Inc. | ||
| 116 | */ | ||
| 117 | |||
| 118 | #ifndef HEADER_D1_SRTP_H | ||
| 119 | #define HEADER_D1_SRTP_H | ||
| 120 | |||
| 121 | #ifdef __cplusplus | ||
| 122 | extern "C" { | ||
| 123 | #endif | ||
| 124 | |||
| 125 | |||
| 126 | #define SRTP_AES128_CM_SHA1_80 0x0001 | ||
| 127 | #define SRTP_AES128_CM_SHA1_32 0x0002 | ||
| 128 | #define SRTP_AES128_F8_SHA1_80 0x0003 | ||
| 129 | #define SRTP_AES128_F8_SHA1_32 0x0004 | ||
| 130 | #define SRTP_NULL_SHA1_80 0x0005 | ||
| 131 | #define SRTP_NULL_SHA1_32 0x0006 | ||
| 132 | |||
| 133 | int SSL_CTX_set_tlsext_use_srtp(SSL_CTX *ctx, const char *profiles); | ||
| 134 | int SSL_set_tlsext_use_srtp(SSL *ctx, const char *profiles); | ||
| 135 | SRTP_PROTECTION_PROFILE *SSL_get_selected_srtp_profile(SSL *s); | ||
| 136 | |||
| 137 | STACK_OF(SRTP_PROTECTION_PROFILE) *SSL_get_srtp_profiles(SSL *ssl); | ||
| 138 | SRTP_PROTECTION_PROFILE *SSL_get_selected_srtp_profile(SSL *s); | ||
| 139 | |||
| 140 | #ifdef __cplusplus | ||
| 141 | } | ||
| 142 | #endif | ||
| 143 | |||
| 144 | #endif | ||
| 145 | |||
diff --git a/src/lib/libssl/test/P1ss.cnf b/src/lib/libssl/test/P1ss.cnf index 876a0d35f8..326cce2ba8 100644 --- a/src/lib/libssl/test/P1ss.cnf +++ b/src/lib/libssl/test/P1ss.cnf | |||
| @@ -7,7 +7,7 @@ RANDFILE = ./.rnd | |||
| 7 | 7 | ||
| 8 | #################################################################### | 8 | #################################################################### |
| 9 | [ req ] | 9 | [ req ] |
| 10 | default_bits = 512 | 10 | default_bits = 1024 |
| 11 | default_keyfile = keySS.pem | 11 | default_keyfile = keySS.pem |
| 12 | distinguished_name = req_distinguished_name | 12 | distinguished_name = req_distinguished_name |
| 13 | encrypt_rsa_key = no | 13 | encrypt_rsa_key = no |
diff --git a/src/lib/libssl/test/P2ss.cnf b/src/lib/libssl/test/P2ss.cnf index 373a87e7c2..8b502321b8 100644 --- a/src/lib/libssl/test/P2ss.cnf +++ b/src/lib/libssl/test/P2ss.cnf | |||
| @@ -7,7 +7,7 @@ RANDFILE = ./.rnd | |||
| 7 | 7 | ||
| 8 | #################################################################### | 8 | #################################################################### |
| 9 | [ req ] | 9 | [ req ] |
| 10 | default_bits = 512 | 10 | default_bits = 1024 |
| 11 | default_keyfile = keySS.pem | 11 | default_keyfile = keySS.pem |
| 12 | distinguished_name = req_distinguished_name | 12 | distinguished_name = req_distinguished_name |
| 13 | encrypt_rsa_key = no | 13 | encrypt_rsa_key = no |
diff --git a/src/lib/libssl/test/pkits-test.pl b/src/lib/libssl/test/pkits-test.pl index 69dffa16f9..5c6b89fcdb 100644 --- a/src/lib/libssl/test/pkits-test.pl +++ b/src/lib/libssl/test/pkits-test.pl | |||
| @@ -784,6 +784,15 @@ my $ossl = "ossl/apps/openssl"; | |||
| 784 | 784 | ||
| 785 | my $ossl_cmd = "$ossl_path cms -verify -verify_retcode "; | 785 | my $ossl_cmd = "$ossl_path cms -verify -verify_retcode "; |
| 786 | $ossl_cmd .= "-CAfile pkitsta.pem -crl_check_all -x509_strict "; | 786 | $ossl_cmd .= "-CAfile pkitsta.pem -crl_check_all -x509_strict "; |
| 787 | |||
| 788 | # Check for expiry of trust anchor | ||
| 789 | system "$ossl_path x509 -inform DER -in $pkitsta -checkend 0"; | ||
| 790 | if ($? == 256) | ||
| 791 | { | ||
| 792 | print STDERR "WARNING: using older expired data\n"; | ||
| 793 | $ossl_cmd .= "-attime 1291940972 "; | ||
| 794 | } | ||
| 795 | |||
| 787 | $ossl_cmd .= "-policy_check -extended_crl -use_deltas -out /dev/null 2>&1 "; | 796 | $ossl_cmd .= "-policy_check -extended_crl -use_deltas -out /dev/null 2>&1 "; |
| 788 | 797 | ||
| 789 | system "$ossl_path x509 -inform DER -in $pkitsta -out pkitsta.pem"; | 798 | system "$ossl_path x509 -inform DER -in $pkitsta -out pkitsta.pem"; |
diff --git a/src/lib/libssl/test/test.cnf b/src/lib/libssl/test/test.cnf index faad3914a8..10834442a1 100644 --- a/src/lib/libssl/test/test.cnf +++ b/src/lib/libssl/test/test.cnf | |||
| @@ -56,7 +56,7 @@ emailAddress = optional | |||
| 56 | 56 | ||
| 57 | #################################################################### | 57 | #################################################################### |
| 58 | [ req ] | 58 | [ req ] |
| 59 | default_bits = 512 | 59 | default_bits = 1024 |
| 60 | default_keyfile = testkey.pem | 60 | default_keyfile = testkey.pem |
| 61 | distinguished_name = req_distinguished_name | 61 | distinguished_name = req_distinguished_name |
| 62 | encrypt_rsa_key = no | 62 | encrypt_rsa_key = no |
