chiark / gitweb /
site: Permit multiple peer addresses even if peer is static
[secnet.git] / serpent.c
index 3847437f1d8cfe9ee7f0041257f83732062d1ce0..7c5850535f24f87655f2508b0c4045f89e3dcd9a 100644 (file)
--- a/serpent.c
+++ b/serpent.c
 
 #include <stdint.h>
 
+#include "hexdebug.h"
 #include "serpent.h"
 #include "serpentsboxes.h"
 
+#ifdef SERPENT_BIGENDIAN
+
 #define GETPUT_CP(bytenum) \
     (((basep) + (lenbytes) - (offset) - 4)[(bytenum)])
 
+#define SERPENT_DECORATE(func) serpentbe_##func
+
+#else /* !defined(SERPENT_BIGENDIAN) */
+
+#define GETPUT_CP(bytenum) \
+    (((basep) + (offset))[3-(bytenum)])
+
+#define SERPENT_DECORATE(func) serpent_##func
+
+#endif /* !defined(SERPENT_BIGENDIAN) */
+
+#if 0
+
+#include <stdio.h>
+
+static void SERP_DEBUG(const char *str1,
+                      const void *ary, int sz,
+                      const char *str2)
+{
+    fprintf(stderr,"%s",str1);
+    hexdebug(stderr,ary,sz);
+    fprintf(stderr,"%s",str2);
+}
+
+#else
+
+#define SERP_DEBUG(str1,aryv,sz,str2) /*empty*/
+
+#endif
+
+
 static uint32_t serpent_get_32bit(const uint8_t *basep,
                                  int lenbytes, int offset)
 {
@@ -45,13 +79,15 @@ static void serpent_put_32bit(uint8_t *basep, int lenbytes, int offset, uint32_t
     GETPUT_CP(3) = (char)(value);
 }
 
-void serpent_makekey(struct keyInstance *key, int keyLen,
+void SERPENT_DECORATE(makekey)(struct keyInstance *key, int keyLen,
            const uint8_t *keyMaterial)
 {
     int i;
     uint32_t j;
     uint32_t w[132],k[132];
 
+    SERP_DEBUG("SERPENT makekey ",keyMaterial,keyLen/8,"\n");
+
     for(i=0; i<keyLen/32; i++)
        w[i]=serpent_get_32bit(keyMaterial, keyLen/8, i*4);
     if(keyLen<256)
@@ -105,13 +141,15 @@ void serpent_makekey(struct keyInstance *key, int keyLen,
            key->subkeys[i][j] = k[4*i+j];
 }
 
-void serpent_encrypt(struct keyInstance *key,
+void SERPENT_DECORATE(encrypt)(struct keyInstance *key,
                     const uint8_t plaintext[16], 
                     uint8_t ciphertext[16])
 {
     register uint32_t x0, x1, x2, x3;
     register uint32_t y0, y1, y2, y3;
 
+    SERP_DEBUG("SERPENT encrypt ",plaintext,16," ->");
+
     x0=serpent_get_32bit(plaintext,16,+0);
     x1=serpent_get_32bit(plaintext,16,+4);
     x2=serpent_get_32bit(plaintext,16,+8);
@@ -221,15 +259,19 @@ void serpent_encrypt(struct keyInstance *key,
     serpent_put_32bit(ciphertext,16,+4, x1);
     serpent_put_32bit(ciphertext,16,+8, x2);
     serpent_put_32bit(ciphertext,16,12, x3);
+
+    SERP_DEBUG(" ",ciphertext,16,"\n");
 }
 
-void serpent_decrypt(struct keyInstance *key,
+void SERPENT_DECORATE(decrypt)(struct keyInstance *key,
                     const uint8_t ciphertext[16],
                     uint8_t plaintext[16])
 {
     register uint32_t x0, x1, x2, x3;
     register uint32_t y0, y1, y2, y3;
 
+    SERP_DEBUG("SERPENT decrypt ",ciphertext,16," ->");
+
     x0=serpent_get_32bit(ciphertext,16,+0);
     x1=serpent_get_32bit(ciphertext,16,+4);
     x2=serpent_get_32bit(ciphertext,16,+8);
@@ -339,4 +381,6 @@ void serpent_decrypt(struct keyInstance *key,
     serpent_put_32bit(plaintext,16,+4, x1);
     serpent_put_32bit(plaintext,16,+8, x2);
     serpent_put_32bit(plaintext,16,12, x3);
+
+    SERP_DEBUG(" ",plaintext,16,"\n");
 }