提交 7b65c329 编写于 作者: D Dr. Stephen Henson

Fix for a bug which meant encrypting BIOs sometimes wouldn't read the final

block.
上级 13066cee
...@@ -4,6 +4,13 @@ ...@@ -4,6 +4,13 @@
Changes between 0.9.4 and 0.9.5 [xx XXX 1999] 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 *) 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 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. 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) ...@@ -184,9 +184,11 @@ static int enc_read(BIO *b, char *out, int outl)
ctx->ok=i; ctx->ok=i;
ctx->buf_off=0; ctx->buf_off=0;
} }
else else
{
ret=(ret == 0)?i:ret; ret=(ret == 0)?i:ret;
break; break;
}
} }
else else
{ {
...@@ -194,13 +196,19 @@ static int enc_read(BIO *b, char *out, int outl) ...@@ -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,&ctx->buf_len,
(unsigned char *)&(ctx->buf[8]),i); (unsigned char *)&(ctx->buf[8]),i);
ctx->cont=1; 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) if (ctx->buf_len <= outl)
i=ctx->buf_len; i=ctx->buf_len;
else else
i=outl; i=outl;
if (i <= 0) break; if (i <= 0) break;
memcpy(out,ctx->buf,i); memcpy(out,ctx->buf,i);
ret+=i; ret+=i;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册