octet y; \
unsigned i; \
\
- /* --- Empty blocks are trivial --- */ \
+ /* --- Empty blocks are trivial, and ECB is stateless --- */ \
\
- if (!sz) return; \
+ if (!sz || !d) return; \
\
/* --- Short blocks aren't allowed in ECB --- * \
* \
if (!s) BLKC_ZERO(PRE, t); \
else { BLKC_LOAD(PRE, t, s); s += PRE##_BLKSZ; } \
pre##_eblk(&ctx->ctx, t, t); \
- if (d) { BLKC_STORE(PRE, d, t); d += PRE##_BLKSZ; } \
+ BLKC_STORE(PRE, d, t); d += PRE##_BLKSZ; \
sz -= PRE##_BLKSZ; \
} \
\
* ciphertext block. \
*/ \
\
- if (d) d += PRE##_BLKSZ; \
- for (i = 0; i < sz; i++) { y = b[i]; b[i] = s[i]; if (d) d[i] = y; } \
+ d += PRE##_BLKSZ; \
+ for (i = 0; i < sz; i++) { y = b[i]; b[i] = s[i]; d[i] = y; } \
BLKC_LOAD(PRE, t, b); \
pre##_eblk(&ctx->ctx, t, t); \
- if (d) BLKC_STORE(PRE, d - PRE##_BLKSZ, t); \
+ BLKC_STORE(PRE, d - PRE##_BLKSZ, t); \
} \
\
/* --- Done --- */ \