summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorjsing <>2014-06-01 01:57:09 +0000
committerjsing <>2014-06-01 01:57:09 +0000
commit310f4abbcfabc125e38e6ebdb3ae21ebdd980c60 (patch)
tree6755746863af204ffcaea080cb33ee6289e3c4ff /src/lib
parente951e06dd09f76940d341867de95774f4e9814b7 (diff)
downloadopenbsd-310f4abbcfabc125e38e6ebdb3ae21ebdd980c60.tar.gz
openbsd-310f4abbcfabc125e38e6ebdb3ae21ebdd980c60.tar.bz2
openbsd-310f4abbcfabc125e38e6ebdb3ae21ebdd980c60.zip
Clean up the tls1_change_cipher_state() key length handling and use a
single variable with a descriptive name, instead of two poorly named variables. Largely based on Adam Langley's chromium patches. ok miod@
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/libssl/src/ssl/t1_enc.c22
-rw-r--r--src/lib/libssl/t1_enc.c22
2 files changed, 24 insertions, 20 deletions
diff --git a/src/lib/libssl/src/ssl/t1_enc.c b/src/lib/libssl/src/ssl/t1_enc.c
index 96c28e14cf..9a2d979fd7 100644
--- a/src/lib/libssl/src/ssl/t1_enc.c
+++ b/src/lib/libssl/src/ssl/t1_enc.c
@@ -319,7 +319,7 @@ tls1_change_cipher_state(SSL *s, int which)
319 int *mac_secret_size; 319 int *mac_secret_size;
320 EVP_MD_CTX *mac_ctx; 320 EVP_MD_CTX *mac_ctx;
321 EVP_PKEY *mac_key; 321 EVP_PKEY *mac_key;
322 int is_export, n, i, j, k, exp_label_len, cl; 322 int is_export, n, i, k, exp_label_len, key_len;
323 int reuse_dd = 0; 323 int reuse_dd = 0;
324 char is_read; 324 char is_read;
325 325
@@ -434,11 +434,13 @@ tls1_change_cipher_state(SSL *s, int which)
434 p = s->s3->tmp.key_block; 434 p = s->s3->tmp.key_block;
435 i = *mac_secret_size = s->s3->tmp.new_mac_secret_size; 435 i = *mac_secret_size = s->s3->tmp.new_mac_secret_size;
436 436
437 cl = EVP_CIPHER_key_length(c); 437 key_len = EVP_CIPHER_key_length(c);
438 j = is_export ? (cl < SSL_C_EXPORT_KEYLENGTH(s->s3->tmp.new_cipher) ? 438 if (is_export) {
439 cl : SSL_C_EXPORT_KEYLENGTH(s->s3->tmp.new_cipher)) : cl; 439 if (key_len > SSL_C_EXPORT_KEYLENGTH(s->s3->tmp.new_cipher))
440 /* Was j=(exp)?5:EVP_CIPHER_key_length(c); */ 440 key_len = SSL_C_EXPORT_KEYLENGTH(s->s3->tmp.new_cipher);
441 /* If GCM mode only part of IV comes from PRF */ 441 }
442
443 /* If GCM mode only part of IV comes from PRF. */
442 if (EVP_CIPHER_mode(c) == EVP_CIPH_GCM_MODE) 444 if (EVP_CIPHER_mode(c) == EVP_CIPH_GCM_MODE)
443 k = EVP_GCM_TLS_FIXED_IV_LEN; 445 k = EVP_GCM_TLS_FIXED_IV_LEN;
444 else 446 else
@@ -448,7 +450,7 @@ tls1_change_cipher_state(SSL *s, int which)
448 ms = &(p[0]); 450 ms = &(p[0]);
449 n = i + i; 451 n = i + i;
450 key = &(p[n]); 452 key = &(p[n]);
451 n += j + j; 453 n += key_len + key_len;
452 iv = &(p[n]); 454 iv = &(p[n]);
453 n += k + k; 455 n += k + k;
454 exp_label = (unsigned char *)TLS_MD_CLIENT_WRITE_KEY_CONST; 456 exp_label = (unsigned char *)TLS_MD_CLIENT_WRITE_KEY_CONST;
@@ -457,9 +459,9 @@ tls1_change_cipher_state(SSL *s, int which)
457 } else { 459 } else {
458 n = i; 460 n = i;
459 ms = &(p[n]); 461 ms = &(p[n]);
460 n += i + j; 462 n += i + key_len;
461 key = &(p[n]); 463 key = &(p[n]);
462 n += j + k; 464 n += key_len + k;
463 iv = &(p[n]); 465 iv = &(p[n]);
464 n += k; 466 n += k;
465 exp_label = (unsigned char *)TLS_MD_SERVER_WRITE_KEY_CONST; 467 exp_label = (unsigned char *)TLS_MD_SERVER_WRITE_KEY_CONST;
@@ -488,7 +490,7 @@ tls1_change_cipher_state(SSL *s, int which)
488 exp_label, exp_label_len, 490 exp_label, exp_label_len,
489 s->s3->client_random, SSL3_RANDOM_SIZE, 491 s->s3->client_random, SSL3_RANDOM_SIZE,
490 s->s3->server_random, SSL3_RANDOM_SIZE, 492 s->s3->server_random, SSL3_RANDOM_SIZE,
491 NULL, 0, NULL, 0, key, j, tmp1, tmp2, 493 NULL, 0, NULL, 0, key, key_len, tmp1, tmp2,
492 EVP_CIPHER_key_length(c))) 494 EVP_CIPHER_key_length(c)))
493 goto err2; 495 goto err2;
494 key = tmp1; 496 key = tmp1;
diff --git a/src/lib/libssl/t1_enc.c b/src/lib/libssl/t1_enc.c
index 96c28e14cf..9a2d979fd7 100644
--- a/src/lib/libssl/t1_enc.c
+++ b/src/lib/libssl/t1_enc.c
@@ -319,7 +319,7 @@ tls1_change_cipher_state(SSL *s, int which)
319 int *mac_secret_size; 319 int *mac_secret_size;
320 EVP_MD_CTX *mac_ctx; 320 EVP_MD_CTX *mac_ctx;
321 EVP_PKEY *mac_key; 321 EVP_PKEY *mac_key;
322 int is_export, n, i, j, k, exp_label_len, cl; 322 int is_export, n, i, k, exp_label_len, key_len;
323 int reuse_dd = 0; 323 int reuse_dd = 0;
324 char is_read; 324 char is_read;
325 325
@@ -434,11 +434,13 @@ tls1_change_cipher_state(SSL *s, int which)
434 p = s->s3->tmp.key_block; 434 p = s->s3->tmp.key_block;
435 i = *mac_secret_size = s->s3->tmp.new_mac_secret_size; 435 i = *mac_secret_size = s->s3->tmp.new_mac_secret_size;
436 436
437 cl = EVP_CIPHER_key_length(c); 437 key_len = EVP_CIPHER_key_length(c);
438 j = is_export ? (cl < SSL_C_EXPORT_KEYLENGTH(s->s3->tmp.new_cipher) ? 438 if (is_export) {
439 cl : SSL_C_EXPORT_KEYLENGTH(s->s3->tmp.new_cipher)) : cl; 439 if (key_len > SSL_C_EXPORT_KEYLENGTH(s->s3->tmp.new_cipher))
440 /* Was j=(exp)?5:EVP_CIPHER_key_length(c); */ 440 key_len = SSL_C_EXPORT_KEYLENGTH(s->s3->tmp.new_cipher);
441 /* If GCM mode only part of IV comes from PRF */ 441 }
442
443 /* If GCM mode only part of IV comes from PRF. */
442 if (EVP_CIPHER_mode(c) == EVP_CIPH_GCM_MODE) 444 if (EVP_CIPHER_mode(c) == EVP_CIPH_GCM_MODE)
443 k = EVP_GCM_TLS_FIXED_IV_LEN; 445 k = EVP_GCM_TLS_FIXED_IV_LEN;
444 else 446 else
@@ -448,7 +450,7 @@ tls1_change_cipher_state(SSL *s, int which)
448 ms = &(p[0]); 450 ms = &(p[0]);
449 n = i + i; 451 n = i + i;
450 key = &(p[n]); 452 key = &(p[n]);
451 n += j + j; 453 n += key_len + key_len;
452 iv = &(p[n]); 454 iv = &(p[n]);
453 n += k + k; 455 n += k + k;
454 exp_label = (unsigned char *)TLS_MD_CLIENT_WRITE_KEY_CONST; 456 exp_label = (unsigned char *)TLS_MD_CLIENT_WRITE_KEY_CONST;
@@ -457,9 +459,9 @@ tls1_change_cipher_state(SSL *s, int which)
457 } else { 459 } else {
458 n = i; 460 n = i;
459 ms = &(p[n]); 461 ms = &(p[n]);
460 n += i + j; 462 n += i + key_len;
461 key = &(p[n]); 463 key = &(p[n]);
462 n += j + k; 464 n += key_len + k;
463 iv = &(p[n]); 465 iv = &(p[n]);
464 n += k; 466 n += k;
465 exp_label = (unsigned char *)TLS_MD_SERVER_WRITE_KEY_CONST; 467 exp_label = (unsigned char *)TLS_MD_SERVER_WRITE_KEY_CONST;
@@ -488,7 +490,7 @@ tls1_change_cipher_state(SSL *s, int which)
488 exp_label, exp_label_len, 490 exp_label, exp_label_len,
489 s->s3->client_random, SSL3_RANDOM_SIZE, 491 s->s3->client_random, SSL3_RANDOM_SIZE,
490 s->s3->server_random, SSL3_RANDOM_SIZE, 492 s->s3->server_random, SSL3_RANDOM_SIZE,
491 NULL, 0, NULL, 0, key, j, tmp1, tmp2, 493 NULL, 0, NULL, 0, key, key_len, tmp1, tmp2,
492 EVP_CIPHER_key_length(c))) 494 EVP_CIPHER_key_length(c)))
493 goto err2; 495 goto err2;
494 key = tmp1; 496 key = tmp1;