Uprating of the passphrase pixie.
[u/mdw/catacomb] / ecb-def.h
index 473d35a..7333310 100644 (file)
--- a/ecb-def.h
+++ b/ecb-def.h
@@ -1,6 +1,6 @@
 /* -*-c-*-
  *
- * $Id: ecb-def.h,v 1.2 2000/06/17 10:54:43 mdw Exp $
+ * $Id: ecb-def.h,v 1.4 2004/04/17 09:58:37 mdw Exp $
  *
  * Definitions electronic code book mode
  *
  * MA 02111-1307, USA.
  */
 
-/*----- Revision history --------------------------------------------------* 
- *
- * $Log: ecb-def.h,v $
- * Revision 1.2  2000/06/17 10:54:43  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_ECB_DEF_H
 #define CATACOMB_ECB_DEF_H
 
@@ -159,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;                                                 \
   }                                                                    \
                                                                        \
@@ -188,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);                                             \
                                                                        \
@@ -199,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 --- */                                                   \