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 (21 years, 1 month 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

# Content
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