X-Git-Url: https://git.distorted.org.uk/~mdw/catacomb/blobdiff_plain/0fee61eb2ff1807c5f32a34499ef2753b6fcd9a5..bd6d65e32b835551677456bf286d09ced6859882:/symm/salsa20-core.h diff --git a/symm/salsa20-core.h b/symm/salsa20-core.h index 352fec3f..e64e7331 100644 --- a/symm/salsa20-core.h +++ b/symm/salsa20-core.h @@ -174,12 +174,13 @@ * @n@ is decreased appropriately. */ #define SALSA20_OUTBUF(ctx, d, s, n) do { \ - size_t _n = (n), _left = SALSA20_OUTSZ - (ctx)->off; \ - if (_n > _left) _n = _left; \ - (n) -= _n; \ - if (!(d)) (ctx)->off += _n; \ - else if (s) while (_n--) *(d)++ = (ctx)->b[(ctx)->off++] ^ *(s)++; \ - else while (_n--) *(d)++ = (ctx)->b[(ctx)->off++]; \ + const octet *_p = (ctx)->b + (ctx)->off; \ + size_t _n = (n); \ + \ + (ctx)->off += _n; \ + if (!(d)) /* nothing to do */; \ + else if (!(s)) { memcpy((d), _p, _n); (d) += _n; } \ + else while (_n--) *(d)++ = *(s)++ ^ *_p++; \ } while (0) /*----- Variants and naming -----------------------------------------------*/