* md4.c (Transform) [CONFIG_SMALL]: Roll loops for each round
authorKen Raeburn <raeburn@mit.edu>
Sun, 1 May 2005 08:20:56 +0000 (08:20 +0000)
committerKen Raeburn <raeburn@mit.edu>
Sun, 1 May 2005 08:20:56 +0000 (08:20 +0000)
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@17207 dc483132-0cff-0310-8789-dd5450dbe970

src/lib/crypto/md4/ChangeLog
src/lib/crypto/md4/md4.c

index 8968b27f2294af60e41c8c7f863b23c1a6f497e2..06eac6c69c81f3deed0ea62e339dc358e8571dd9 100644 (file)
@@ -1,3 +1,7 @@
+2005-05-01  Ken Raeburn  <raeburn@mit.edu>
+
+       * md4.c (Transform) [CONFIG_SMALL]: Roll loops for each round.
+
 2004-02-18  Ken Raeburn  <raeburn@mit.edu>
 
        * md4.c: Use ANSI C style function definitions.
index 3541bce56f2ac7b4360c9ae90d2749f5de9d1af1..5e95d359f2d6201a4928d7d4af5fb8c1c0d1c9a5 100644 (file)
@@ -167,6 +167,28 @@ static void Transform (krb5_ui_4 *buf, krb5_ui_4 *in)
 {
   register krb5_ui_4 a = buf[0], b = buf[1], c = buf[2], d = buf[3];
 
+#ifdef CONFIG_SMALL
+  int i;
+#define ROTATE { krb5_ui_4 temp; temp = d, d = c, c = b, b = a, a = temp; }
+  for (i = 0; i < 16; i++) {
+      static const unsigned char round1consts[] = { 3, 7, 11, 19, };
+      FF (a, b, c, d, in[i], round1consts[i%4]); ROTATE;
+  }
+  for (i = 0; i < 16; i++) {
+      static const unsigned char round2indices[] = {
+         0,4,8,12,1,5,9,13,2,6,10,14,3,7,11,15
+      };
+      static const unsigned char round2consts[] = { 3, 5, 9, 13 };
+      GG (a, b, c, d, in[round2indices[i]], round2consts[i%4]); ROTATE;
+  }
+  for (i = 0; i < 16; i++) {
+      static const unsigned char round3indices[] = {
+         0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15
+      };
+      static const unsigned char round3consts[] = { 3, 9, 11, 15 };
+      HH (a, b, c, d, in[round3indices[i]], round3consts[i%4]); ROTATE;
+  }
+#else
   /* Round 1 */
   FF (a, b, c, d, in[ 0],  3);
   FF (d, a, b, c, in[ 1],  7);
@@ -220,6 +242,7 @@ static void Transform (krb5_ui_4 *buf, krb5_ui_4 *in)
   HH (d, a, b, c, in[11],  9);
   HH (c, d, a, b, in[ 7], 11);
   HH (b, c, d, a, in[15], 15);
+#endif
 
   buf[0] += a;
   buf[1] += b;