iBoot/lib/pki/libGiants/giantPlatformEmulation.h

182 lines
4.7 KiB
C

/* Copyright (c) 2004,2006-2007 Apple Inc. All Rights Reserved.
*
* NOTICE: USE OF THE MATERIALS ACCOMPANYING THIS NOTICE IS SUBJECT
* TO THE TERMS OF THE SIGNED "FAST ELLIPTIC ENCRYPTION (FEE) REFERENCE
* SOURCE CODE EVALUATION AGREEMENT" BETWEEN APPLE COMPUTER, INC. AND THE
* ORIGINAL LICENSEE THAT OBTAINED THESE MATERIALS FROM APPLE COMPUTER,
* INC. ANY USE OF THESE MATERIALS NOT PERMITTED BY SUCH AGREEMENT WILL
* EXPOSE YOU TO LIABILITY.
***************************************************************************
*
* giantPlatformEmulation.h - #defines for platform emulation.
*
* This file is NOT used in production code.
*/
#ifndef _GIANT_PLATFORM_EMULATION_H_
#define _GIANT_PLATFORM_EMULATION_H_
#define NDEBUG
#ifdef NDEBUG
#define GIANTS_DEBUG 0
#else
#define GIANTS_DEBUG 1
#endif
/*
* Emulation targets:
*
* #define _FEE_CUSTOM_XXX_CONFIG_ to 1 and fill in these blanks if
* you want to generate a test configuration which is not strictly related
* to the machine you're building for - e.g., build a 16-bit giant package on PPC.
*/
/* this one for emulating 16-bit CPU on Mac OS X / PPC */
#define _FEE_CUSTOM_16_CONFIG_ 1
/* this one for emulating 8-bit CPU on Mac OS X / PPC */
#define _FEE_CUSTOM_8_CONFIG_ 0
#if _FEE_CUSTOM_16_CONFIG_
/* 16-bit word size emulated on Mac OS X */
#include <stdint.h>
typedef unsigned char gi_uint8;
typedef uint16_t gi_uint16;
typedef uint32_t gi_uint32;
typedef uint16_t gi_size;
typedef uint16_t giantDigit;
typedef uint32_t giantDouble; /* two giant digits */
#define GI_GIANT_LOG2_BITS_PER_DIGIT 4
#elif _FEE_CUSTOM_8_CONFIG_
/* 8-bit word size emulated on Mac OS X */
#include <stdint.h>
typedef unsigned char gi_uint8;
typedef uint16_t gi_uint16;
typedef uint32_t gi_uint32;
typedef uint16_t gi_size;
typedef uint8_t giantDigit;
typedef uint16_t giantDouble; /* two giant digits */
#define GI_GIANT_LOG2_BITS_PER_DIGIT 3
#elif defined(__APPLE__) && defined(__ppc__)
/*
* Mac OS X on 32-bit PPC
*/
#include <stdint.h>
typedef unsigned char gi_uint8;
typedef uint16_t gi_uint16;
typedef uint32_t gi_uint32;
typedef uint32_t gi_size;
typedef uint32_t giantDigit;
typedef uint64_t giantDouble; /* two giant digits */
#define GI_GIANT_LOG2_BITS_PER_DIGIT 5
#elif defined(__APPLE__) && defined(__i386__)
/*
* Mac OS X on 32-bit Pentium
*/
#include <stdint.h>
typedef unsigned char gi_uint8;
typedef uint16_t gi_uint16;
typedef uint32_t gi_uint32;
typedef uint32_t gi_size;
typedef uint32_t giantDigit;
typedef uint64_t giantDouble; /* two giant digits */
#define GI_GIANT_LOG2_BITS_PER_DIGIT 5
#else
/*
* Other target goes here.
*/
#error Platform dependent work needed
#endif
/*
* Maximum size in bits of base integer in this package. For BBS, this is the
* size of the public 'n' parameter.
*/
#define GI_MAX_PRIME_SIZE_BITS 4096
/****
**** Optimization flags
****/
/*
* There are two implementations of some core arithmetic routines.
* Which one is faster depends highly on your implementation of the
* routines declared in giantPortCommon.h and implemented in either
* giantPort_Generic.h (as static inlines) or elsewhere (in C or
* possibly assembly language). Performance also depends on your
* platform's giantDouble performance. If giantDouble arithmetic
* is fast then use GI_ADDG_INLINE. Otherwise try !GI_ADDG_INLINE,
* measure the two, and pick the best one.
*/
#define GI_ADDG_INLINE 1
/*
* true : we don't have a platform-specific giant arithmetic module
* false : we do
*/
#define GI_GIANT_PORT_INLINE 1
/*
* GI_INLINE_SMALL_FUNCS
*
* When true, uses inlines instead of a small number of small functions.
* This is a tradeff of speed and less stack usage vs. code size.
*/
#define GI_INLINE_SMALL_FUNCS 1
/*
* GI_MACRO_SMALL_FUNCTIONS
*
* Like GI_INLINE_SMALL_FUNCS, except causes small functions to be implemented
* as macros. For platforms that don't support the 'inline' keyword.
*/
#define GI_MACRO_SMALL_FUNCTIONS 0
/*
* GI_SMALL_CRT_ENABLE
*
* This flag involves a tradeoff between code size and stack usage in the
* giantMod.c module. Setting this flag true increases code size and
* decreases stack usage.
*
* On a G4, the tradeoff is that setting this flag saves 384 bytes of
* stack space, at the cost of 1407 extra bytes of code.
*
* Note: this flag has no effect if GI_MODG_ENABLE is 0.
*/
#define GI_SMALL_CRT_ENABLE 1
/****
**** Library implementation flags
****/
/* standard library functions available here */
#define GI_HAVE_MEMCPY 1
#define GI_HAVE_BZERO 1
/* enable/disable modular arithmetic */
#define GI_MODG_ENABLE 1
/* enable/disable giantPrime.[ch] */
#define GI_PRIME_TEST_ENABLE 1
/* enable/disable ginverseMod() */
#define GI_INVERSE_MOD_ENABLE 1
#endif /* _GIANT_PLATFORM_EMULATION_H_ */