- pre##_ctx c = k->k; /* Not quick! */ \
- size_t n; \
- \
- STORE32(k->buf, k->c); \
- k->c++; \
- pre##_hash(&c, k->buf, 4); \
- pre##_done(&c, k->buf); \
- n = sz > PRE##_HASHSZ ? PRE##_HASHSZ : sz; \
- k->bsz = PRE##_HASHSZ - n; \
- sz -= n; \
- if (dd) { \
- const octet *p = k->buf; \
- if (!ss) { \
- memcpy(dd, p, n); \
- dd += n; \
- } else { \
- while (n) { \
- *dd++ = *ss++ ^ *p++; \
- n--; \
- } \
- } \
- } \
+ STORE32(k->b, k->c); k->c++; \
+ h = k->k; pre##_hash(&h, k->b, 4); pre##_done(&h, k->b); \
+ off = sz > PRE##_HASHSZ ? PRE##_HASHSZ : sz; \
+ k->off = PRE##_HASHSZ - off; \
+ sz -= off; \
+ p = k->b; \
+ if (!dd) /* do nothing */; \
+ else if (!ss) { memcpy(dd, p, off); dd += off; } \
+ else while (off--) *dd++ = *ss++ ^ *p++; \