Make CTR mode behaviour consistent with other modes:

clear ctx->num in EVP_CipherInit_ex

Submitted by: Emilia Kasper
This commit is contained in:
Bodo Möller
2011-10-13 13:42:29 +00:00
parent 79571bb1ca
commit 93ff4c69f7
2 changed files with 2 additions and 1 deletions

View File

@@ -419,7 +419,7 @@ struct evp_cipher_ctx_st
unsigned char oiv[EVP_MAX_IV_LENGTH]; /* original iv */ unsigned char oiv[EVP_MAX_IV_LENGTH]; /* original iv */
unsigned char iv[EVP_MAX_IV_LENGTH]; /* working iv */ unsigned char iv[EVP_MAX_IV_LENGTH]; /* working iv */
unsigned char buf[EVP_MAX_BLOCK_LENGTH];/* saved partial block */ 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 */ void *app_data; /* application stuff */
int key_len; /* May change for variable length cipher */ int key_len; /* May change for variable length cipher */

View File

@@ -232,6 +232,7 @@ skip_to_init:
break; break;
case EVP_CIPH_CTR_MODE: case EVP_CIPH_CTR_MODE:
ctx->num = 0;
/* Don't reuse IV for CTR mode */ /* Don't reuse IV for CTR mode */
if(iv) if(iv)
memcpy(ctx->iv, iv, EVP_CIPHER_CTX_iv_length(ctx)); memcpy(ctx->iv, iv, EVP_CIPHER_CTX_iv_length(ctx));