X-Git-Url: https://git.distorted.org.uk/u/mdw/catacomb/blobdiff_plain/4e66da02f19648ee1be862e67ba1d1fc5549fb7f..09e500b22fc6250ba458d26a9dd7e6571d2c79d8:/cfb-def.h diff --git a/cfb-def.h b/cfb-def.h index 1d983f3..357bb95 100644 --- a/cfb-def.h +++ b/cfb-def.h @@ -1,13 +1,13 @@ /* -*-c-*- * - * $Id: cfb-def.h,v 1.4 2004/04/02 01:03:49 mdw Exp $ + * $Id: cfb-def.h,v 1.6 2004/04/17 09:58:37 mdw Exp $ * * Definitions for ciphertext feedback mode * * (c) 1999 Straylight/Edgeware */ -/*----- Licensing notice --------------------------------------------------* +/*----- Licensing notice --------------------------------------------------* * * This file is part of Catacomb. * @@ -15,35 +15,18 @@ * it under the terms of the GNU Library General Public License as * published by the Free Software Foundation; either version 2 of the * License, or (at your option) any later version. - * + * * Catacomb is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. - * + * * You should have received a copy of the GNU Library General Public * License along with Catacomb; if not, write to the Free * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, * MA 02111-1307, USA. */ -/*----- Revision history --------------------------------------------------* - * - * $Log: cfb-def.h,v $ - * Revision 1.4 2004/04/02 01:03:49 mdw - * Miscellaneous constification. - * - * Revision 1.3 2001/06/17 00:10:51 mdw - * Typesetting fixes - * - * 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 @@ -224,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--; \ } \ \ @@ -238,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; \ @@ -254,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); \ } \ @@ -476,22 +467,22 @@ int main(void) \ if (memcmp(pt, text, sizeof(text)) == 0) { \ done++; \ if (sizeof(text) < 40 || done % 8 == 0) \ - fputc('.', stdout); \ + fputc('.', stdout); \ if (done % 480 == 0) \ - fputs("\n\t", stdout); \ + fputs("\n\t", stdout); \ fflush(stdout); \ } else { \ printf("\nError (sz = %lu)\n", (unsigned long)sz); \ status = 1; \ printf("\tplaintext = "); hexdump(text, sz); \ - printf(", "); hexdump(text + sz, rest); \ - fputc('\n', stdout); \ + printf(", "); hexdump(text + sz, rest); \ + fputc('\n', stdout); \ printf("\tciphertext = "); hexdump(ct, sz); \ - printf(", "); hexdump(ct + sz, rest); \ - fputc('\n', stdout); \ + printf(", "); hexdump(ct + sz, rest); \ + fputc('\n', stdout); \ printf("\trecovered text = "); hexdump(pt, sz); \ - printf(", "); hexdump(pt + sz, rest); \ - fputc('\n', stdout); \ + printf(", "); hexdump(pt + sz, rest); \ + fputc('\n', stdout); \ fputc('\n', stdout); \ } \ if (sz < 63) \