Hi, I'd like to request more opinions on https://github.com/openssl/openssl/pull/5427. Key dispute question is whether or not following fragment should work
unsigned char *inp = buf, *out = buf; for (i = 0; i < sizeof(buf); i++) { EVP_EncryptUpdate(ctx, out, &outl, inp++, 1); out += outl; } [Just in case, corresponding corner case is effectively exercised in evp_test.] Bernd argues that this is unreasonable, which I counter with assertion that it doesn't matter how unreasonable this snippet is, because since we support in-place processing, it's reasonable to expect stream-cipher-like semantic as above to work even with block ciphers. As it stands now, suggested modified code would accept in-place calls only on block boundaries. Collateral question also is whether or not it would be appropriate to make this kind of change in minor release. Just in case, to give a bit of more general background. Benrd has shown that current checks are not sufficient to catch all corner cases of partially overlapping buffers. It was discussed that partially overlapping is not same as fully overlapping, a.k.a. in-place processing, with latter being in fact supported. And even though above snippet can be formally viewed as a stretch, it's argued that it does exhibit "legitimate intention" that deserves to be recognized and supported. At least it was so far, in sense that it's not exactly a coincidence that it currently works. [The fact that other corner cases are not recognized as invalid is of course a bug, but there is no contradiction, as fixing the bug doesn't have to mean that specific corner case is no longer recognized.] Thanks in advance. _______________________________________________ openssl-project mailing list openssl-project@openssl.org https://mta.openssl.org/mailman/listinfo/openssl-project