X-Git-Url: https://git.distorted.org.uk/u/mdw/catacomb/blobdiff_plain/4efe32ba5fe2ca310c060c3f98673de96d8b5f9a..02dfbd5b7af7816959dbd39c1fe628451204e35f:/cbc-def.h diff --git a/cbc-def.h b/cbc-def.h index 1be3549..00695ae 100644 --- a/cbc-def.h +++ b/cbc-def.h @@ -1,6 +1,6 @@ /* -*-c-*- * - * $Id: cbc-def.h,v 1.3 2001/06/17 00:10:51 mdw Exp $ + * $Id: cbc-def.h,v 1.6 2004/04/17 09:58:36 mdw Exp $ * * Definitions for cipher block chaining mode * @@ -27,20 +27,6 @@ * MA 02111-1307, USA. */ -/*----- Revision history --------------------------------------------------* - * - * $Log: cbc-def.h,v $ - * Revision 1.3 2001/06/17 00:10:51 mdw - * Typesetting fixes - * - * Revision 1.2 2000/06/17 10:49:52 mdw - * Use secure arena for memory allocation. - * - * Revision 1.1 1999/12/10 23:16:39 mdw - * Split mode macros into interface and implementation. - * - */ - #ifndef CATACOMB_CBC_DEF_H #define CATACOMB_CBC_DEF_H @@ -148,7 +134,7 @@ void pre##_cbcinit(pre##_cbcctx *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); \ BLKC_LOAD(PRE, ctx->iv, iv ? iv : zero); \ } \ @@ -193,8 +179,10 @@ void pre##_cbcencrypt(pre##_cbcctx *ctx, \ \ pre##_eblk(&ctx->ctx, ctx->iv, ctx->iv); \ BLKC_STORE(PRE, b, ctx->iv); \ - for (i = 0; i < sz; i++) \ - d[i] = b[i] ^ s[i]; \ + if (d) { \ + for (i = 0; i < sz; i++) \ + d[i] = b[i] ^ (s ? s[i] : 0); \ + } \ memmove(b, b + sz, PRE##_BLKSZ - sz); \ memcpy(b + PRE##_BLKSZ - sz, d, sz); \ BLKC_LOAD(PRE, ctx->iv, b); \ @@ -209,11 +197,15 @@ void pre##_cbcencrypt(pre##_cbcctx *ctx, \ */ \ \ while (sz >= 2 * PRE##_BLKSZ || sz == PRE##_BLKSZ) { \ - BLKC_XLOAD(PRE, ctx->iv, s); \ + if (s) { \ + BLKC_XLOAD(PRE, ctx->iv, s); \ + s += PRE##_BLKSZ; \ + } \ pre##_eblk(&ctx->ctx, ctx->iv, ctx->iv); \ - BLKC_STORE(PRE, d, ctx->iv); \ - s += PRE##_BLKSZ; \ - d += PRE##_BLKSZ; \ + if (d) { \ + BLKC_STORE(PRE, d, ctx->iv); \ + d += PRE##_BLKSZ; \ + } \ sz -= PRE##_BLKSZ; \ } \ \ @@ -238,7 +230,7 @@ void pre##_cbcencrypt(pre##_cbcctx *ctx, \ * block. \ */ \ \ - BLKC_XLOAD(PRE, ctx->iv, s); \ + if (s) BLKC_XLOAD(PRE, ctx->iv, s); \ pre##_eblk(&ctx->ctx, ctx->iv, ctx->iv); \ BLKC_STORE(PRE, b, ctx->iv); \ \ @@ -249,16 +241,16 @@ void pre##_cbcencrypt(pre##_cbcctx *ctx, \ * ciphertext block. \ */ \ \ - s += PRE##_BLKSZ; \ - d += PRE##_BLKSZ; \ + if (s) s += PRE##_BLKSZ; \ + if (d) d += PRE##_BLKSZ; \ for (i = 0; i < sz; i++) { \ register octet x = b[i]; \ - b[i] ^= s[i]; \ - d[i] = x; \ + if (s) b[i] ^= s[i]; \ + if (d) d[i] = x; \ } \ BLKC_LOAD(PRE, ctx->iv, b); \ pre##_eblk(&ctx->ctx, ctx->iv, ctx->iv); \ - BLKC_STORE(PRE, d - PRE##_BLKSZ, ctx->iv); \ + if (d) BLKC_STORE(PRE, d - PRE##_BLKSZ, ctx->iv); \ } \ \ /* --- Done --- */ \