diff options
Diffstat (limited to 'src/lib/libssl')
-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 |