summaryrefslogtreecommitdiffstats
path: root/ssl/s3_pkt.c
diff options
context:
space:
mode:
authorDr. Stephen Henson <steve@openssl.org>2011-08-04 11:13:28 +0000
committerDr. Stephen Henson <steve@openssl.org>2011-08-04 11:13:28 +0000
commitaed53d6c5a8f7c823ab3363d7300892773a5f430 (patch)
tree7e3397e6c6fcbeff9dfda6895ace135447d10649 /ssl/s3_pkt.c
parent61cdb9f36ad849f139932fc23c9eb4defc583521 (diff)
Backport GCM support from HEAD.
Diffstat (limited to 'ssl/s3_pkt.c')
-rw-r--r--ssl/s3_pkt.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/ssl/s3_pkt.c b/ssl/s3_pkt.c
index 46304766a4..63536754ce 100644
--- a/ssl/s3_pkt.c
+++ b/ssl/s3_pkt.c
@@ -742,12 +742,18 @@ static int do_ssl3_write(SSL *s, int type, const unsigned char *buf,
plen=p;
p+=2;
/* Explicit IV length, block ciphers and TLS version 1.1 or later */
- if (s->enc_write_ctx && s->version >= TLS1_1_VERSION
- && EVP_CIPHER_CTX_mode(s->enc_write_ctx) == EVP_CIPH_CBC_MODE)
+ if (s->enc_write_ctx && s->version >= TLS1_1_VERSION)
{
- eivlen = EVP_CIPHER_CTX_iv_length(s->enc_write_ctx);
- if (eivlen <= 1)
- eivlen = 0;
+ int mode = EVP_CIPHER_CTX_mode(s->enc_write_ctx);
+ if (mode == EVP_CIPH_CBC_MODE)
+ {
+ eivlen = EVP_CIPHER_CTX_iv_length(s->enc_write_ctx);
+ if (eivlen <= 1)
+ eivlen = 0;
+ }
+ /* Need explicit part of IV for GCM mode */
+ else if (mode == EVP_CIPH_GCM_MODE)
+ eivlen = EVP_GCM_TLS_EXPLICIT_IV_LEN;
}
else
eivlen = 0;