forked from openssl/openssl
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Reorganize the data used for SSL ciphersuite pattern matching.
This change resolves a number of problems and obviates multiple kludges. A new feature is that you can now say "AES256" or "AES128" (not just "AES", which enables both). In some cases the ciphersuite list generated from a given string is affected by this change. I hope this is just in those cases where the previous behaviour did not make sense.
- Loading branch information
Showing
18 changed files
with
1,838 additions
and
1,368 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -4,7 +4,7 @@ | |
* ([email protected]) for the OpenSSL project 2005. | ||
*/ | ||
/* ==================================================================== | ||
* Copyright (c) 1999-2005 The OpenSSL Project. All rights reserved. | ||
* Copyright (c) 1999-2007 The OpenSSL Project. All rights reserved. | ||
* | ||
* Redistribution and use in source and binary forms, with or without | ||
* modification, are permitted provided that the following conditions | ||
|
@@ -274,7 +274,7 @@ int dtls1_connect(SSL *s) | |
case SSL3_ST_CR_CERT_A: | ||
case SSL3_ST_CR_CERT_B: | ||
/* Check if it is anon DH */ | ||
if (!(s->s3->tmp.new_cipher->algorithms & SSL_aNULL)) | ||
if (!(s->s3->tmp.new_cipher->algorithm_auth & SSL_aNULL)) | ||
{ | ||
ret=ssl3_get_server_certificate(s); | ||
if (ret <= 0) goto end; | ||
|
@@ -335,7 +335,6 @@ int dtls1_connect(SSL *s) | |
case SSL3_ST_CW_KEY_EXCH_B: | ||
ret=dtls1_send_client_key_exchange(s); | ||
if (ret <= 0) goto end; | ||
l=s->s3->tmp.new_cipher->algorithms; | ||
/* EAY EAY EAY need to check for DH fix cert | ||
* sent back */ | ||
/* For TLS, cert_req is set to 2, so a cert chain | ||
|
@@ -684,7 +683,7 @@ int dtls1_send_client_key_exchange(SSL *s) | |
{ | ||
unsigned char *p,*d; | ||
int n; | ||
unsigned long l; | ||
unsigned long alg_k; | ||
#ifndef OPENSSL_NO_RSA | ||
unsigned char *q; | ||
EVP_PKEY *pkey=NULL; | ||
|
@@ -697,13 +696,13 @@ int dtls1_send_client_key_exchange(SSL *s) | |
{ | ||
d=(unsigned char *)s->init_buf->data; | ||
p= &(d[DTLS1_HM_HEADER_LENGTH]); | ||
|
||
l=s->s3->tmp.new_cipher->algorithms; | ||
alg_k=s->s3->tmp.new_cipher->algorithm_mkey; | ||
|
||
/* Fool emacs indentation */ | ||
if (0) {} | ||
#ifndef OPENSSL_NO_RSA | ||
else if (l & SSL_kRSA) | ||
else if (alg_k & SSL_kRSA) | ||
{ | ||
RSA *rsa; | ||
unsigned char tmp_buf[SSL_MAX_MASTER_KEY_LENGTH]; | ||
|
@@ -762,7 +761,7 @@ int dtls1_send_client_key_exchange(SSL *s) | |
} | ||
#endif | ||
#ifndef OPENSSL_NO_KRB5 | ||
else if (l & SSL_kKRB5) | ||
else if (alg_k & SSL_kKRB5) | ||
{ | ||
krb5_error_code krb5rc; | ||
KSSL_CTX *kssl_ctx = s->kssl_ctx; | ||
|
@@ -781,7 +780,7 @@ int dtls1_send_client_key_exchange(SSL *s) | |
|
||
#ifdef KSSL_DEBUG | ||
printf("ssl3_send_client_key_exchange(%lx & %lx)\n", | ||
l, SSL_kKRB5); | ||
alg_k, SSL_kKRB5); | ||
#endif /* KSSL_DEBUG */ | ||
|
||
authp = NULL; | ||
|
@@ -894,7 +893,7 @@ int dtls1_send_client_key_exchange(SSL *s) | |
} | ||
#endif | ||
#ifndef OPENSSL_NO_DH | ||
else if (l & (SSL_kEDH|SSL_kDHr|SSL_kDHd)) | ||
else if (alg_k & (SSL_kEDH|SSL_kDHr|SSL_kDHd)) | ||
{ | ||
DH *dh_srvr,*dh_clnt; | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -4,7 +4,7 @@ | |
* ([email protected]) for the OpenSSL project 2005. | ||
*/ | ||
/* ==================================================================== | ||
* Copyright (c) 1999-2005 The OpenSSL Project. All rights reserved. | ||
* Copyright (c) 1999-2007 The OpenSSL Project. All rights reserved. | ||
* | ||
* Redistribution and use in source and binary forms, with or without | ||
* modification, are permitted provided that the following conditions | ||
|
@@ -148,6 +148,7 @@ int dtls1_accept(SSL *s) | |
unsigned long l,Time=(unsigned long)time(NULL); | ||
void (*cb)(const SSL *ssl,int type,int val)=NULL; | ||
long num1; | ||
unsigned long alg_k; | ||
int ret= -1; | ||
int new_state,state,skip=0; | ||
|
||
|
@@ -237,11 +238,11 @@ int dtls1_accept(SSL *s) | |
s->state=SSL3_ST_SW_HELLO_REQ_A; | ||
} | ||
|
||
if ( (SSL_get_options(s) & SSL_OP_COOKIE_EXCHANGE)) | ||
s->d1->send_cookie = 1; | ||
else | ||
s->d1->send_cookie = 0; | ||
|
||
if ( (SSL_get_options(s) & SSL_OP_COOKIE_EXCHANGE)) | ||
s->d1->send_cookie = 1; | ||
else | ||
s->d1->send_cookie = 0; | ||
break; | ||
|
||
case SSL3_ST_SW_HELLO_REQ_A: | ||
|
@@ -270,7 +271,7 @@ int dtls1_accept(SSL *s) | |
if (ret <= 0) goto end; | ||
s->new_session = 2; | ||
|
||
if ( s->d1->send_cookie) | ||
if (s->d1->send_cookie) | ||
s->state = DTLS1_ST_SW_HELLO_VERIFY_REQUEST_A; | ||
else | ||
s->state = SSL3_ST_SW_SRVR_HELLO_A; | ||
|
@@ -303,7 +304,7 @@ int dtls1_accept(SSL *s) | |
case SSL3_ST_SW_CERT_A: | ||
case SSL3_ST_SW_CERT_B: | ||
/* Check if it is anon DH */ | ||
if (!(s->s3->tmp.new_cipher->algorithms & SSL_aNULL)) | ||
if (!(s->s3->tmp.new_cipher->algorithm_auth & SSL_aNULL)) | ||
{ | ||
ret=dtls1_send_server_certificate(s); | ||
if (ret <= 0) goto end; | ||
|
@@ -316,13 +317,13 @@ int dtls1_accept(SSL *s) | |
|
||
case SSL3_ST_SW_KEY_EXCH_A: | ||
case SSL3_ST_SW_KEY_EXCH_B: | ||
l=s->s3->tmp.new_cipher->algorithms; | ||
alg_k = s->s3->tmp.new_cipher->algorithm_mkey; | ||
|
||
/* clear this, it may get reset by | ||
* send_server_key_exchange */ | ||
if ((s->options & SSL_OP_EPHEMERAL_RSA) | ||
#ifndef OPENSSL_NO_KRB5 | ||
&& !(l & SSL_KRB5) | ||
&& !(alg_k & SSL_kKRB5) | ||
#endif /* OPENSSL_NO_KRB5 */ | ||
) | ||
/* option SSL_OP_EPHEMERAL_RSA sends temporary RSA key | ||
|
@@ -336,8 +337,8 @@ int dtls1_accept(SSL *s) | |
/* only send if a DH key exchange or | ||
* RSA but we have a sign only certificate */ | ||
if (s->s3->tmp.use_rsa_tmp | ||
|| (l & SSL_DH) | ||
|| ((l & SSL_kRSA) | ||
|| (alg_k & (SSL_kEDH|SSL_kDHr|SSL_kDHd)) | ||
|| ((alg_k & SSL_kRSA) | ||
&& (s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL | ||
|| (SSL_C_IS_EXPORT(s->s3->tmp.new_cipher) | ||
&& EVP_PKEY_size(s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey)*8 > SSL_C_EXPORT_PKEYLENGTH(s->s3->tmp.new_cipher) | ||
|
@@ -367,12 +368,12 @@ int dtls1_accept(SSL *s) | |
/* never request cert in anonymous ciphersuites | ||
* (see section "Certificate request" in SSL 3 drafts | ||
* and in RFC 2246): */ | ||
((s->s3->tmp.new_cipher->algorithms & SSL_aNULL) && | ||
((s->s3->tmp.new_cipher->algorithm_auth & SSL_aNULL) && | ||
/* ... except when the application insists on verification | ||
* (against the specs, but s3_clnt.c accepts this for SSL 3) */ | ||
!(s->verify_mode & SSL_VERIFY_FAIL_IF_NO_PEER_CERT)) || | ||
/* never request cert in Kerberos ciphersuites */ | ||
(s->s3->tmp.new_cipher->algorithms & SSL_aKRB5)) | ||
/* never request cert in Kerberos ciphersuites */ | ||
(s->s3->tmp.new_cipher->algorithm_auth & SSL_aKRB5)) | ||
{ | ||
/* no cert request */ | ||
skip=1; | ||
|
@@ -625,15 +626,15 @@ int dtls1_send_hello_verify_request(SSL *s) | |
*(p++) = s->version & 0xFF; | ||
|
||
*(p++) = (unsigned char) s->d1->cookie_len; | ||
if ( s->ctx->app_gen_cookie_cb != NULL && | ||
s->ctx->app_gen_cookie_cb(s, s->d1->cookie, | ||
&(s->d1->cookie_len)) == 0) | ||
{ | ||
SSLerr(SSL_F_DTLS1_SEND_HELLO_VERIFY_REQUEST,ERR_R_INTERNAL_ERROR); | ||
return 0; | ||
} | ||
/* else the cookie is assumed to have | ||
* been initialized by the application */ | ||
if (s->ctx->app_gen_cookie_cb != NULL && | ||
s->ctx->app_gen_cookie_cb(s, s->d1->cookie, | ||
&(s->d1->cookie_len)) == 0) | ||
{ | ||
SSLerr(SSL_F_DTLS1_SEND_HELLO_VERIFY_REQUEST,ERR_R_INTERNAL_ERROR); | ||
return 0; | ||
} | ||
/* else the cookie is assumed to have | ||
* been initialized by the application */ | ||
|
||
memcpy(p, s->d1->cookie, s->d1->cookie_len); | ||
p += s->d1->cookie_len; | ||
|
@@ -784,7 +785,7 @@ int dtls1_send_server_key_exchange(SSL *s) | |
EVP_MD_CTX_init(&md_ctx); | ||
if (s->state == SSL3_ST_SW_KEY_EXCH_A) | ||
{ | ||
type=s->s3->tmp.new_cipher->algorithms & SSL_MKEY_MASK; | ||
type=s->s3->tmp.new_cipher->algorithm_mkey; | ||
cert=s->cert; | ||
|
||
buf=s->init_buf; | ||
|
@@ -889,7 +890,7 @@ int dtls1_send_server_key_exchange(SSL *s) | |
n+=2+nr[i]; | ||
} | ||
|
||
if (!(s->s3->tmp.new_cipher->algorithms & SSL_aNULL)) | ||
if (!(s->s3->tmp.new_cipher->algorithm_auth & SSL_aNULL)) | ||
{ | ||
if ((pkey=ssl_get_sign_pkey(s,s->s3->tmp.new_cipher)) | ||
== NULL) | ||
|
@@ -1107,14 +1108,15 @@ int dtls1_send_server_certificate(SSL *s) | |
if (s->state == SSL3_ST_SW_CERT_A) | ||
{ | ||
x=ssl_get_server_send_cert(s); | ||
if (x == NULL && | ||
/* VRS: allow null cert if auth == KRB5 */ | ||
(s->s3->tmp.new_cipher->algorithms | ||
& (SSL_MKEY_MASK|SSL_AUTH_MASK)) | ||
!= (SSL_aKRB5|SSL_kKRB5)) | ||
if (x == NULL) | ||
{ | ||
SSLerr(SSL_F_DTLS1_SEND_SERVER_CERTIFICATE,ERR_R_INTERNAL_ERROR); | ||
return(0); | ||
/* VRS: allow null cert if auth == KRB5 */ | ||
if ((s->s3->tmp.new_cipher->algorithm_mkey != SSL_kKRB5) || | ||
(s->s3->tmp.new_cipher->algorithm_auth != SSL_aKRB5)) | ||
{ | ||
SSLerr(SSL_F_DTLS1_SEND_SERVER_CERTIFICATE,ERR_R_INTERNAL_ERROR); | ||
return(0); | ||
} | ||
} | ||
|
||
l=dtls1_output_cert_chain(s,x); | ||
|
Oops, something went wrong.