cryptlib  3.4.1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Macros
brg_endian.h
Go to the documentation of this file.
1 /*
2  ---------------------------------------------------------------------------
3  Copyright (c) 1998-2008, Brian Gladman, Worcester, UK. All rights reserved.
4 
5  LICENSE TERMS
6 
7  The redistribution and use of this software (with or without changes)
8  is allowed without the payment of fees or royalties provided that:
9 
10  1. source code distributions include the above copyright notice, this
11  list of conditions and the following disclaimer;
12 
13  2. binary distributions include the above copyright notice, this list
14  of conditions and the following disclaimer in their documentation;
15 
16  3. the name of the copyright holder is not used to endorse products
17  built using this software without specific written permission.
18 
19  DISCLAIMER
20 
21  This software is provided 'as is' with no explicit or implied warranties
22  in respect of its properties, including, but not limited to, correctness
23  and/or fitness for purpose.
24  ---------------------------------------------------------------------------
25  Issue Date: 20/12/2007
26 */
27 
28 #ifndef _BRG_ENDIAN_H
29 #define _BRG_ENDIAN_H
30 
31 #define IS_BIG_ENDIAN 4321 /* byte 0 is most significant (mc68k) */
32 #define IS_LITTLE_ENDIAN 1234 /* byte 0 is least significant (i386) */
33 
34 #define __CRYPTLIB__ /* pcg */
35 
36 #if defined(__CRYPTLIB__) /* pcg */
37 # include "crypt.h"
38 # if defined(DATA_LITTLEENDIAN)
39 # define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN
40 # else
41 # define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN
42 # endif
43 #else
44 
45 /* Include files where endian defines and byteswap functions may reside */
46 #if defined( __sun )
47 # include <sys/isa_defs.h>
48 #elif defined( __FreeBSD__ ) || defined( __OpenBSD__ ) || defined( __NetBSD__ )
49 # include <sys/endian.h>
50 #elif defined( BSD ) && ( BSD >= 199103 ) || defined( __APPLE__ ) || \
51  defined( __CYGWIN32__ ) || defined( __DJGPP__ ) || defined( __osf__ )
52 # include <machine/endian.h>
53 #elif defined( __linux__ ) || defined( __GNUC__ ) || defined( __GNU_LIBRARY__ )
54 # if !defined( __MINGW32__ ) && !defined( _AIX )
55 # include <endian.h>
56 # if !defined( __BEOS__ )
57 # include <byteswap.h>
58 # endif
59 # endif
60 #endif
61 
62 #endif /* pcg */
63 
64 /* Now attempt to set the define for platform byte order using any */
65 /* of the four forms SYMBOL, _SYMBOL, __SYMBOL & __SYMBOL__, which */
66 /* seem to encompass most endian symbol definitions */
67 
68 #if defined( BIG_ENDIAN ) && defined( LITTLE_ENDIAN )
69 # if defined( BYTE_ORDER ) && BYTE_ORDER == BIG_ENDIAN
70 # define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN
71 # elif defined( BYTE_ORDER ) && BYTE_ORDER == LITTLE_ENDIAN
72 # define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN
73 # endif
74 #elif defined( BIG_ENDIAN )
75 # define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN
76 #elif defined( LITTLE_ENDIAN )
77 # define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN
78 #endif
79 
80 #if defined( _BIG_ENDIAN ) && defined( _LITTLE_ENDIAN )
81 # if defined( _BYTE_ORDER ) && _BYTE_ORDER == _BIG_ENDIAN
82 # define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN
83 # elif defined( _BYTE_ORDER ) && _BYTE_ORDER == _LITTLE_ENDIAN
84 # define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN
85 # endif
86 #elif defined( _BIG_ENDIAN )
87 # define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN
88 #elif defined( _LITTLE_ENDIAN )
89 # define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN
90 #endif
91 
92 #if defined( __BIG_ENDIAN ) && defined( __LITTLE_ENDIAN )
93 # if defined( __BYTE_ORDER ) && __BYTE_ORDER == __BIG_ENDIAN
94 # define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN
95 # elif defined( __BYTE_ORDER ) && __BYTE_ORDER == __LITTLE_ENDIAN
96 # define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN
97 # endif
98 #elif defined( __BIG_ENDIAN )
99 # define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN
100 #elif defined( __LITTLE_ENDIAN )
101 # define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN
102 #endif
103 
104 #if defined( __BIG_ENDIAN__ ) && defined( __LITTLE_ENDIAN__ )
105 # if defined( __BYTE_ORDER__ ) && __BYTE_ORDER__ == __BIG_ENDIAN__
106 # define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN
107 # elif defined( __BYTE_ORDER__ ) && __BYTE_ORDER__ == __LITTLE_ENDIAN__
108 # define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN
109 # endif
110 #elif defined( __BIG_ENDIAN__ )
111 # define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN
112 #elif defined( __LITTLE_ENDIAN__ )
113 # define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN
114 #endif
115 
116 /* if the platform byte order could not be determined, then try to */
117 /* set this define using common machine defines */
118 #if !defined(PLATFORM_BYTE_ORDER)
119 
120 #if defined( __alpha__ ) || defined( __alpha ) || defined( i386 ) || \
121  defined( __i386__ ) || defined( _M_I86 ) || defined( _M_IX86 ) || \
122  defined( __OS2__ ) || defined( sun386 ) || defined( __TURBOC__ ) || \
123  defined( vax ) || defined( vms ) || defined( VMS ) || \
124  defined( __VMS ) || defined( _M_X64 )
125 # define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN
126 
127 #elif defined( AMIGA ) || defined( applec ) || defined( __AS400__ ) || \
128  defined( _CRAY ) || defined( __hppa ) || defined( __hp9000 ) || \
129  defined( ibm370 ) || defined( mc68000 ) || defined( m68k ) || \
130  defined( __MRC__ ) || defined( __MVS__ ) || defined( __MWERKS__ ) || \
131  defined( sparc ) || defined( __sparc) || defined( SYMANTEC_C ) || \
132  defined( __VOS__ ) || defined( __TIGCC__ ) || defined( __TANDEM ) || \
133  defined( THINK_C ) || defined( __VMCMS__ ) || defined( _AIX )
134 # define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN
135 
136 #elif 0 /* **** EDIT HERE IF NECESSARY **** */
137 # define PLATFORM_BYTE_ORDER IS_LITTLE_ENDIAN
138 #elif 0 /* **** EDIT HERE IF NECESSARY **** */
139 # define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN
140 #else
141 # error Please edit lines 126 or 128 in brg_endian.h to set the platform byte order
142 #endif
143 
144 #endif
145 
146 #endif