2003-10-24 Moritz Schulte <mo@g10code.com>
authorMoritz Schulte <mo@g10code.com>
Fri, 24 Oct 2003 20:33:30 +0000 (20:33 +0000)
committerMoritz Schulte <mo@g10code.com>
Fri, 24 Oct 2003 20:33:30 +0000 (20:33 +0000)
* serpent.c: Fix an issue on big-endian systems.

cipher/ChangeLog
cipher/serpent.c

index a97fd00..d8694b1 100644 (file)
@@ -1,3 +1,10 @@
+2003-10-24  Moritz Schulte  <mo@g10code.com>
+
+       * serpent.c: Fix an issue on big-endian systems.
+
+       * rndw32.c: Removed IS_MODULE -cruft.
+       * rndlinux.c (rndlinux_gather_random): Likewise.
+
 2003-10-10  Werner Koch  <wk@gnupg.org>
 
        * primegen.c (gen_prime): Bail out if NBITS is less than 16.
index f3fe2a5..babca2f 100644 (file)
@@ -779,7 +779,17 @@ serpent_decrypt_internal (serpent_context_t *context,
   serpent_block_t b, b_next;
   int round = ROUNDS;
 
-  BLOCK_COPY (b_next, input);
+#ifdef WORDS_BIGENDIAN
+  b_next[0] = byte_swap_32 (input[0]);
+  b_next[1] = byte_swap_32 (input[1]);
+  b_next[2] = byte_swap_32 (input[2]);
+  b_next[3] = byte_swap_32 (input[3]);
+#else
+  b_next[0] = input[0];
+  b_next[1] = input[1];
+  b_next[2] = input[2];
+  b_next[3] = input[3];
+#endif
 
   ROUND_FIRST_INVERSE (7, context->keys, b_next, b);
 
@@ -815,7 +825,18 @@ serpent_decrypt_internal (serpent_context_t *context,
   ROUND_INVERSE (1, context->keys, b, b_next);
   ROUND_INVERSE (0, context->keys, b, b_next);
 
-  BLOCK_COPY (output, b_next);
+
+#ifdef WORDS_BIGENDIAN
+  output[0] = byte_swap_32 (b_next[0]);
+  output[1] = byte_swap_32 (b_next[1]);
+  output[2] = byte_swap_32 (b_next[2]);
+  output[3] = byte_swap_32 (b_next[3]);
+#else
+  output[0] = b_next[0];
+  output[1] = b_next[1];
+  output[2] = b_next[2];
+  output[3] = b_next[3];
+#endif
 }
 
 static void
@@ -896,6 +917,7 @@ serpent_test (void)
       serpent_encrypt_internal (&context,
                                (const u32_t *) test_data[i].text_plain,
                                (u32_t *) scratch);
+
       if (memcmp (scratch, test_data[i].text_cipher, sizeof (serpent_block_t)))
        switch (test_data[i].key_length)
          {