summaryrefslogtreecommitdiff
path: root/src/lib/libssl/ssl_lib.c
diff options
context:
space:
mode:
authordjm <>2012-10-13 21:25:14 +0000
committerdjm <>2012-10-13 21:25:14 +0000
commit93723b50b639d8dc717bc1bf463fd46e1b321239 (patch)
tree281e0a29ae8f87a8c47fbd4deaa1f3d48b8cc5c1 /src/lib/libssl/ssl_lib.c
parent65e72ac55a6405783db7a12d7e35a7561d46005b (diff)
downloadopenbsd-93723b50b639d8dc717bc1bf463fd46e1b321239.tar.gz
openbsd-93723b50b639d8dc717bc1bf463fd46e1b321239.tar.bz2
openbsd-93723b50b639d8dc717bc1bf463fd46e1b321239.zip
resolve conflicts
Diffstat (limited to 'src/lib/libssl/ssl_lib.c')
-rw-r--r--src/lib/libssl/ssl_lib.c247
1 files changed, 225 insertions, 22 deletions
diff --git a/src/lib/libssl/ssl_lib.c b/src/lib/libssl/ssl_lib.c
index 7755476de3..c91f0018e4 100644
--- a/src/lib/libssl/ssl_lib.c
+++ b/src/lib/libssl/ssl_lib.c
@@ -176,7 +176,10 @@ SSL3_ENC_METHOD ssl3_undef_enc_method={
176 0, /* client_finished_label_len */ 176 0, /* client_finished_label_len */
177 NULL, /* server_finished_label */ 177 NULL, /* server_finished_label */
178 0, /* server_finished_label_len */ 178 0, /* server_finished_label_len */
179 (int (*)(int))ssl_undefined_function 179 (int (*)(int))ssl_undefined_function,
180 (int (*)(SSL *, unsigned char *, size_t, const char *,
181 size_t, const unsigned char *, size_t,
182 int use_context)) ssl_undefined_function,
180 }; 183 };
181 184
182int SSL_clear(SSL *s) 185int SSL_clear(SSL *s)
@@ -202,9 +205,9 @@ int SSL_clear(SSL *s)
202 * needed because SSL_clear is not called when doing renegotiation) */ 205 * needed because SSL_clear is not called when doing renegotiation) */
203 /* This is set if we are doing dynamic renegotiation so keep 206 /* This is set if we are doing dynamic renegotiation so keep
204 * the old cipher. It is sort of a SSL_clear_lite :-) */ 207 * the old cipher. It is sort of a SSL_clear_lite :-) */
205 if (s->new_session) return(1); 208 if (s->renegotiate) return(1);
206#else 209#else
207 if (s->new_session) 210 if (s->renegotiate)
208 { 211 {
209 SSLerr(SSL_F_SSL_CLEAR,ERR_R_INTERNAL_ERROR); 212 SSLerr(SSL_F_SSL_CLEAR,ERR_R_INTERNAL_ERROR);
210 return 0; 213 return 0;
@@ -353,6 +356,9 @@ SSL *SSL_new(SSL_CTX *ctx)
353 s->tlsext_ocsp_resplen = -1; 356 s->tlsext_ocsp_resplen = -1;
354 CRYPTO_add(&ctx->references,1,CRYPTO_LOCK_SSL_CTX); 357 CRYPTO_add(&ctx->references,1,CRYPTO_LOCK_SSL_CTX);
355 s->initial_ctx=ctx; 358 s->initial_ctx=ctx;
359# ifndef OPENSSL_NO_NEXTPROTONEG
360 s->next_proto_negotiated = NULL;
361# endif
356#endif 362#endif
357 363
358 s->verify_result=X509_V_OK; 364 s->verify_result=X509_V_OK;
@@ -586,6 +592,14 @@ void SSL_free(SSL *s)
586 kssl_ctx_free(s->kssl_ctx); 592 kssl_ctx_free(s->kssl_ctx);
587#endif /* OPENSSL_NO_KRB5 */ 593#endif /* OPENSSL_NO_KRB5 */
588 594
595#if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG)
596 if (s->next_proto_negotiated)
597 OPENSSL_free(s->next_proto_negotiated);
598#endif
599
600 if (s->srtp_profiles)
601 sk_SRTP_PROTECTION_PROFILE_free(s->srtp_profiles);
602
589 OPENSSL_free(s); 603 OPENSSL_free(s);
590 } 604 }
591 605
@@ -1008,10 +1022,21 @@ int SSL_shutdown(SSL *s)
1008 1022
1009int SSL_renegotiate(SSL *s) 1023int SSL_renegotiate(SSL *s)
1010 { 1024 {
1011 if (s->new_session == 0) 1025 if (s->renegotiate == 0)
1012 { 1026 s->renegotiate=1;
1013 s->new_session=1; 1027
1014 } 1028 s->new_session=1;
1029
1030 return(s->method->ssl_renegotiate(s));
1031 }
1032
1033int SSL_renegotiate_abbreviated(SSL *s)
1034 {
1035 if (s->renegotiate == 0)
1036 s->renegotiate=1;
1037
1038 s->new_session=0;
1039
1015 return(s->method->ssl_renegotiate(s)); 1040 return(s->method->ssl_renegotiate(s));
1016 } 1041 }
1017 1042
@@ -1019,7 +1044,7 @@ int SSL_renegotiate_pending(SSL *s)
1019 { 1044 {
1020 /* becomes true when negotiation is requested; 1045 /* becomes true when negotiation is requested;
1021 * false again once a handshake has finished */ 1046 * false again once a handshake has finished */
1022 return (s->new_session != 0); 1047 return (s->renegotiate != 0);
1023 } 1048 }
1024 1049
1025long SSL_ctrl(SSL *s,int cmd,long larg,void *parg) 1050long SSL_ctrl(SSL *s,int cmd,long larg,void *parg)
@@ -1054,8 +1079,10 @@ long SSL_ctrl(SSL *s,int cmd,long larg,void *parg)
1054 s->max_cert_list=larg; 1079 s->max_cert_list=larg;
1055 return(l); 1080 return(l);
1056 case SSL_CTRL_SET_MTU: 1081 case SSL_CTRL_SET_MTU:
1082#ifndef OPENSSL_NO_DTLS1
1057 if (larg < (long)dtls1_min_mtu()) 1083 if (larg < (long)dtls1_min_mtu())
1058 return 0; 1084 return 0;
1085#endif
1059 1086
1060 if (SSL_version(s) == DTLS1_VERSION || 1087 if (SSL_version(s) == DTLS1_VERSION ||
1061 SSL_version(s) == DTLS1_BAD_VER) 1088 SSL_version(s) == DTLS1_BAD_VER)
@@ -1355,6 +1382,10 @@ int ssl_cipher_list_to_bytes(SSL *s,STACK_OF(SSL_CIPHER) *sk,unsigned char *p,
1355 for (i=0; i<sk_SSL_CIPHER_num(sk); i++) 1382 for (i=0; i<sk_SSL_CIPHER_num(sk); i++)
1356 { 1383 {
1357 c=sk_SSL_CIPHER_value(sk,i); 1384 c=sk_SSL_CIPHER_value(sk,i);
1385 /* Skip TLS v1.2 only ciphersuites if lower than v1.2 */
1386 if ((c->algorithm_ssl & SSL_TLSV1_2) &&
1387 (TLS1_get_client_version(s) < TLS1_2_VERSION))
1388 continue;
1358#ifndef OPENSSL_NO_KRB5 1389#ifndef OPENSSL_NO_KRB5
1359 if (((c->algorithm_mkey & SSL_kKRB5) || (c->algorithm_auth & SSL_aKRB5)) && 1390 if (((c->algorithm_mkey & SSL_kKRB5) || (c->algorithm_auth & SSL_aKRB5)) &&
1360 nokrb5) 1391 nokrb5)
@@ -1372,7 +1403,7 @@ int ssl_cipher_list_to_bytes(SSL *s,STACK_OF(SSL_CIPHER) *sk,unsigned char *p,
1372 /* If p == q, no ciphers and caller indicates an error. Otherwise 1403 /* If p == q, no ciphers and caller indicates an error. Otherwise
1373 * add SCSV if not renegotiating. 1404 * add SCSV if not renegotiating.
1374 */ 1405 */
1375 if (p != q && !s->new_session) 1406 if (p != q && !s->renegotiate)
1376 { 1407 {
1377 static SSL_CIPHER scsv = 1408 static SSL_CIPHER scsv =
1378 { 1409 {
@@ -1419,7 +1450,7 @@ STACK_OF(SSL_CIPHER) *ssl_bytes_to_cipher_list(SSL *s,unsigned char *p,int num,
1419 (p[n-1] == (SSL3_CK_SCSV & 0xff))) 1450 (p[n-1] == (SSL3_CK_SCSV & 0xff)))
1420 { 1451 {
1421 /* SCSV fatal if renegotiating */ 1452 /* SCSV fatal if renegotiating */
1422 if (s->new_session) 1453 if (s->renegotiate)
1423 { 1454 {
1424 SSLerr(SSL_F_SSL_BYTES_TO_CIPHER_LIST,SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING); 1455 SSLerr(SSL_F_SSL_BYTES_TO_CIPHER_LIST,SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING);
1425 ssl3_send_alert(s,SSL3_AL_FATAL,SSL_AD_HANDSHAKE_FAILURE); 1456 ssl3_send_alert(s,SSL3_AL_FATAL,SSL_AD_HANDSHAKE_FAILURE);
@@ -1476,8 +1507,137 @@ int SSL_get_servername_type(const SSL *s)
1476 return TLSEXT_NAMETYPE_host_name; 1507 return TLSEXT_NAMETYPE_host_name;
1477 return -1; 1508 return -1;
1478 } 1509 }
1510
1511# ifndef OPENSSL_NO_NEXTPROTONEG
1512/* SSL_select_next_proto implements the standard protocol selection. It is
1513 * expected that this function is called from the callback set by
1514 * SSL_CTX_set_next_proto_select_cb.
1515 *
1516 * The protocol data is assumed to be a vector of 8-bit, length prefixed byte
1517 * strings. The length byte itself is not included in the length. A byte
1518 * string of length 0 is invalid. No byte string may be truncated.
1519 *
1520 * The current, but experimental algorithm for selecting the protocol is:
1521 *
1522 * 1) If the server doesn't support NPN then this is indicated to the
1523 * callback. In this case, the client application has to abort the connection
1524 * or have a default application level protocol.
1525 *
1526 * 2) If the server supports NPN, but advertises an empty list then the
1527 * client selects the first protcol in its list, but indicates via the
1528 * API that this fallback case was enacted.
1529 *
1530 * 3) Otherwise, the client finds the first protocol in the server's list
1531 * that it supports and selects this protocol. This is because it's
1532 * assumed that the server has better information about which protocol
1533 * a client should use.
1534 *
1535 * 4) If the client doesn't support any of the server's advertised
1536 * protocols, then this is treated the same as case 2.
1537 *
1538 * It returns either
1539 * OPENSSL_NPN_NEGOTIATED if a common protocol was found, or
1540 * OPENSSL_NPN_NO_OVERLAP if the fallback case was reached.
1541 */
1542int SSL_select_next_proto(unsigned char **out, unsigned char *outlen, const unsigned char *server, unsigned int server_len, const unsigned char *client, unsigned int client_len)
1543 {
1544 unsigned int i, j;
1545 const unsigned char *result;
1546 int status = OPENSSL_NPN_UNSUPPORTED;
1547
1548 /* For each protocol in server preference order, see if we support it. */
1549 for (i = 0; i < server_len; )
1550 {
1551 for (j = 0; j < client_len; )
1552 {
1553 if (server[i] == client[j] &&
1554 memcmp(&server[i+1], &client[j+1], server[i]) == 0)
1555 {
1556 /* We found a match */
1557 result = &server[i];
1558 status = OPENSSL_NPN_NEGOTIATED;
1559 goto found;
1560 }
1561 j += client[j];
1562 j++;
1563 }
1564 i += server[i];
1565 i++;
1566 }
1567
1568 /* There's no overlap between our protocols and the server's list. */
1569 result = client;
1570 status = OPENSSL_NPN_NO_OVERLAP;
1571
1572 found:
1573 *out = (unsigned char *) result + 1;
1574 *outlen = result[0];
1575 return status;
1576 }
1577
1578/* SSL_get0_next_proto_negotiated sets *data and *len to point to the client's
1579 * requested protocol for this connection and returns 0. If the client didn't
1580 * request any protocol, then *data is set to NULL.
1581 *
1582 * Note that the client can request any protocol it chooses. The value returned
1583 * from this function need not be a member of the list of supported protocols
1584 * provided by the callback.
1585 */
1586void SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data, unsigned *len)
1587 {
1588 *data = s->next_proto_negotiated;
1589 if (!*data) {
1590 *len = 0;
1591 } else {
1592 *len = s->next_proto_negotiated_len;
1593 }
1594}
1595
1596/* SSL_CTX_set_next_protos_advertised_cb sets a callback that is called when a
1597 * TLS server needs a list of supported protocols for Next Protocol
1598 * Negotiation. The returned list must be in wire format. The list is returned
1599 * by setting |out| to point to it and |outlen| to its length. This memory will
1600 * not be modified, but one should assume that the SSL* keeps a reference to
1601 * it.
1602 *
1603 * The callback should return SSL_TLSEXT_ERR_OK if it wishes to advertise. Otherwise, no
1604 * such extension will be included in the ServerHello. */
1605void SSL_CTX_set_next_protos_advertised_cb(SSL_CTX *ctx, int (*cb) (SSL *ssl, const unsigned char **out, unsigned int *outlen, void *arg), void *arg)
1606 {
1607 ctx->next_protos_advertised_cb = cb;
1608 ctx->next_protos_advertised_cb_arg = arg;
1609 }
1610
1611/* SSL_CTX_set_next_proto_select_cb sets a callback that is called when a
1612 * client needs to select a protocol from the server's provided list. |out|
1613 * must be set to point to the selected protocol (which may be within |in|).
1614 * The length of the protocol name must be written into |outlen|. The server's
1615 * advertised protocols are provided in |in| and |inlen|. The callback can
1616 * assume that |in| is syntactically valid.
1617 *
1618 * The client must select a protocol. It is fatal to the connection if this
1619 * callback returns a value other than SSL_TLSEXT_ERR_OK.
1620 */
1621void SSL_CTX_set_next_proto_select_cb(SSL_CTX *ctx, int (*cb) (SSL *s, unsigned char **out, unsigned char *outlen, const unsigned char *in, unsigned int inlen, void *arg), void *arg)
1622 {
1623 ctx->next_proto_select_cb = cb;
1624 ctx->next_proto_select_cb_arg = arg;
1625 }
1626# endif
1479#endif 1627#endif
1480 1628
1629int SSL_export_keying_material(SSL *s, unsigned char *out, size_t olen,
1630 const char *label, size_t llen, const unsigned char *p, size_t plen,
1631 int use_context)
1632 {
1633 if (s->version < TLS1_VERSION)
1634 return -1;
1635
1636 return s->method->ssl3_enc->export_keying_material(s, out, olen, label,
1637 llen, p, plen,
1638 use_context);
1639 }
1640
1481static unsigned long ssl_session_hash(const SSL_SESSION *a) 1641static unsigned long ssl_session_hash(const SSL_SESSION *a)
1482 { 1642 {
1483 unsigned long l; 1643 unsigned long l;
@@ -1521,6 +1681,14 @@ SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth)
1521 return(NULL); 1681 return(NULL);
1522 } 1682 }
1523 1683
1684#ifdef OPENSSL_FIPS
1685 if (FIPS_mode() && (meth->version < TLS1_VERSION))
1686 {
1687 SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_ONLY_TLS_ALLOWED_IN_FIPS_MODE);
1688 return NULL;
1689 }
1690#endif
1691
1524 if (SSL_get_ex_data_X509_STORE_CTX_idx() < 0) 1692 if (SSL_get_ex_data_X509_STORE_CTX_idx() < 0)
1525 { 1693 {
1526 SSLerr(SSL_F_SSL_CTX_NEW,SSL_R_X509_VERIFICATION_SETUP_PROBLEMS); 1694 SSLerr(SSL_F_SSL_CTX_NEW,SSL_R_X509_VERIFICATION_SETUP_PROBLEMS);
@@ -1640,12 +1808,19 @@ SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth)
1640 ret->tlsext_status_cb = 0; 1808 ret->tlsext_status_cb = 0;
1641 ret->tlsext_status_arg = NULL; 1809 ret->tlsext_status_arg = NULL;
1642 1810
1811# ifndef OPENSSL_NO_NEXTPROTONEG
1812 ret->next_protos_advertised_cb = 0;
1813 ret->next_proto_select_cb = 0;
1814# endif
1643#endif 1815#endif
1644#ifndef OPENSSL_NO_PSK 1816#ifndef OPENSSL_NO_PSK
1645 ret->psk_identity_hint=NULL; 1817 ret->psk_identity_hint=NULL;
1646 ret->psk_client_callback=NULL; 1818 ret->psk_client_callback=NULL;
1647 ret->psk_server_callback=NULL; 1819 ret->psk_server_callback=NULL;
1648#endif 1820#endif
1821#ifndef OPENSSL_NO_SRP
1822 SSL_CTX_SRP_CTX_init(ret);
1823#endif
1649#ifndef OPENSSL_NO_BUF_FREELISTS 1824#ifndef OPENSSL_NO_BUF_FREELISTS
1650 ret->freelist_max_len = SSL_MAX_BUF_FREELIST_LEN_DEFAULT; 1825 ret->freelist_max_len = SSL_MAX_BUF_FREELIST_LEN_DEFAULT;
1651 ret->rbuf_freelist = OPENSSL_malloc(sizeof(SSL3_BUF_FREELIST)); 1826 ret->rbuf_freelist = OPENSSL_malloc(sizeof(SSL3_BUF_FREELIST));
@@ -1774,10 +1949,16 @@ void SSL_CTX_free(SSL_CTX *a)
1774 a->comp_methods = NULL; 1949 a->comp_methods = NULL;
1775#endif 1950#endif
1776 1951
1952 if (a->srtp_profiles)
1953 sk_SRTP_PROTECTION_PROFILE_free(a->srtp_profiles);
1954
1777#ifndef OPENSSL_NO_PSK 1955#ifndef OPENSSL_NO_PSK
1778 if (a->psk_identity_hint) 1956 if (a->psk_identity_hint)
1779 OPENSSL_free(a->psk_identity_hint); 1957 OPENSSL_free(a->psk_identity_hint);
1780#endif 1958#endif
1959#ifndef OPENSSL_NO_SRP
1960 SSL_CTX_SRP_CTX_free(a);
1961#endif
1781#ifndef OPENSSL_NO_ENGINE 1962#ifndef OPENSSL_NO_ENGINE
1782 if (a->client_cert_engine) 1963 if (a->client_cert_engine)
1783 ENGINE_finish(a->client_cert_engine); 1964 ENGINE_finish(a->client_cert_engine);
@@ -2031,12 +2212,13 @@ void ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher)
2031 2212
2032#ifndef OPENSSL_NO_EC 2213#ifndef OPENSSL_NO_EC
2033 2214
2034int ssl_check_srvr_ecc_cert_and_alg(X509 *x, const SSL_CIPHER *cs) 2215int ssl_check_srvr_ecc_cert_and_alg(X509 *x, SSL *s)
2035 { 2216 {
2036 unsigned long alg_k, alg_a; 2217 unsigned long alg_k, alg_a;
2037 EVP_PKEY *pkey = NULL; 2218 EVP_PKEY *pkey = NULL;
2038 int keysize = 0; 2219 int keysize = 0;
2039 int signature_nid = 0, md_nid = 0, pk_nid = 0; 2220 int signature_nid = 0, md_nid = 0, pk_nid = 0;
2221 const SSL_CIPHER *cs = s->s3->tmp.new_cipher;
2040 2222
2041 alg_k = cs->algorithm_mkey; 2223 alg_k = cs->algorithm_mkey;
2042 alg_a = cs->algorithm_auth; 2224 alg_a = cs->algorithm_auth;
@@ -2066,7 +2248,7 @@ int ssl_check_srvr_ecc_cert_and_alg(X509 *x, const SSL_CIPHER *cs)
2066 SSLerr(SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG, SSL_R_ECC_CERT_NOT_FOR_KEY_AGREEMENT); 2248 SSLerr(SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG, SSL_R_ECC_CERT_NOT_FOR_KEY_AGREEMENT);
2067 return 0; 2249 return 0;
2068 } 2250 }
2069 if (alg_k & SSL_kECDHe) 2251 if ((alg_k & SSL_kECDHe) && TLS1_get_version(s) < TLS1_2_VERSION)
2070 { 2252 {
2071 /* signature alg must be ECDSA */ 2253 /* signature alg must be ECDSA */
2072 if (pk_nid != NID_X9_62_id_ecPublicKey) 2254 if (pk_nid != NID_X9_62_id_ecPublicKey)
@@ -2075,7 +2257,7 @@ int ssl_check_srvr_ecc_cert_and_alg(X509 *x, const SSL_CIPHER *cs)
2075 return 0; 2257 return 0;
2076 } 2258 }
2077 } 2259 }
2078 if (alg_k & SSL_kECDHr) 2260 if ((alg_k & SSL_kECDHr) && TLS1_get_version(s) < TLS1_2_VERSION)
2079 { 2261 {
2080 /* signature alg must be RSA */ 2262 /* signature alg must be RSA */
2081 2263
@@ -2165,34 +2347,36 @@ X509 *ssl_get_server_send_cert(SSL *s)
2165 return(c->pkeys[i].x509); 2347 return(c->pkeys[i].x509);
2166 } 2348 }
2167 2349
2168EVP_PKEY *ssl_get_sign_pkey(SSL *s,const SSL_CIPHER *cipher) 2350EVP_PKEY *ssl_get_sign_pkey(SSL *s,const SSL_CIPHER *cipher, const EVP_MD **pmd)
2169 { 2351 {
2170 unsigned long alg_a; 2352 unsigned long alg_a;
2171 CERT *c; 2353 CERT *c;
2354 int idx = -1;
2172 2355
2173 alg_a = cipher->algorithm_auth; 2356 alg_a = cipher->algorithm_auth;
2174 c=s->cert; 2357 c=s->cert;
2175 2358
2176 if ((alg_a & SSL_aDSS) && 2359 if ((alg_a & SSL_aDSS) &&
2177 (c->pkeys[SSL_PKEY_DSA_SIGN].privatekey != NULL)) 2360 (c->pkeys[SSL_PKEY_DSA_SIGN].privatekey != NULL))
2178 return(c->pkeys[SSL_PKEY_DSA_SIGN].privatekey); 2361 idx = SSL_PKEY_DSA_SIGN;
2179 else if (alg_a & SSL_aRSA) 2362 else if (alg_a & SSL_aRSA)
2180 { 2363 {
2181 if (c->pkeys[SSL_PKEY_RSA_SIGN].privatekey != NULL) 2364 if (c->pkeys[SSL_PKEY_RSA_SIGN].privatekey != NULL)
2182 return(c->pkeys[SSL_PKEY_RSA_SIGN].privatekey); 2365 idx = SSL_PKEY_RSA_SIGN;
2183 else if (c->pkeys[SSL_PKEY_RSA_ENC].privatekey != NULL) 2366 else if (c->pkeys[SSL_PKEY_RSA_ENC].privatekey != NULL)
2184 return(c->pkeys[SSL_PKEY_RSA_ENC].privatekey); 2367 idx = SSL_PKEY_RSA_ENC;
2185 else
2186 return(NULL);
2187 } 2368 }
2188 else if ((alg_a & SSL_aECDSA) && 2369 else if ((alg_a & SSL_aECDSA) &&
2189 (c->pkeys[SSL_PKEY_ECC].privatekey != NULL)) 2370 (c->pkeys[SSL_PKEY_ECC].privatekey != NULL))
2190 return(c->pkeys[SSL_PKEY_ECC].privatekey); 2371 idx = SSL_PKEY_ECC;
2191 else /* if (alg_a & SSL_aNULL) */ 2372 if (idx == -1)
2192 { 2373 {
2193 SSLerr(SSL_F_SSL_GET_SIGN_PKEY,ERR_R_INTERNAL_ERROR); 2374 SSLerr(SSL_F_SSL_GET_SIGN_PKEY,ERR_R_INTERNAL_ERROR);
2194 return(NULL); 2375 return(NULL);
2195 } 2376 }
2377 if (pmd)
2378 *pmd = c->pkeys[idx].digest;
2379 return c->pkeys[idx].privatekey;
2196 } 2380 }
2197 2381
2198void ssl_update_cache(SSL *s,int mode) 2382void ssl_update_cache(SSL *s,int mode)
@@ -2417,6 +2601,10 @@ SSL_METHOD *ssl_bad_method(int ver)
2417 2601
2418const char *SSL_get_version(const SSL *s) 2602const char *SSL_get_version(const SSL *s)
2419 { 2603 {
2604 if (s->version == TLS1_2_VERSION)
2605 return("TLSv1.2");
2606 else if (s->version == TLS1_1_VERSION)
2607 return("TLSv1.1");
2420 if (s->version == TLS1_VERSION) 2608 if (s->version == TLS1_VERSION)
2421 return("TLSv1"); 2609 return("TLSv1");
2422 else if (s->version == SSL3_VERSION) 2610 else if (s->version == SSL3_VERSION)
@@ -2511,6 +2699,7 @@ SSL *SSL_dup(SSL *s)
2511 ret->in_handshake = s->in_handshake; 2699 ret->in_handshake = s->in_handshake;
2512 ret->handshake_func = s->handshake_func; 2700 ret->handshake_func = s->handshake_func;
2513 ret->server = s->server; 2701 ret->server = s->server;
2702 ret->renegotiate = s->renegotiate;
2514 ret->new_session = s->new_session; 2703 ret->new_session = s->new_session;
2515 ret->quiet_shutdown = s->quiet_shutdown; 2704 ret->quiet_shutdown = s->quiet_shutdown;
2516 ret->shutdown=s->shutdown; 2705 ret->shutdown=s->shutdown;
@@ -2776,6 +2965,11 @@ int SSL_state(const SSL *ssl)
2776 return(ssl->state); 2965 return(ssl->state);
2777 } 2966 }
2778 2967
2968void SSL_set_state(SSL *ssl, int state)
2969 {
2970 ssl->state = state;
2971 }
2972
2779void SSL_set_verify_result(SSL *ssl,long arg) 2973void SSL_set_verify_result(SSL *ssl,long arg)
2780 { 2974 {
2781 ssl->verify_result=arg; 2975 ssl->verify_result=arg;
@@ -3034,6 +3228,16 @@ void ssl_clear_hash_ctx(EVP_MD_CTX **hash)
3034 *hash=NULL; 3228 *hash=NULL;
3035} 3229}
3036 3230
3231void SSL_set_debug(SSL *s, int debug)
3232 {
3233 s->debug = debug;
3234 }
3235
3236int SSL_cache_hit(SSL *s)
3237 {
3238 return s->hit;
3239 }
3240
3037#if defined(_WINDLL) && defined(OPENSSL_SYS_WIN16) 3241#if defined(_WINDLL) && defined(OPENSSL_SYS_WIN16)
3038#include "../crypto/bio/bss_file.c" 3242#include "../crypto/bio/bss_file.c"
3039#endif 3243#endif
@@ -3042,4 +3246,3 @@ IMPLEMENT_STACK_OF(SSL_CIPHER)
3042IMPLEMENT_STACK_OF(SSL_COMP) 3246IMPLEMENT_STACK_OF(SSL_COMP)
3043IMPLEMENT_OBJ_BSEARCH_GLOBAL_CMP_FN(SSL_CIPHER, SSL_CIPHER, 3247IMPLEMENT_OBJ_BSEARCH_GLOBAL_CMP_FN(SSL_CIPHER, SSL_CIPHER,
3044 ssl_cipher_id); 3248 ssl_cipher_id);
3045