X-Git-Url: https://git.distorted.org.uk/u/mdw/catacomb/blobdiff_plain/72a6efc4d59568868fc6bbe05d343f777fc1a159..5c3f75ec49019d160806489824fc76652a2ef444:/cfb-def.h diff --git a/cfb-def.h b/cfb-def.h index 647aa26..8de17b3 100644 --- a/cfb-def.h +++ b/cfb-def.h @@ -1,6 +1,6 @@ /* -*-c-*- * - * $Id: cfb-def.h,v 1.5 2004/04/08 01:36:15 mdw Exp $ + * $Id: cfb-def.h,v 1.6 2004/04/17 09:58:37 mdw Exp $ * * Definitions for ciphertext feedback mode * @@ -207,7 +207,9 @@ void pre##_cfbencrypt(pre##_cfbctx *ctx, \ \ while (off < PRE##_BLKSZ) { \ register octet x = *s++; \ - *d++ = ctx->iv[off++] ^= x; \ + ctx->iv[off] ^= x; \ + if (d) *d++ = ctx->iv[off]; \ + off++; \ sz--; \ } \ \ @@ -221,10 +223,14 @@ void pre##_cfbencrypt(pre##_cfbctx *ctx, \ pre##_eblk(&ctx->ctx, iv, iv); \ if (sz < PRE##_BLKSZ) \ break; \ - BLKC_XLOAD(PRE, iv, s); \ - BLKC_STORE(PRE, d, iv); \ - s += PRE##_BLKSZ; \ - d += PRE##_BLKSZ; \ + if (s) { \ + BLKC_XLOAD(PRE, iv, s); \ + s += PRE##_BLKSZ; \ + } \ + if (d) { \ + BLKC_STORE(PRE, d, iv); \ + d += PRE##_BLKSZ; \ + } \ sz -= PRE##_BLKSZ; \ } \ off = 0; \ @@ -237,7 +243,9 @@ void pre##_cfbencrypt(pre##_cfbctx *ctx, \ small: \ do { \ register octet x = *s++; \ - *d++ = ctx->iv[off++] ^= x; \ + ctx->iv[off] ^= x; \ + if (d) *d++ = ctx->iv[off]; \ + off++; \ sz--; \ } while (sz); \ } \