{ \
const octet *s = src; \
octet *d = dest; \
- octet b[PRE##_BLKSZ]; \
+ octet b[PRE##_BLKSZ], bb[PRE##_BLKSZ]; \
octet y; \
unsigned i; \
\
if (sz < PRE##_BLKSZ) { \
pre##_eblk(&ctx->ctx, ctx->a, ctx->a); \
BLKC_STORE(PRE, b, ctx->a); \
- if (d) { for (i = 0; i < sz; i++) d[i] = b[i] ^ (s ? s[i] : 0); } \
+ if (!d) d = bb; \
+ for (i = 0; i < sz; i++) d[i] = b[i] ^ (s ? s[i] : 0); \
memmove(b, b + sz, PRE##_BLKSZ - sz); \
memcpy(b + PRE##_BLKSZ - sz, d, sz); \
BLKC_LOAD(PRE, ctx->a, b); \