Add simple public-key encryption program `catcrypt'.
[u/mdw/catacomb] / ecb-def.h
index 49a232b..7333310 100644 (file)
--- a/ecb-def.h
+++ b/ecb-def.h
@@ -1,6 +1,6 @@
 /* -*-c-*-
  *
- * $Id: ecb-def.h,v 1.3 2004/04/08 01:36:15 mdw Exp $
+ * $Id: ecb-def.h,v 1.4 2004/04/17 09:58:37 mdw Exp $
  *
  * Definitions electronic code book mode
  *
@@ -148,11 +148,17 @@ void pre##_ecbencrypt(pre##_ecbctx *ctx,                          \
                                                                        \
   while (sz >= 2 * PRE##_BLKSZ || sz == PRE##_BLKSZ) {                 \
     uint32 x[PRE##_BLKSZ / 4];                                         \
-    BLKC_LOAD(PRE, x, s);                                              \
+    if (!s)                                                            \
+      BLKC_ZERO(PRE, x);                                               \
+    else {                                                             \
+      BLKC_LOAD(PRE, x, s);                                            \
+      s += PRE##_BLKSZ;                                                        \
+    }                                                                  \
     pre##_eblk(&ctx->ctx, x, x);                                       \
-    BLKC_STORE(PRE, d, x);                                             \
-    s += PRE##_BLKSZ;                                                  \
-    d += PRE##_BLKSZ;                                                  \
+    if (d) {                                                           \
+      BLKC_STORE(PRE, d, x);                                           \
+      d += PRE##_BLKSZ;                                                        \
+    }                                                                  \
     sz -= PRE##_BLKSZ;                                                 \
   }                                                                    \
                                                                        \
@@ -177,7 +183,12 @@ void pre##_ecbencrypt(pre##_ecbctx *ctx,                           \
      * out yet, because I've not read the partial plaintext block.     \
      */                                                                        \
                                                                        \
-    BLKC_LOAD(PRE, x, s);                                              \
+    if (!s)                                                            \
+      BLKC_ZERO(PRE, x);                                               \
+    else {                                                             \
+      BLKC_LOAD(PRE, x, s);                                            \
+      s += PRE##_BLKSZ;                                                        \
+    }                                                                  \
     pre##_eblk(&ctx->ctx, x, x);                                       \
     BLKC_STORE(PRE, b, x);                                             \
                                                                        \
@@ -188,16 +199,15 @@ void pre##_ecbencrypt(pre##_ecbctx *ctx,                          \
      * ciphertext block.                                               \
      */                                                                        \
                                                                        \
-    s += PRE##_BLKSZ;                                                  \
-    d += PRE##_BLKSZ;                                                  \
+    if (d) d += PRE##_BLKSZ;                                           \
     for (i = 0; i < sz; i++) {                                         \
       register octet y = b[i];                                         \
       b[i] = s[i];                                                     \
-      d[i] = y;                                                                \
+      if (d) d[i] = y;                                                 \
     }                                                                  \
     BLKC_LOAD(PRE, x, b);                                              \
     pre##_eblk(&ctx->ctx, x, x);                                       \
-    BLKC_STORE(PRE, d - PRE##_BLKSZ, x);                               \
+    if (d) BLKC_STORE(PRE, d - PRE##_BLKSZ, x);                                \
   }                                                                    \
                                                                        \
   /* --- Done --- */                                                   \