X-Git-Url: https://git.distorted.org.uk/u/mdw/catacomb/blobdiff_plain/426aab6b60177527394b5e788b2bf1661b7fc2d5..80be023065ced106a4078a36371c135a60d2bd6c:/cfb-def.h diff --git a/cfb-def.h b/cfb-def.h index bb3757c..8de17b3 100644 --- a/cfb-def.h +++ b/cfb-def.h @@ -1,6 +1,6 @@ /* -*-c-*- * - * $Id: cfb-def.h,v 1.2 2000/06/17 10:50:39 mdw Exp $ + * $Id: cfb-def.h,v 1.6 2004/04/17 09:58:37 mdw Exp $ * * Definitions for ciphertext feedback mode * @@ -27,17 +27,6 @@ * MA 02111-1307, USA. */ -/*----- Revision history --------------------------------------------------* - * - * $Log: cfb-def.h,v $ - * Revision 1.2 2000/06/17 10:50:39 mdw - * Use secure arena for memory allocation. Rearrange setiv slightly. - * - * Revision 1.1 1999/12/10 23:16:39 mdw - * Split mode macros into interface and implementation. - * - */ - #ifndef CATACOMB_CFB_DEF_H #define CATACOMB_CFB_DEF_H @@ -86,7 +75,7 @@ /* --- @pre_cfbgetiv@ --- * \ * \ * Arguments: @const pre_cfbctx *ctx@ = pointer to CFB context block \ - * @void *iv#@ = pointer to output data block \ + * @void *iv@ = pointer to output data block \ * \ * Returns: --- \ * \ @@ -177,7 +166,7 @@ void pre##_cfbinit(pre##_cfbctx *ctx, \ const void *key, size_t sz, \ const void *iv) \ { \ - static octet zero[PRE##_BLKSZ] = { 0 }; \ + static const octet zero[PRE##_BLKSZ] = { 0 }; \ pre##_init(&ctx->ctx, key, sz); \ pre##_cfbsetiv(ctx, iv ? iv : zero); \ } \ @@ -218,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--; \ } \ \ @@ -232,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; \ @@ -248,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); \ } \