tests/gdsa: Test from P1363.
[u/mdw/catacomb] / tea.c
diff --git a/tea.c b/tea.c
index 90d97cb..4cb5ef8 100644 (file)
--- a/tea.c
+++ b/tea.c
@@ -1,13 +1,13 @@
 /* -*-c-*-
  *
- * $Id: tea.c,v 1.1 2000/07/15 13:44:31 mdw Exp $
+ * $Id: tea.c,v 1.3 2004/04/08 01:36:15 mdw Exp $
  *
  * The Tiny Encryption Algorithm
  *
  * (c) 2000 Straylight/Edgeware
  */
 
-/*----- Licensing notice --------------------------------------------------* 
+/*----- Licensing notice --------------------------------------------------*
  *
  * This file is part of Catacomb.
  *
  * 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: tea.c,v $
- * Revision 1.1  2000/07/15 13:44:31  mdw
- * New ciphers.
- *
- */
-
 /*----- Header files ------------------------------------------------------*/
 
 #include <mLib/bits.h>
@@ -52,13 +44,13 @@ const octet tea_keysz[] = { KSZ_RANGE, TEA_KEYSZ, 0, 16, 1 };
 
 /* --- @tea_init@ --- *
  *
- * Arguments:   @tea_ctx *k@ = pointer to key block
- *              @const void *buf@ = pointer to key buffer
- *              @size_t sz@ = size of key material
+ * Arguments:  @tea_ctx *k@ = pointer to key block
+ *             @const void *buf@ = pointer to key buffer
+ *             @size_t sz@ = size of key material
  *
- * Returns:     ---
+ * Returns:    ---
  *
- * Use:         Initializes a TEA key buffer.  The key buffer must be 16
+ * Use:                Initializes a TEA key buffer.  The key buffer must be 16
  *             bytes long.
  */
 
@@ -76,8 +68,9 @@ void tea_init(tea_ctx *k, const void *buf, size_t sz)
     p = kb;
   }
 
-  k->ka = LOAD32(p +  0);   k->kb = LOAD32(p +  4);
-  k->kc = LOAD32(p +  8);   k->kd = LOAD32(p + 12);
+  k->ka = LOAD32(p +  0); k->kb = LOAD32(p +  4);
+  k->kc = LOAD32(p +  8); k->kd = LOAD32(p + 12);
+  k->r = 32;
 
   if (p == kb)
     BURN(kb);
@@ -85,13 +78,13 @@ void tea_init(tea_ctx *k, const void *buf, size_t sz)
 
 /* --- @tea_eblk@, @tea_dblk@ --- *
  *
- * Arguments:   @const tea_ctx *k@ = pointer to key block
- *              @const uint32 s[2]@ = pointer to source block
- *              @uint32 d[2]@ = pointer to teatination block
+ * Arguments:  @const tea_ctx *k@ = pointer to key block
+ *             @const uint32 s[2]@ = pointer to source block
+ *             @uint32 d[2]@ = pointer to teatination block
  *
- * Returns:     ---
+ * Returns:    ---
  *
- * Use:         Low-level block encryption and decryption.
+ * Use:                Low-level block encryption and decryption.
  */
 
 #define DELTA 0x9e3779b9
@@ -103,7 +96,7 @@ void tea_eblk(const tea_ctx *k, const uint32 *s, uint32 *d)
   uint32 n = 0;
   unsigned i;
 
-  for (i = 0; i < 32; i++) {
+  for (i = 0; i < k->r; i++) {
     n += DELTA;
     y = U32(y + (((z << 4) + ka) ^ (z + n) ^ ((z >> 5) + kb)));
     z = U32(z + (((y << 4) + kc) ^ (y + n) ^ ((y >> 5) + kd)));
@@ -115,10 +108,10 @@ void tea_dblk(const tea_ctx *k, const uint32 *s, uint32 *d)
 {
   uint32 y = s[0], z = s[1];
   uint32 ka = k->ka, kb = k->kb, kc = k->kc, kd = k->kd;
-  uint32 n = DELTA << 5;
+  uint32 n = DELTA * k->r;
   unsigned i;
 
-  for (i = 0; i < 32; i++) {
+  for (i = 0; i < k->r; i++) {
     z = U32(z - (((y << 4) + kc) ^ (y + n) ^ ((y >> 5) + kd)));
     y = U32(y - (((z << 4) + ka) ^ (z + n) ^ ((z >> 5) + kb)));
     n -= DELTA;