📄 crypt.h
字号:
/****************************************************************************
* *
* cryptlib Internal General Header File *
* Copyright Peter Gutmann 1992-2003 *
* *
****************************************************************************/
#ifndef _CRYPT_DEFINED
#define _CRYPT_DEFINED
/* Various compilers handle includes in subdirectories differently. Most
will work with paths from a root directory. Macintoshes don't recognise
'/'s as path delimiters, but work around it by scanning all subdirectories
and treating the files as if they were in the same directory (INC_ALL).
Microsoft C, in a braindamaged exception to all other compilers, treats
the subdirectory as the root (INC_CHILD). The Tandem NSK (Guardian)
doesn't have subdirectories, and the C compiler zaps '.'s, truncates
filenames to 7 characters, and appends a 'h' to the name (so that
asn1misc.h becomes asn1mish). This unfortunately requires a bit of
renaming for header files. Tandem OSS (Unix services) on the other hand
is just like Unix, so we explicitly distinguish between the two.
There are also a few systems that have somewhat special requirements,
these get their own OS-specific include defines */
#if defined( SYMANTEC_C ) && !defined( INC_ALL )
#error You need to predefine INC_ALL in your project file
#elif defined( _MSC_VER ) && !defined( INC_CHILD )
#error You need to predefine INC_CHILD in your project/make file
#endif /* Checks for various compiler/OS-dependant include paths */
/* If we're on a new enough version of VC++ or Metrowerks, set a flag to
only include header files once */
#if ( defined( _MSC_VER ) && ( _MSC_VER >= 1000 ) ) || defined ( __MWERKS__ )
#pragma once
#endif /* VC++ 5.0 or higher, Metrowerks */
/* If we're building under Win32, don't haul in the huge amount of cruft
that windows.h brings with it. We need to define these values before
we include cryptlib.h since this is where windows.h is included */
#if ( defined( _WINDOWS ) || defined( WIN32 ) || defined( _WIN32 ) || \
defined( __WIN32__ ) ) && !defined( _SCCTK )
#define NOATOM /* Atom Manager routines */
#define NOMCX /* Modem Configuration Extensions */
/*#define NOCLIPBOARD // Clipboard routines, needed for randomness polling */
#define NOCOLOR /* Screen colors */
#define NOCOMM /* COMM driver routines */
#define NOCTLMGR /* Control and Dialog routines */
#define NODEFERWINDOWPOS /* DeferWindowPos routines */
#define NODRAWTEXT /* DrawText() and DT_* */
#define NOGDI /* All GDI defines and routines */
#define NOGDICAPMASKS /* CC_*, LC_*, PC_*, CP_*, TC_*, RC_ */
#define NOHELP /* Help engine interface */
#define NOICONS /* IDI_* */
#define NOKANJI /* Kanji support stuff */
#define NOKEYSTATES /* MK_* */
#define NOMB /* MB_* and MessageBox() */
#define NOMCX /* Modem Configuration Extensions */
#define NOMEMMGR /* GMEM_*, LMEM_*, GHND, LHND, etc */
#define NOMENUS /* MF_* */
#define NOMETAFILE /* typedef METAFILEPICT */
#define NOMSG /* typedef MSG and associated routines */
#define NONLS /* NLS routines, needed for cert charset handling */
#define NOPROFILER /* Profiler interface */
#define NORASTEROPS /* Binary and Tertiary raster ops */
#define NOSCROLL /* SB_* and scrolling routines */
#define NOSERVICE /* All Service Controller routines, SERVICE_* */
#define NOSHOWWINDOW /* SW_* */
#define NOSOUND /* Sound driver routines */
#define NOSYSCOMMANDS /* SC_* */
#define NOSYSMETRICS /* SM_* */
#define NOTEXTMETRIC /* typedef TEXTMETRIC and associated routines */
#define NOVIRTUALKEYCODES /* VK_* */
#define NOWH /* SetWindowsHook and WH_* */
#define NOWINMESSAGES /* WM_*, EM_*, LB_*, CB_* */
#define NOWINOFFSETS /* GWL_*, GCL_*, associated routines */
#define NOWINSTYLES /* WS_*, CS_*, ES_*, LBS_*, SBS_*, CBS_* */
#define OEMRESOURCE /* OEM Resource values */
#endif /* Win32 */
/* If the global cryptlib header hasn't been included yet, include it now */
#ifndef _CRYPTLIB_DEFINED
#include "cryptlib.h"
#endif /* _CRYPTLIB_DEFINED */
/****************************************************************************
* *
* OS-Specific Defines *
* *
****************************************************************************/
/* To build the static .LIB under Win32, uncomment the following define (this
it not recommended since the init/shutdown is no longer thread-safe). In
theory it should be possible to detect the build of a DLL vs a LIB with
the _DLL define which is set when the /MD (multithreaded DLL) option is
used, however fscking VC++ only defines _DLL when /MD is used *and* it's
linked with the MT DLL runtime. If it's linked with the statically
linked runtime, _DLL isn't defined, which would result in the unsafe
LIB version being built as a DLL */
/* #define STATIC_LIB */
/* Try and figure out if we're running under Windows and/or Win32. We have
to jump through all sorts of hoops later on, not helped by the fact that
the method of detecting Windows at compile time changes with different
versions of Visual C (it's different for each of VC 2.0, 2.1, 4.0, and
4.1. It actually remains the same after 4.1) */
#if !defined( __WINDOWS__ ) && ( defined( _Windows ) || defined( _WINDOWS ) )
#define __WINDOWS__
#endif /* !__WINDOWS__ && ( _Windows || _WINDOWS ) */
#if !defined( __WIN32__ ) && ( defined( WIN32 ) || defined( _WIN32 ) )
#ifndef __WINDOWS__
#define __WINDOWS__
#endif /* __WINDOWS__ */
#define __WIN32__
#endif /* !__WIN32__ && ( WIN32 || _WIN32 ) */
#if defined( __WINDOWS__ ) && !defined( __WIN32__ )
#define __WIN16__
#endif /* __WINDOWS__ && !__WIN32__ */
/* In some cases we're using a DOS or Windows system as a cross-development
platform, if we are we add extra defines to turn off some Windows-
specific features */
#ifdef _SCCTK
#define __IBM4758__
#endif /* IBM 4758 cross-compiled under Windows */
/* If we're compiling under VC++ with the maximum level of warning, turn off
some of the more irritating warnings */
#if defined( _MSC_VER )
#pragma warning( disable: 4018 ) /* Comparing signed <-> unsigned value */
#pragma warning( disable: 4127 ) /* Conditional is constant: while( TRUE ) */
#endif /* Visual C++ */
/* If we're using a DOS compiler and it's not a 32-bit one, record this.
__MSDOS__ is predefined by a number of compilers, so we use __MSDOS16__
for stuff that is 16-bit DOS specific, and __MSDOS32__ for stuff that
is 32-bit DOS specific */
#if defined( __MSDOS__ ) && !defined( __MSDOS32__ )
#define __MSDOS16__
#endif /* 16-bit DOS */
/* Make the Tandem NSK and Macintosh defines look a bit more like the usual
ANSI defines used to identify the other OS types */
#ifdef __TANDEM
#define __TANDEMNSK__
#endif /* Tandem NSK */
#if defined( __MWERKS__ ) || defined( SYMANTEC_C ) || defined( __MRC__ )
#define __MAC__
#endif /* Macintosh */
/* If we're compiling on the AS/400, make enums a fixed size rather than
using the variable-length values that IBM compilers default to, and force
strings into a readonly segment (by default they're writeable) */
#if defined( __OS400__ ) || defined( __ILEC400__ )
#define __AS400__
#pragma enumsize( 4 )
#pragma strings( readonly )
#define EBCDIC_CHARS
#endif /* AS/400 */
/* If we're compiling under MVS or VM/CMS, make enums a fixed size rather
than using the variable-length values that IBM compilers default to */
#if defined( __MVS__ ) || defined( __VMCMS__ )
#pragma enum( 4 )
#define USE_ETOA /* Use built-in ASCII <-> EBCDIC conversion */
#define EBCDIC_CHARS
#endif /* __MVS__ */
/* Some encryption algorithms that rely on longints having 32 bits won't
work on 64- or 128-bit machines due to problems with sign extension and
whatnot. The following define can be used to enable special handling for
processors with a > 32 bit word size */
#include <limits.h>
#if ULONG_MAX > 0xFFFFFFFFUL
#define _BIG_WORDS
#endif /* 64-bit system */
/* Useful data types */
typedef unsigned char BYTE;
#ifdef __WIN32__
#define BOOLEAN int
#else
typedef int BOOLEAN;
#endif /* __WIN32__ */
/* If we're using DOS or Windows as a cross-development platform, we need
the OS-specific value defined initially to get the types right but don't
want it defined later on since the target platform won't really be
running DOS or Windows, so we undefine it after the types have been sorted
out */
#ifdef __IBM4758__
#undef __MSDOS__
#undef __WINDOWS__
#undef __WIN32__
#endif /* IBM 4758 */
/* If we're building the Win32 kernel driver version, include the DDK
headers */
#if defined( __WIN32__ ) && defined( NT_DRIVER )
#include <ntddk.h>
#endif /* NT kernel driver */
/* In 16-bit environments the BSS data is large enough that it overflows the
(64K) BSS segment. Because of this we move as much of it as possible into
its own segment with the following define */
#if defined( __WIN16__ )
#define FAR_BSS far
#else
#define FAR_BSS
#endif /* 16-bit systems */
/* Some systems (typically 16-bit or embedded ones) have rather limited
amounts of memory available, if we're building on one of these we limit
the size of some of the buffers that we use */
#if defined( __MSDOS16__ ) || defined( __TANDEMNSK__ ) || \
defined( __uClinux__ )
#define CONFIG_CONSERVE_MEMORY
#endif /* MSDOS || Win16 || Tandem NSK */
/* On systems that support dynamic loading, we bind various drivers and
libraries at runtime rather than at compile time. Under Windows this is
fairly easy but under Unix it's only supported selectively and may be
buggy or platform-specific */
#if defined( __WINDOWS__ ) || \
( defined( __UNIX__ ) && \
( ( defined( sun ) && OSVERSION > 4 ) || defined( __linux__ ) || \
defined( _AIX ) || ( defined( __APPLE__ ) && !defined( __MAC__ ) ) ) )
#define DYNAMIC_LOAD
/* Macros to map OS-specific dynamic-load values to generic ones */
#if defined( __WINDOWS__ )
#define INSTANCE_HANDLE HINSTANCE
#define NULL_INSTANCE ( HINSTANCE ) NULL
#define DynamicLoad( name ) LoadLibrary( name )
#define DynamicUnload FreeLibrary
#define DynamicBind GetProcAddress
#elif defined( __UNIX__ )
#if !defined( __APPLE__ )
#include <dlfcn.h>
#endif /* Mac OS X */
#define INSTANCE_HANDLE void *
#define NULL_INSTANCE NULL
#define DynamicLoad( name ) dlopen( name, RTLD_LAZY )
#define DynamicUnload dlclose
#define DynamicBind dlsym
#elif defined __VMCMS__
#include <dll.h>
#define INSTANCE_HANDLE dllhandle *
#define NULL_INSTANCE NULL
#define DynamicLoad( name ) dllload( name, RTLD_LAZY )
#define DynamicUnload dllfree
#define DynamicBind dlqueryfn
#endif /* OS-specific instance handles */
#endif /* Windows || Some Unix versions */
/* Win32 consists of Win95/98/ME and WinNT/2000/XP, Win95 doesn't have a
number of the functions and services that exist in NT so we need to adapt
the code based on the Win32 variant. The following flag records which OS
variant we're crawling under */
#ifdef __WIN32__
extern BOOLEAN isWin95;
#endif /* Win32 */
/* Since the Win32 randomness-gathering uses a background randomness polling
thread, we can't build a Win32 version with NO_THREADS */
#if defined( __WIN32__ ) && defined( NO_THREADS )
#error The Win32 version of cryptlib must have threading enabled
#endif /* Win32 without threading */
/* Boolean constants */
#ifndef TRUE
#define FALSE 0
#define TRUE !FALSE
#endif /* Boolean values */
/* If the endianness is not defined and the compiler can tell us what
endianness we've got, use this in preference to all other methods. This
is only really necessary on non-Unix systems since the makefile runtime
test will tell us the endianness under Unix */
#if defined( CONFIG_LITTLE_ENDIAN ) || defined( CONFIG_BIG_ENDIAN )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -