From f329b8d73b52c7abd95eb4813f902bd85589c67b Mon Sep 17 00:00:00 2001 From: "Dr. Stephen Henson" Date: Tue, 2 Oct 2001 16:19:49 +0000 Subject: [PATCH] Make EVP_DecryptUpdate work again. --- crypto/evp/evp_enc.c | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/crypto/evp/evp_enc.c b/crypto/evp/evp_enc.c index ff7f7705a4..3fbe5c6527 100644 --- a/crypto/evp/evp_enc.c +++ b/crypto/evp/evp_enc.c @@ -302,7 +302,7 @@ int EVP_EncryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl) int EVP_DecryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl, const unsigned char *in, int inl) { - int b; + int b, fix_len; if (inl == 0) { @@ -314,12 +314,17 @@ int EVP_DecryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl, return EVP_EncryptUpdate(ctx, out, outl, in, inl); b=ctx->cipher->block_size; + if(ctx->final_used) { memcpy(out,ctx->final,b); out+=b; + fix_len = 1; } - + else + fix_len = 0; + + if(!EVP_EncryptUpdate(ctx,out,outl,in,inl)) return 0; @@ -327,18 +332,16 @@ int EVP_DecryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl, * we have a copy of this last block */ if (b > 1 && !ctx->buf_len) { - if(!ctx->final_used) - { - *outl-=b; - ctx->final_used=1; - } + *outl-=b; + ctx->final_used=1; memcpy(ctx->final,&out[*outl],b); } - else if(ctx->final_used) - { - ctx->final_used=0; - *outl+=b; - } + else + ctx->final_used = 0; + + if (fix_len) + *outl += b; + return 1; } -- GitLab