Camellia update. Quoting camellia.c:
[openssl.git] / crypto / camellia / cmll_locl.h
index 2ac2e95435713aa338e2b2f51bfd9f81cdabb913..4ece8763d4e9aeaed1f591338cf1ffa1afd76a5c 100644 (file)
 #ifndef HEADER_CAMELLIA_LOCL_H
 #define HEADER_CAMELLIA_LOCL_H
 
-#include "openssl/e_os2.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
+typedef unsigned int  u32;
 typedef unsigned char u8;
-typedef unsigned int u32;
-
-#ifdef __cplusplus
-extern "C" {
-#endif
 
 #if defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_AMD64) || defined(_M_X64))
-# define SWAP(x) ( _lrotl(x, 8) & 0x00ff00ff | _lrotr(x, 8) & 0xff00ff00 )
-# define GETU32(p) SWAP(*((u32 *)(p)))
-# define PUTU32(ct, st) { *((u32 *)(ct)) = SWAP((st)); }
-# define CAMELLIA_SWAP4(x) (x = ( _lrotl(x, 8) & 0x00ff00ff | _lrotr(x, 8) & 0xff00ff00) )
-
-#else /* not windows */
-# define GETU32(pt) (((u32)(pt)[0] << 24) \
-       ^ ((u32)(pt)[1] << 16) \
-       ^ ((u32)(pt)[2] <<  8) \
-       ^ ((u32)(pt)[3]))
-
-# define PUTU32(ct, st) { (ct)[0] = (u8)((st) >> 24); \
-       (ct)[1] = (u8)((st) >> 16); \
-       (ct)[2] = (u8)((st) >>  8); \
-       (ct)[3] = (u8)(st); }
-
-#if (defined (__GNUC__) && (defined(__x86_64__) || defined(__x86_64)))
-#define CAMELLIA_SWAP4(x) \
-  do{\
-    asm("bswap %1" : "+r" (x));\
-  }while(0)
+# if _MSC_VER >= 1400
+#  define SWAP(x) _byteswap_ulong(x)
+# else
+#  define SWAP(x) (_lrotl(x, 8) & 0x00ff00ff | _lrotr(x, 8) & 0xff00ff00)
+# endif
+# define GETU32(p)   SWAP(*((u32 *)(p)))
+# define PUTU32(p,v) (*((u32 *)(p)) = SWAP((v)))
+#elif defined(__GNUC__) && __GNUC__>=2 && (defined(__i386) || defined(__x86_64))
+# if defined(B_ENDIAN) /* stratus.com does it */
+#  define GETU32(p)   (*(u32 *)(p))
+#  define PUTU32(p,v) (*(u32 *)(p)=(v))
+# else
+#  define GETU32(p)   ({u32 r=*(const u32 *)(p); asm("bswapl %0":"=r"(r):"0"(r)); r; })
+#  define PUTU32(p,v) ({u32 r=(v); asm("bswapl %0":"=r"(r):"0"(r)); *(u32 *)(p)=r; })
+# endif
+#elif defined(__s390__) || defined(__s390x__)
+# define GETU32(p)   (*(u32 *)(p))
+# define PUTU32(p,v) (*(u32 *)(p)=(v))
 #else
-#define CAMELLIA_SWAP4(x) \
-   do{\
-     x = ((u32)x << 16) + ((u32)x >> 16);\
-     x = (((u32)x & 0xff00ff) << 8) + (((u32)x >> 8) & 0xff00ff);\
-   } while(0)
-#endif
-#endif
-
-#define COPY4WORD(dst, src)     \
-            do                  \
-                    {           \
-                    (dst)[0]=(src)[0];         \
-                    (dst)[1]=(src)[1];         \
-                    (dst)[2]=(src)[2];         \
-                    (dst)[3]=(src)[3];         \
-                    }while(0)
-
-#define SWAP4WORD(word)                                \
-   do                                          \
-          {                                    \
-          CAMELLIA_SWAP4((word)[0]);                   \
-          CAMELLIA_SWAP4((word)[1]);                   \
-          CAMELLIA_SWAP4((word)[2]);                   \
-          CAMELLIA_SWAP4((word)[3]);                   \
-          }while(0)
-
-#define XOR4WORD(a, b)/* a = a ^ b */          \
-   do                                          \
-       {                                       \
-       (a)[0]^=(b)[0];                         \
-       (a)[1]^=(b)[1];                         \
-       (a)[2]^=(b)[2];                         \
-       (a)[3]^=(b)[3];                         \
-       }while(0)
-
-#define XOR4WORD2(a, b, c)/* a = b ^ c */      \
-   do                                          \
-       {                                       \
-       (a)[0]=(b)[0]^(c)[0];                   \
-       (a)[1]=(b)[1]^(c)[1];                           \
-       (a)[2]=(b)[2]^(c)[2];                           \
-       (a)[3]=(b)[3]^(c)[3];                           \
-       }while(0)
-
-
-void camellia_setup128(const u8 *key, u32 *subkey);
-void camellia_setup192(const u8 *key, u32 *subkey);
-void camellia_setup256(const u8 *key, u32 *subkey);
-
-void camellia_encrypt128(const u32 *subkey, u32 *io);
-void camellia_decrypt128(const u32 *subkey, u32 *io);
-void camellia_encrypt256(const u32 *subkey, u32 *io);
-void camellia_decrypt256(const u32 *subkey, u32 *io);
-
-#ifdef __cplusplus
-}
+# define GETU32(p)   (((u32)(p)[0] << 24) ^ ((u32)(p)[1] << 16) ^ ((u32)(p)[2] <<  8) ^ ((u32)(p)[3]))
+# define PUTU32(p,v) ((p)[0] = (u8)((v) >> 24), (p)[1] = (u8)((v) >> 16), (p)[2] = (u8)((v) >>  8), (p)[3] = (u8)(v))
 #endif
 
+int Camellia_Ekeygen(int keyBitLength, const u8 *rawKey, KEY_TABLE_TYPE keyTable);
+void Camellia_EncryptBlock(int grandRounds, const u8 plaintext[], 
+               const KEY_TABLE_TYPE keyTable, u8 ciphertext[]);
+void Camellia_DecryptBlock(int grandRounds, const u8 ciphertext[], 
+               const KEY_TABLE_TYPE keyTable, u8 plaintext[]);
 #endif /* #ifndef HEADER_CAMELLIA_LOCL_H */
-