From: Bodo Möller Date: Thu, 13 Oct 2011 13:41:34 +0000 (+0000) Subject: Make CTR mode behaviour consistent with other modes: X-Git-Tag: OpenSSL-fips-2_0-rc1~67 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=bf6d2f986d47fa7f96ab9ede407bc3976a686b0f;p=oweals%2Fopenssl.git Make CTR mode behaviour consistent with other modes: - clear ctx->num in EVP_CipherInit_ex - adapt e_eas.c changes from http://cvs.openssl.org/chngview?cn=19816 for eng_aesni.c Submitted by: Emilia Kasper --- diff --git a/crypto/engine/eng_aesni.c b/crypto/engine/eng_aesni.c index 327a49c53e..1ea65e3f8f 100644 --- a/crypto/engine/eng_aesni.c +++ b/crypto/engine/eng_aesni.c @@ -301,16 +301,6 @@ aesni_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *user_key, return 0; } - if (ctx->cipher->flags&EVP_CIPH_CUSTOM_IV) - { - if (iv!=NULL) - memcpy (ctx->iv,iv,ctx->cipher->iv_len); - else { - EVPerr(EVP_F_AESNI_INIT_KEY,EVP_R_AES_IV_SETUP_FAILED); - return 0; - } - } - return 1; } @@ -413,7 +403,7 @@ static int aesni_counter(EVP_CIPHER_CTX *ctx, unsigned char *out, static const EVP_CIPHER aesni_128_ctr= { NID_aes_128_ctr,1,16,16, - EVP_CIPH_CUSTOM_IV, + EVP_CIPH_CTR_MODE, aesni_init_key, aesni_counter, NULL, @@ -427,7 +417,7 @@ static const EVP_CIPHER aesni_128_ctr= static const EVP_CIPHER aesni_192_ctr= { NID_aes_192_ctr,1,24,16, - EVP_CIPH_CUSTOM_IV, + EVP_CIPH_CTR_MODE, aesni_init_key, aesni_counter, NULL, @@ -441,7 +431,7 @@ static const EVP_CIPHER aesni_192_ctr= static const EVP_CIPHER aesni_256_ctr= { NID_aes_256_ctr,1,32,16, - EVP_CIPH_CUSTOM_IV, + EVP_CIPH_CTR_MODE, aesni_init_key, aesni_counter, NULL, diff --git a/crypto/evp/evp.h b/crypto/evp/evp.h index 2557ad3ab7..3b38ecd6e6 100644 --- a/crypto/evp/evp.h +++ b/crypto/evp/evp.h @@ -418,7 +418,7 @@ struct evp_cipher_ctx_st unsigned char oiv[EVP_MAX_IV_LENGTH]; /* original iv */ unsigned char iv[EVP_MAX_IV_LENGTH]; /* working iv */ unsigned char buf[EVP_MAX_BLOCK_LENGTH];/* saved partial block */ - int num; /* used by cfb/ofb mode */ + int num; /* used by cfb/ofb/ctr mode */ void *app_data; /* application stuff */ int key_len; /* May change for variable length cipher */ diff --git a/crypto/evp/evp_enc.c b/crypto/evp/evp_enc.c index 87af9c4931..8d57d204d6 100644 --- a/crypto/evp/evp_enc.c +++ b/crypto/evp/evp_enc.c @@ -215,6 +215,7 @@ skip_to_init: break; case EVP_CIPH_CTR_MODE: + ctx->num = 0; /* Don't reuse IV for CTR mode */ if(iv) memcpy(ctx->iv, iv, EVP_CIPHER_CTX_iv_length(ctx));