VeraCrypt
aboutsummaryrefslogtreecommitdiff
path: root/src/Common/Endian.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/Common/Endian.h')
-rw-r--r--src/Common/Endian.h298
1 files changed, 149 insertions, 149 deletions
diff --git a/src/Common/Endian.h b/src/Common/Endian.h
index 0f35304e..00fed048 100644
--- a/src/Common/Endian.h
+++ b/src/Common/Endian.h
@@ -1,149 +1,149 @@
-/*
- Legal Notice: Some portions of the source code contained in this file were
- derived from the source code of TrueCrypt 7.1a, which is
- Copyright (c) 2003-2012 TrueCrypt Developers Association and which is
- governed by the TrueCrypt License 3.0, also from the source code of
- Encryption for the Masses 2.02a, which is Copyright (c) 1998-2000 Paul Le Roux
- and which is governed by the 'License Agreement for Encryption for the Masses'
- Modifications and additions to the original source code (contained in this file)
- and all other portions of this file are Copyright (c) 2013-2016 IDRIX
- and are governed by the Apache License 2.0 the full text of which is
- contained in the file License.txt included in VeraCrypt binary and source
- code distribution packages. */
-
-#ifndef TC_ENDIAN_H
-#define TC_ENDIAN_H
-
-#include "Common/Tcdefs.h"
-
-#if defined(__cplusplus)
-extern "C"
-{
-#endif
-
-#ifdef _WIN32
-
-# ifndef LITTLE_ENDIAN
-# define LITTLE_ENDIAN 1234
-# endif
-# ifndef BYTE_ORDER
-# define BYTE_ORDER LITTLE_ENDIAN
-# endif
-
-#elif !defined(BYTE_ORDER)
-
-# ifdef TC_MACOSX
-# include <machine/endian.h>
-# elif defined (TC_BSD)
-# include <sys/endian.h>
-# elif defined (TC_SOLARIS)
-# include <sys/types.h>
-# define LITTLE_ENDIAN 1234
-# define BIG_ENDIAN 4321
-# ifdef _BIG_ENDIAN
-# define BYTE_ORDER BIG_ENDIAN
-# else
-# define BYTE_ORDER LITTLE_ENDIAN
-# endif
-# else
-# include <endian.h>
-# endif
-
-# ifndef BYTE_ORDER
-# ifndef __BYTE_ORDER
-# error Byte order cannot be determined (BYTE_ORDER undefined)
-# endif
-
-# define BYTE_ORDER __BYTE_ORDER
-# endif
-
-# ifndef LITTLE_ENDIAN
-# define LITTLE_ENDIAN __LITTLE_ENDIAN
-# endif
-
-# ifndef BIG_ENDIAN
-# define BIG_ENDIAN __BIG_ENDIAN
-# endif
-
-#endif // !BYTE_ORDER
-
-/* Macros to read and write 16, 32, and 64-bit quantities in a portable manner.
- These functions are implemented as macros rather than true functions as
- the need to adjust the memory pointers makes them somewhat painful to call
- in user code */
-
-#define mputInt64(memPtr,data) \
- *memPtr++ = ( unsigned char ) ( ( ( data ) >> 56 ) & 0xFF ), \
- *memPtr++ = ( unsigned char ) ( ( ( data ) >> 48 ) & 0xFF ), \
- *memPtr++ = ( unsigned char ) ( ( ( data ) >> 40 ) & 0xFF ), \
- *memPtr++ = ( unsigned char ) ( ( ( data ) >> 32 ) & 0xFF ), \
- *memPtr++ = ( unsigned char ) ( ( ( data ) >> 24 ) & 0xFF ), \
- *memPtr++ = ( unsigned char ) ( ( ( data ) >> 16 ) & 0xFF ), \
- *memPtr++ = ( unsigned char ) ( ( ( data ) >> 8 ) & 0xFF ), \
- *memPtr++ = ( unsigned char ) ( ( data ) & 0xFF )
-
-#define mputLong(memPtr,data) \
- *memPtr++ = ( unsigned char ) ( ( ( data ) >> 24 ) & 0xFF ), \
- *memPtr++ = ( unsigned char ) ( ( ( data ) >> 16 ) & 0xFF ), \
- *memPtr++ = ( unsigned char ) ( ( ( data ) >> 8 ) & 0xFF ), \
- *memPtr++ = ( unsigned char ) ( ( data ) & 0xFF )
-
-#define mputWord(memPtr,data) \
- *memPtr++ = ( unsigned char ) ( ( ( data ) >> 8 ) & 0xFF ), \
- *memPtr++ = ( unsigned char ) ( ( data ) & 0xFF )
-
-#define mputByte(memPtr,data) \
- *memPtr++ = ( unsigned char ) data
-
-#define mputBytes(memPtr,data,len) \
- memcpy (memPtr,data,len); \
- memPtr += len;
-
-#define mgetInt64(memPtr) \
- ( memPtr += 8, ( ( unsigned __int64 ) memPtr[ -8 ] << 56 ) | ( ( unsigned __int64 ) memPtr[ -7 ] << 48 ) | \
- ( ( unsigned __int64 ) memPtr[ -6 ] << 40 ) | ( ( unsigned __int64 ) memPtr[ -5 ] << 32 ) | \
- ( ( unsigned __int64 ) memPtr[ -4 ] << 24 ) | ( ( unsigned __int64 ) memPtr[ -3 ] << 16 ) | \
- ( ( unsigned __int64 ) memPtr[ -2 ] << 8 ) | ( unsigned __int64 ) memPtr[ -1 ] )
-
-#define mgetLong(memPtr) \
- ( memPtr += 4, ( ( unsigned __int32 ) memPtr[ -4 ] << 24 ) | ( ( unsigned __int32 ) memPtr[ -3 ] << 16 ) | \
- ( ( unsigned __int32 ) memPtr[ -2 ] << 8 ) | ( unsigned __int32 ) memPtr[ -1 ] )
-
-#define mgetWord(memPtr) \
- ( memPtr += 2, ((( unsigned short ) memPtr[ -2 ] << 8 ) | ( ( unsigned short ) memPtr[ -1 ] )) )
-
-#define mgetByte(memPtr) \
- ( ( unsigned char ) *memPtr++ )
-
-#if BYTE_ORDER == BIG_ENDIAN
-# define LE16(x) MirrorBytes16(x)
-# define LE32(x) MirrorBytes32(x)
-# define LE64(x) MirrorBytes64(x)
-#else
-# define LE16(x) (x)
-# define LE32(x) (x)
-# define LE64(x) (x)
-#endif
-
-#if BYTE_ORDER == LITTLE_ENDIAN
-# define BE16(x) MirrorBytes16(x)
-# define BE32(x) MirrorBytes32(x)
-# define BE64(x) MirrorBytes64(x)
-#else
-# define BE16(x) (x)
-# define BE32(x) (x)
-# define BE64(x) (x)
-#endif
-
-unsigned __int16 MirrorBytes16 (unsigned __int16 x);
-unsigned __int32 MirrorBytes32 (unsigned __int32 x);
-#ifndef TC_NO_COMPILER_INT64
-uint64 MirrorBytes64 (uint64 x);
-#endif
-void LongReverse ( unsigned __int32 *buffer , unsigned byteCount );
-
-#if defined(__cplusplus)
-}
-#endif
-
-#endif /* TC_ENDIAN_H */
+/*
+ Legal Notice: Some portions of the source code contained in this file were
+ derived from the source code of TrueCrypt 7.1a, which is
+ Copyright (c) 2003-2012 TrueCrypt Developers Association and which is
+ governed by the TrueCrypt License 3.0, also from the source code of
+ Encryption for the Masses 2.02a, which is Copyright (c) 1998-2000 Paul Le Roux
+ and which is governed by the 'License Agreement for Encryption for the Masses'
+ Modifications and additions to the original source code (contained in this file)
+ and all other portions of this file are Copyright (c) 2013-2016 IDRIX
+ and are governed by the Apache License 2.0 the full text of which is
+ contained in the file License.txt included in VeraCrypt binary and source
+ code distribution packages. */
+
+#ifndef TC_ENDIAN_H
+#define TC_ENDIAN_H
+
+#include "Common/Tcdefs.h"
+
+#if defined(__cplusplus)
+extern "C"
+{
+#endif
+
+#ifdef _WIN32
+
+# ifndef LITTLE_ENDIAN
+# define LITTLE_ENDIAN 1234
+# endif
+# ifndef BYTE_ORDER
+# define BYTE_ORDER LITTLE_ENDIAN
+# endif
+
+#elif !defined(BYTE_ORDER)
+
+# ifdef TC_MACOSX
+# include <machine/endian.h>
+# elif defined (TC_BSD)
+# include <sys/endian.h>
+# elif defined (TC_SOLARIS)
+# include <sys/types.h>
+# define LITTLE_ENDIAN 1234
+# define BIG_ENDIAN 4321
+# ifdef _BIG_ENDIAN
+# define BYTE_ORDER BIG_ENDIAN
+# else
+# define BYTE_ORDER LITTLE_ENDIAN
+# endif
+# else
+# include <endian.h>
+# endif
+
+# ifndef BYTE_ORDER
+# ifndef __BYTE_ORDER
+# error Byte order cannot be determined (BYTE_ORDER undefined)
+# endif
+
+# define BYTE_ORDER __BYTE_ORDER
+# endif
+
+# ifndef LITTLE_ENDIAN
+# define LITTLE_ENDIAN __LITTLE_ENDIAN
+# endif
+
+# ifndef BIG_ENDIAN
+# define BIG_ENDIAN __BIG_ENDIAN
+# endif
+
+#endif // !BYTE_ORDER
+
+/* Macros to read and write 16, 32, and 64-bit quantities in a portable manner.
+ These functions are implemented as macros rather than true functions as
+ the need to adjust the memory pointers makes them somewhat painful to call
+ in user code */
+
+#define mputInt64(memPtr,data) \
+ *memPtr++ = ( unsigned char ) ( ( ( data ) >> 56 ) & 0xFF ), \
+ *memPtr++ = ( unsigned char ) ( ( ( data ) >> 48 ) & 0xFF ), \
+ *memPtr++ = ( unsigned char ) ( ( ( data ) >> 40 ) & 0xFF ), \
+ *memPtr++ = ( unsigned char ) ( ( ( data ) >> 32 ) & 0xFF ), \
+ *memPtr++ = ( unsigned char ) ( ( ( data ) >> 24 ) & 0xFF ), \
+ *memPtr++ = ( unsigned char ) ( ( ( data ) >> 16 ) & 0xFF ), \
+ *memPtr++ = ( unsigned char ) ( ( ( data ) >> 8 ) & 0xFF ), \
+ *memPtr++ = ( unsigned char ) ( ( data ) & 0xFF )
+
+#define mputLong(memPtr,data) \
+ *memPtr++ = ( unsigned char ) ( ( ( data ) >> 24 ) & 0xFF ), \
+ *memPtr++ = ( unsigned char ) ( ( ( data ) >> 16 ) & 0xFF ), \
+ *memPtr++ = ( unsigned char ) ( ( ( data ) >> 8 ) & 0xFF ), \
+ *memPtr++ = ( unsigned char ) ( ( data ) & 0xFF )
+
+#define mputWord(memPtr,data) \
+ *memPtr++ = ( unsigned char ) ( ( ( data ) >> 8 ) & 0xFF ), \
+ *memPtr++ = ( unsigned char ) ( ( data ) & 0xFF )
+
+#define mputByte(memPtr,data) \
+ *memPtr++ = ( unsigned char ) data
+
+#define mputBytes(memPtr,data,len) \
+ memcpy (memPtr,data,len); \
+ memPtr += len;
+
+#define mgetInt64(memPtr) \
+ ( memPtr += 8, ( ( unsigned __int64 ) memPtr[ -8 ] << 56 ) | ( ( unsigned __int64 ) memPtr[ -7 ] << 48 ) | \
+ ( ( unsigned __int64 ) memPtr[ -6 ] << 40 ) | ( ( unsigned __int64 ) memPtr[ -5 ] << 32 ) | \
+ ( ( unsigned __int64 ) memPtr[ -4 ] << 24 ) | ( ( unsigned __int64 ) memPtr[ -3 ] << 16 ) | \
+ ( ( unsigned __int64 ) memPtr[ -2 ] << 8 ) | ( unsigned __int64 ) memPtr[ -1 ] )
+
+#define mgetLong(memPtr) \
+ ( memPtr += 4, ( ( unsigned __int32 ) memPtr[ -4 ] << 24 ) | ( ( unsigned __int32 ) memPtr[ -3 ] << 16 ) | \
+ ( ( unsigned __int32 ) memPtr[ -2 ] << 8 ) | ( unsigned __int32 ) memPtr[ -1 ] )
+
+#define mgetWord(memPtr) \
+ ( memPtr += 2, ((( unsigned short ) memPtr[ -2 ] << 8 ) | ( ( unsigned short ) memPtr[ -1 ] )) )
+
+#define mgetByte(memPtr) \
+ ( ( unsigned char ) *memPtr++ )
+
+#if BYTE_ORDER == BIG_ENDIAN
+# define LE16(x) MirrorBytes16(x)
+# define LE32(x) MirrorBytes32(x)
+# define LE64(x) MirrorBytes64(x)
+#else
+# define LE16(x) (x)
+# define LE32(x) (x)
+# define LE64(x) (x)
+#endif
+
+#if BYTE_ORDER == LITTLE_ENDIAN
+# define BE16(x) MirrorBytes16(x)
+# define BE32(x) MirrorBytes32(x)
+# define BE64(x) MirrorBytes64(x)
+#else
+# define BE16(x) (x)
+# define BE32(x) (x)
+# define BE64(x) (x)
+#endif
+
+unsigned __int16 MirrorBytes16 (unsigned __int16 x);
+unsigned __int32 MirrorBytes32 (unsigned __int32 x);
+#ifndef TC_NO_COMPILER_INT64
+uint64 MirrorBytes64 (uint64 x);
+#endif
+void LongReverse ( unsigned __int32 *buffer , unsigned byteCount );
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* TC_ENDIAN_H */