Fix for a bug which meant encrypting BIOs sometimes wouldn't read the final
block.
This commit is contained in:
parent
13066cee60
commit
7b65c3298f
7
CHANGES
7
CHANGES
@ -4,6 +4,13 @@
|
||||
|
||||
Changes between 0.9.4 and 0.9.5 [xx XXX 1999]
|
||||
|
||||
*) Fix a horrible bug in enc_read() in crypto/evp/bio_enc.c: if the first data
|
||||
read consists of only the final block it would not decrypted because
|
||||
EVP_CipherUpdate() would correctly report zero bytes had been decrypted.
|
||||
A misplaced 'break' also meant the decrypted final block might not be
|
||||
copied until the next read.
|
||||
[Steve Henson]
|
||||
|
||||
*) Initial support for DH_METHOD. Again based on RSA_METHOD. Also added
|
||||
a few extra parameters to the DH structure: these will be useful if
|
||||
for example we want the value of 'q' or implement X9.42 DH.
|
||||
|
@ -184,9 +184,11 @@ static int enc_read(BIO *b, char *out, int outl)
|
||||
ctx->ok=i;
|
||||
ctx->buf_off=0;
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
ret=(ret == 0)?i:ret;
|
||||
break;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -194,13 +196,19 @@ static int enc_read(BIO *b, char *out, int outl)
|
||||
(unsigned char *)ctx->buf,&ctx->buf_len,
|
||||
(unsigned char *)&(ctx->buf[8]),i);
|
||||
ctx->cont=1;
|
||||
/* Note: it is possible for EVP_CipherUpdate to
|
||||
* decrypt zero bytes because this is or looks like
|
||||
* the final block: if this happens we should retry
|
||||
* and either read more data or decrypt the final
|
||||
* block
|
||||
*/
|
||||
if(ctx->buf_len == 0) continue;
|
||||
}
|
||||
|
||||
if (ctx->buf_len <= outl)
|
||||
i=ctx->buf_len;
|
||||
else
|
||||
i=outl;
|
||||
|
||||
if (i <= 0) break;
|
||||
memcpy(out,ctx->buf,i);
|
||||
ret+=i;
|
||||
|
Loading…
Reference in New Issue
Block a user