📄 test.h
字号:
/****************************************************************************
* *
* cryptlib Test Routines Header File *
* Copyright Peter Gutmann 1995-2007 *
* *
****************************************************************************/
/* Define the following to enable/disable various blocks of tests. Note
that the self-test uses a sizeable amount of automatic data, on 16-bit
systems it'll probably be necessary to run each test individually rather
than in groups as arranged below */
#if 1
#define TEST_SELFTEST /* Perform internal self-test */
#define TEST_LOWLEVEL /* Test low-level functions */
#define TEST_RANDOM /* Test randomness functions */
#define TEST_CONFIG /* Test configuration functions */
#define TEST_MIDLEVEL /* Test high-level encr/sig.functions */
#endif /* 0 */
#if 1
#define TEST_CERT /* Test certificate management functions */
#define TEST_KEYSET /* Test keyset read functions */
#define TEST_CERTPROCESS /* Test certificate handling/CA management */
#endif /* 0 */
#if 1
#define TEST_HIGHLEVEL /* Test high-level encr/sig.functions */
#define TEST_ENVELOPE /* Test enveloping functions */
#endif /* 0 */
#if 1
#define TEST_SESSION /* Test session functions */
#define TEST_SESSION_LOOPBACK/* Test session functions via local loopback */
/*#define TEST_USER // Test user management functions */
#endif /* 0 */
/* The crypto device tests are disabled by default since relatively few users
will have a crypto device set up so leaving them enabled by default would
just produce a cascade of device-not-present warnings */
/* #define TEST_DEVICE */
#if defined( TEST_DEVICE )
#ifndef TEST_LOWLEVEL
#define TEST_LOWLEVEL
#endif /* TEST_LOWLEVEL */
#ifndef TEST_ENVELOPE
#define TEST_ENVELOPE
#endif /* TEST_ENVELOPE */
#endif /* Low-level and envelope tests are called by the device tests */
/* Some of the device tests can be rather slow, the following defines disable
these tests for speed reasons. Note that the Fortezza test can be further
cut down by not performing the CAW test (which erases any existing data on
the card), this is turned off by default in testdev.c */
/* #define TEST_DEVICE_FORTEZZA */
/* DH and KEA can't be tested because they use cryptlib-internal mechanisms,
however by using a custom-modified cryptlib it's possible to test at
least part of the DH implementation. If the following is defined, the
DH key load will be tested */
/* #define TEST_DH */
/* To test the code under Windows CE:
- If PB can't start the emulator, start it manually via Tools | Configure
Platform Manager | StandardSDK Emulator | Properties | Test.
- Before running the self-test for the first time, from the emulator
select Folder Sharing, share the test subdirectory, which will appear
as \\Storage Card\ (sharing it while an app is running may crash the
emulator).
- If eVC++ can't connect to the emulator, enable the WCE Config toolbar,
frob all the settings (which have only one option anyway). VC++ will
rebuild everything (with exactly the same settings as before), and
then it'll work.
- Only cl32ce.dll can be run in the debugger, test32ce.exe fails with
some unknown error code.
- To test the randomness polling in the emulated environment, first run
the Remote Kernel Tracker, which installs the ToolHelp DLL (this isn't
installed by default) */
/* When commenting out code for testing, the following macro displays a
warning that the behaviour has been changed as well as the location of
the change */
#if defined( __MVS__ ) || defined( __VMCMS__ ) || defined( __ILEC400__ )
#define KLUDGE_WARN( str ) \
{ \
char fileName[ 1000 ]; \
strncpy( fileName, __FILE__, 1000 ); \
fileName[ 999 ] = '\0'; \
__atoe( fileName ); \
printf( "Kludging " str ", file %s, line %d.\n", fileName, __LINE__ ); \
}
#else
#define KLUDGE_WARN( str ) \
printf( "Kludging " str ", file " __FILE__ ", line %d.\n", __LINE__ );
#endif /* ASCII vs.EBCDIC strings */
/* Include univerally-needed headers */
#if defined( _WIN32_WCE ) && _WIN32_WCE < 400
#define assert( x )
#else
#include <assert.h>
#endif /* Systems without assert() */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
/* Various useful types */
#define BOOLEAN int
#define BYTE unsigned char
#ifndef TRUE
#define FALSE 0
#define TRUE !FALSE
#endif /* TRUE */
/* Sentinel value used to denote non-data/non-values */
#define SENTINEL -1000
/* There are a few OSes broken enough not to define the standard exit codes
(SunOS springs to mind) so we define some sort of equivalent here just
in case */
#ifndef EXIT_SUCCESS
#define EXIT_SUCCESS 0
#define EXIT_FAILURE !EXIT_SUCCESS
#endif /* EXIT_SUCCESS */
/* Although min() and max() aren't in the ANSI standard, most compilers have
them in one form or another, but just enough don't that we need to define
them ourselves in some cases */
#if !defined( min )
#ifdef MIN
#define min MIN
#define max MAX
#else
#define min( a, b ) ( ( ( a ) < ( b ) ) ? ( a ) : ( b ) )
#define max( a, b ) ( ( ( a ) > ( b ) ) ? ( a ) : ( b ) )
#endif /* Various min/max macros */
#endif /* !min/max */
/* If we're using a 16-bit compiler, record this */
#if defined( __MSDOS__ ) && !defined( __MSDOS32__ )
#define __MSDOS16__
#endif /* 16-bit DOS */
#if defined( _MSC_VER ) && ( _MSC_VER <= 800 )
#define __WIN16__
#endif /* 16-bit Windows */
/* It's useful to know if we're running under Windows to enable Windows-
specific processing */
#if defined( _WINDOWS ) || defined( WIN32 ) || defined( _WIN32 ) || \
defined( _WIN32_WCE )
#define __WINDOWS__
#endif /* _WINDOWS || WIN32 || _WIN32 */
/* If we're running in an environment with a Unicode API, we have to be able
to function with both Unicode and ASCII strings */
#ifdef __WINDOWS__
#if defined( _WIN32_WCE )
#undef TEXT
#define TEXT( x ) L ## x
#define paramStrlen( x ) ( wcslen( x ) * sizeof( wchar_t ) )
#define paramStrcmp( x, y ) wcscmp( x, y )
#define UNICODE_STRINGS
#elif ( defined( WIN32 ) || defined( _WIN32 ) ) && 0
/* Facility to test WinCE Unicode handling under Win32 */
#undef TEXT
#define TEXT( x ) L ## x
#define paramStrlen( x ) ( wcslen( x ) * sizeof( wchar_t ) )
#define paramStrcmp( x, y ) wcscmp( x, y )
#define UNICODE_STRINGS
#else
#undef TEXT /* Already defined in windows.h */
#define TEXT( x ) x
#define paramStrlen( x ) strlen( x )
#define paramStrcmp( x, y ) strcmp( x, y )
#endif /* Windows variants */
#else
#define TEXT( x ) x
#define paramStrlen( x ) strlen( x )
#define paramStrcmp( x, y ) strcmp( x, y )
#endif /* Unicode vs. ASCII API */
/* In certain memory-starved environments we have to kludge things to help
the compiler along. The following define tells the compiler to move BSS
data outside the default data segment */
#if defined( _MSC_VER ) && ( _MSC_VER <= 800 )
#define FAR_BSS far
#else
#define FAR_BSS
#endif /* Win16 */
/* VC++ 2005 and newer warn if we use non-TR 24731 stdlib functions, since
this is only for the test code we disable the warnings */
#if defined( _MSC_VER ) && ( _MSC_VER >= 1400 )
#pragma warning( disable: 4996 )
#endif /* VC++ 2005 or newer */
/* Generic buffer size and dynamically-allocated file I/O buffer size. The
generic buffer has to be of a reasonable size so that we can handle
S/MIME signature chains, the file buffer should be less than the 16-bit
INT_MAX for testing on 16-bit machines and less than 32K for testing on
the (16-bit DOS-derived) Watcom C 10 */
#if defined( __MSDOS16__ ) || defined( __WIN16__ )
#define BUFFER_SIZE 4096
#define FILEBUFFER_SIZE 20000
#elif defined( __QNX__ ) && defined( __WATCOMC__ ) && ( __WATCOMC__ < 1100 )
#define BUFFER_SIZE 8192
#define FILEBUFFER_SIZE 20000
#else
#define BUFFER_SIZE 16384
#define FILEBUFFER_SIZE 32768
#endif /* __MSDOS__ && __TURBOC__ */
#define FILENAME_BUFFER_SIZE 512
/* Explicit includes needed by Palm OS, see the comment in crypt.h for more
details */
#ifdef __PALMSOURCE__
#include <ctype.h>
#include <string.h>
#endif /* __PALMSOURCE__ */
/* The ability to get rid of annoying warnings via the project file in BC++
5.0x is completely broken, the only way to do this is via pragmas in the
source code */
#if defined( __BORLANDC__ ) && ( __BORLANDC__ < 0x550 )
#pragma warn -ucp /* Signed/unsigned char assignment */
#endif /* Broken BC++ 5.0x warning handling */
/* Helper function to make tracking down errors on systems with no console a
bit less painful */
#ifdef _WIN32_WCE
#define printf wcPrintf
#define puts wcPuts
void wcPrintf( const char *format, ... );
void wcPuts( const char *string );
#endif /* Console-less environments */
/* Try and detect OSes that have threading support, this is needed for some
operations like async keygen and sleep calls */
#if( ( defined( _AIX ) || defined( __APPLE__ ) || defined( __FreeBSD__ ) || \
defined( __NetBSD__ ) || defined( __linux__ ) || \
( defined( sun ) && ( OSVERSION > 4 ) ) ) && !defined( NO_THREADS ) )
#define UNIX_THREADS
/* We need to include pthread.h at this point because any number of other
include files perform all sorts of peculiar and unnatural acts in order
to make their functions (transparently) thread-safe, triggered by the
detection of values defined in pthread.h. Because of this we need to
include it here as a rubber chicken before other files are pulled in
even though it's not explicitly needed */
#include <pthread.h>
#endif /* AIX || OS/X || Linux || Slowaris */
#if ( defined( WIN32 ) || defined( _WIN32 ) ) && !defined( _WIN32_WCE )
/* We don't test the loopback functionality under WinCE because the
_beginthreadx() vs. CreateThread() issue (normally hidden in
cryptos.h) causes all sorts of problems */
#define WINDOWS_THREADS
#include <process.h>
#endif /* Win32 */
#if defined( __IBMC__ ) && defined( __OS2__ )
#define OS2_THREADS
#endif /* OS/2 */
/* The loopback sessions require threading support so we only enable their
use if this is present */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -