ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Crypt-Twofish2/platform.h
Revision: 1.1
Committed: Sat Sep 6 22:10:54 2003 UTC (20 years, 8 months ago) by root
Content type: text/plain
Branch: MAIN
CVS Tags: rel-1_02, rel-1_03, HEAD
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 #ifndef PLATFORM_H
2     #define PLATFORM_H
3     /***************************************************************************
4     PLATFORM.H -- Platform-specific defines for TWOFISH code
5    
6     Submitters:
7     Bruce Schneier, Counterpane Systems
8     Doug Whiting, Hi/fn
9     John Kelsey, Counterpane Systems
10     Chris Hall, Counterpane Systems
11     David Wagner, UC Berkeley
12    
13     Code Author: Doug Whiting, Hi/fn
14    
15     Version 1.00 April 1998
16    
17     Copyright 1998, Hi/fn and Counterpane Systems. All rights reserved.
18    
19     Notes:
20     * Tab size is set to 4 characters in this file
21    
22     ***************************************************************************/
23    
24     typedef unsigned char BYTE;
25     typedef U32 DWORD;
26    
27     /* use intrinsic rotate if possible */
28     #define ROL(x,n) (((x) << ((n) & 0x1F)) | ((x) >> (32-((n) & 0x1F))))
29     #define ROR(x,n) (((x) >> ((n) & 0x1F)) | ((x) << (32-((n) & 0x1F))))
30    
31     #if (0) && defined(__BORLANDC__) && (__BORLANDC__ >= 0x462)
32     #error "!!!This does not work for some reason!!!"
33     #include <stdlib.h> /* get prototype for _lrotl() , _lrotr() */
34     #pragma inline __lrotl__
35     #pragma inline __lrotr__
36     #undef ROL /* get rid of inefficient definitions */
37     #undef ROR
38     #define ROL(x,n) __lrotl__(x,n) /* use compiler intrinsic rotations */
39     #define ROR(x,n) __lrotr__(x,n)
40     #endif
41    
42     #ifdef _MSC_VER
43     #include <stdlib.h> /* get prototypes for rotation functions */
44     #undef ROL
45     #undef ROR
46     #pragma intrinsic(_lrotl,_lrotr) /* use intrinsic compiler rotations */
47     #define ROL(x,n) _lrotl(x,n)
48     #define ROR(x,n) _lrotr(x,n)
49     #endif
50    
51     #ifndef _M_IX86
52     #ifdef __BORLANDC__
53     #define _M_IX86 300 /* make sure this is defined for Intel CPUs */
54     #endif
55     #endif
56    
57     #if defined(_M_IX86) || defined(__i386)
58     #define ALIGN32 0 /* need dword alignment? (no for Pentium) */
59     #else /* non-Intel platforms */
60     #define ALIGN32 1 /* (assume need alignment for non-Intel) */
61     #endif
62    
63     /* BYTEORDER comes from perl's config.h */
64     #if BYTEORDER == 0x1234 || BYTEORDER == 0x12345678 || defined(__LITTLE_ENDIAN__)
65     #define LittleEndian 1
66     #define Bswap(x) (x) /* NOP for little-endian machines */
67     #define ADDR_XOR 0 /* NOP for little-endian machines */
68     #else
69     #define Bswap(x) ((ROR(x,8) & 0xFF00FF00) | (ROL(x,8) & 0x00FF00FF))
70     #define ADDR_XOR 3 /* convert byte address in dword */
71     #endif
72    
73     /* Macros for extracting bytes from dwords (correct for endianness) */
74     #define _b(x,N) (((BYTE *)&x)[((N) & 3) ^ ADDR_XOR]) /* pick bytes out of a dword */
75    
76     #define b0(x) _b(x,0) /* extract LSB of DWORD */
77     #define b1(x) _b(x,1)
78     #define b2(x) _b(x,2)
79     #define b3(x) _b(x,3) /* extract MSB of DWORD */
80    
81     #endif