215 lines
7.8 KiB
C
215 lines
7.8 KiB
C
|
/* $NetBSD: ctk_endian.h,v 1.1.1.1 2001/01/27 08:07:43 itojun Exp $ */
|
|||
|
|
|||
|
/*
|
|||
|
* Cylink Corporation <EFBFBD> 1998
|
|||
|
*
|
|||
|
* This software is licensed by Cylink to the Internet Software Consortium to
|
|||
|
* promote implementation of royalty free public key cryptography within IETF
|
|||
|
* standards. Cylink wishes to expressly thank the contributions of Dr.
|
|||
|
* Martin Hellman, Whitfield Diffie, Ralph Merkle and Stanford University for
|
|||
|
* their contributions to Internet Security. In accordance with the terms of
|
|||
|
* this license, ISC is authorized to distribute and sublicense this software
|
|||
|
* for the practice of IETF standards.
|
|||
|
*
|
|||
|
* The software includes BigNum, written by Colin Plumb and licensed by Philip
|
|||
|
* R. Zimmermann for royalty free use and distribution with Cylink's
|
|||
|
* software. Use of BigNum as a stand alone product or component is
|
|||
|
* specifically prohibited.
|
|||
|
*
|
|||
|
* Disclaimer of All Warranties. THIS SOFTWARE IS BEING PROVIDED "AS IS",
|
|||
|
* WITHOUT ANY EXPRESSED OR IMPLIED WARRANTY OF ANY KIND WHATSOEVER. IN
|
|||
|
* PARTICULAR, WITHOUT LIMITATION ON THE GENERALITY OF THE FOREGOING, CYLINK
|
|||
|
* MAKES NO REPRESENTATION OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR
|
|||
|
* PURPOSE.
|
|||
|
*
|
|||
|
* Cylink or its representatives shall not be liable for tort, indirect,
|
|||
|
* special or consequential damages such as loss of profits or loss of
|
|||
|
* goodwill from the use or inability to use the software for any purpose or
|
|||
|
* for any reason whatsoever.
|
|||
|
*
|
|||
|
* EXPORT LAW: Export of the Foundations Suite may be subject to compliance
|
|||
|
* with the rules and regulations promulgated from time to time by the Bureau
|
|||
|
* of Export Administration, United States Department of Commerce, which
|
|||
|
* restrict the export and re-export of certain products and technical data.
|
|||
|
* If the export of the Foundations Suite is controlled under such rules and
|
|||
|
* regulations, then the Foundations Suite shall not be exported or
|
|||
|
* re-exported, directly or indirectly, (a) without all export or re-export
|
|||
|
* licenses and governmental approvals required by any applicable laws, or (b)
|
|||
|
* in violation of any applicable prohibition against the export or re-export
|
|||
|
* of any part of the Foundations Suite. All export licenses for software
|
|||
|
* containing the Foundations Suite are the sole responsibility of the licensee.
|
|||
|
*/
|
|||
|
|
|||
|
/**********************************************************************\
|
|||
|
* FILENAME: ctk_endian.h PRODUCT NAME:
|
|||
|
*
|
|||
|
* DESCRIPTION: header file of defines
|
|||
|
*
|
|||
|
* USAGE: Platform-dependend compilation modes header
|
|||
|
*
|
|||
|
*
|
|||
|
* Copyright (c) Cylink Corporation 1994. All rights reserved.
|
|||
|
*
|
|||
|
* REVISION HISTORY:
|
|||
|
*
|
|||
|
\**********************************************************************/
|
|||
|
|
|||
|
#ifndef CTK_ENDIAN_H /* Prevent multiple inclusions of same header file */
|
|||
|
#define CTK_ENDIAN_H
|
|||
|
|
|||
|
#include <sys/types.h>
|
|||
|
#include <ctype.h>
|
|||
|
#include <arpa/nameser_compat.h>
|
|||
|
#include "lbn.h"
|
|||
|
|
|||
|
#if (defined(BIG_ENDIAN) || defined(_BIG_ENDIAN)) && !(defined(LITTLE_ENDIAN) || defined(_LITTLE_ENDIAN))
|
|||
|
# undef BIG_ENDIAN
|
|||
|
# undef _BIG_ENDIAN
|
|||
|
# define BIG_ENDIAN 4321
|
|||
|
# define LITTLE_ENDIAN 1234
|
|||
|
# define BYTE_ORDER BIG_ENDIAN
|
|||
|
|
|||
|
#elif !(defined(BIG_ENDIAN) || defined(_BIG_ENDIAN)) && (defined(LITTLE_ENDIAN) || defined(_LITTLE_ENDIAN))
|
|||
|
# undef LITTLE_ENDIAN
|
|||
|
# undef _LITTLE_ENDIAN
|
|||
|
# define BIG_ENDIAN 4321
|
|||
|
# define LITTLE_ENDIAN 1234
|
|||
|
# define BYTE_ORDER LITTLE_ENDIAN
|
|||
|
#endif
|
|||
|
|
|||
|
#if !defined(BYTE_ORDER) || \
|
|||
|
(BYTE_ORDER != BIG_ENDIAN && BYTE_ORDER != LITTLE_ENDIAN)
|
|||
|
/* you must determine what the correct bit order is for
|
|||
|
* your compiler - the next line is an intentional error
|
|||
|
* which will force your compiles to bomb until you fix
|
|||
|
* the above macros.
|
|||
|
*/
|
|||
|
# if !defined(CTK_LITTLE_ENDIAN) && !defined(CTK_BIG_ENDIAN)
|
|||
|
# error "Undefined or invalid BYTE_ORDER";
|
|||
|
# endif
|
|||
|
#endif
|
|||
|
|
|||
|
#if !defined(CTK_BIG_ENDIAN) && !defined(CTK_LITTLE_ENDIAN)
|
|||
|
# ifdef BYTE_ORDER
|
|||
|
# if (BYTE_ORDER == LITTLE_ENDIAN)
|
|||
|
# define CTK_LITTLE_ENDIAN
|
|||
|
# elif (BYTE_ORDER == BIG_ENDIAN)
|
|||
|
# define CTK_BIG_ENDIAN
|
|||
|
# else
|
|||
|
# error CAN NOT determine ENDIAN with BYTE_ORDER
|
|||
|
# endif
|
|||
|
# elif defined(_LITTLE_ENDIAN)
|
|||
|
# define CTK_LITTLE_ENDIAN
|
|||
|
# elif defined(_BIG_ENDIAN)
|
|||
|
# define CTK_BIG_ENDIAN
|
|||
|
# else
|
|||
|
# error CAN NOT determine ENDIAN
|
|||
|
# endif
|
|||
|
#endif
|
|||
|
|
|||
|
#if !defined(CTK_BIG_ENDIAN) && !defined(CTK_LITTLE_ENDIAN)
|
|||
|
# error NO CTK_???_ENDIAN defined
|
|||
|
#endif
|
|||
|
|
|||
|
#if defined( CTK_LITTLE_ENDIAN ) && defined( CTK_BIG_ENDIAN )
|
|||
|
# error Use only one define CPU type CTK_LITTLE or BIG ENDIAN.
|
|||
|
#endif
|
|||
|
|
|||
|
#if !defined( ORD_32 ) && !defined( ORD_16 )
|
|||
|
# ifdef BNSIZE64
|
|||
|
# error BNSIZE64 do not know how to do this
|
|||
|
# elif defined(BNSIZE32)
|
|||
|
# define ORD_32
|
|||
|
# elif defined(BNSIZE16)
|
|||
|
# define ORD_16
|
|||
|
# elif !defined( UINT_MAX) /* No <limits.h> */
|
|||
|
# define ORD_16 /* default */
|
|||
|
# else
|
|||
|
# if ULONG_MAX == 0xffffffff
|
|||
|
# define ORD_16
|
|||
|
# elif ULONG_MAX > 0xffffffff
|
|||
|
# define ORD_32
|
|||
|
# endif
|
|||
|
# endif
|
|||
|
#endif
|
|||
|
|
|||
|
#if !defined( ORD_32 ) && !defined( ORD_16 )
|
|||
|
#error Not defined basic word type ORD_32 or ORD_16.
|
|||
|
#endif
|
|||
|
|
|||
|
#if defined( ORD_32 ) && defined( ORD_16 )
|
|||
|
#error Use only one define basic word type ORD_32 or ORD_16.
|
|||
|
#endif
|
|||
|
|
|||
|
|
|||
|
#ifdef ORD_16
|
|||
|
/* typedef unsigned short ord; deleted by ogud@tis.com 1998/9/14 */
|
|||
|
typedef u_int16_t ord;
|
|||
|
#define BITS_COUNT 16
|
|||
|
#define MAXDIGIT (ord)(0xFFFF)
|
|||
|
#endif
|
|||
|
|
|||
|
#ifdef ORD_32
|
|||
|
/* typedef unsigned long ord; deleted by ogud@tis.com 1998/9/14 */
|
|||
|
typedef u_int32_t ord;
|
|||
|
#define BITS_COUNT 32
|
|||
|
#define MAXDIGIT (ord)(0xFFFFFFFF)
|
|||
|
#endif /* ORD_32 */
|
|||
|
|
|||
|
|
|||
|
|
|||
|
#define CALLOC(var,type,len) \
|
|||
|
var=(type *)calloc(len,1); \
|
|||
|
if (var==NULL) \
|
|||
|
status=ERR_ALLOC
|
|||
|
#ifdef CTK_BIG_ENDIAN
|
|||
|
#define ALIGN_CALLOC(i,o,l) \
|
|||
|
CALLOC(o,ord,l)
|
|||
|
#define ALIGN_CALLOC_COPY(i,o,l) \
|
|||
|
CALLOC(o,ord,l); \
|
|||
|
if (o) ByteOrd(i,l,o)
|
|||
|
#define ALIGN_CALLOC_MOVE(i,o,l) \
|
|||
|
CALLOC(o,ord,l); \
|
|||
|
if (o) memcpy(o,i,l)
|
|||
|
#define ALIGN_FREE(o) \
|
|||
|
free ( o )
|
|||
|
#define ALIGN_COPY_FREE(o,i,l) \
|
|||
|
if ((o) && (status==SUCCESS)) \
|
|||
|
OrdByte(o,l,i); \
|
|||
|
free (o)
|
|||
|
#define ALIGN_MOVE_FREE(o,i,l) \
|
|||
|
if ((o) && (status==SUCCESS)) \
|
|||
|
memcpy(i,o,l); \
|
|||
|
memset(o,0,l); \
|
|||
|
free (o)
|
|||
|
#else
|
|||
|
#define ALIGN_CALLOC(i,o,l) o=(ord *)i
|
|||
|
#define ALIGN_CALLOC_COPY(i,o,l) o=(ord *)i
|
|||
|
#define ALIGN_CALLOC_MOVE(i,o,l) o=(ord *)i
|
|||
|
#define ALIGN_FREE(o) ;
|
|||
|
#define ALIGN_COPY_FREE(o,i,l) ;
|
|||
|
#define ALIGN_MOVE_FREE(o,i,l) ;
|
|||
|
#endif
|
|||
|
#define DSS_P_ALIGN_CALLOC_COPY(i,o,l) \
|
|||
|
if (i) \
|
|||
|
{ ALIGN_CALLOC_COPY(i,o,l);} \
|
|||
|
else \
|
|||
|
o = &DSS_P_NUMBERS[DSS_NUM_INDEX[(l-DSS_LENGTH_MIN)/LENGTH_STEP]]
|
|||
|
|
|||
|
#define DSS_G_ALIGN_CALLOC_COPY(i,o,l) \
|
|||
|
if (i) \
|
|||
|
{ ALIGN_CALLOC_COPY(i,o,l);} \
|
|||
|
else \
|
|||
|
o = &DSS_G_NUMBERS[DSS_NUM_INDEX[(l-DSS_LENGTH_MIN)/LENGTH_STEP]]
|
|||
|
|
|||
|
#define DSS_Q_ALIGN_CALLOC_COPY(i,o,l) \
|
|||
|
if (i) \
|
|||
|
{ ALIGN_CALLOC_COPY(i,o,l);} \
|
|||
|
else \
|
|||
|
o = DSS_Q_NUMBER
|
|||
|
|
|||
|
#define DSS_ALIGN_FREE(o,i) \
|
|||
|
if (i) \
|
|||
|
{ ALIGN_FREE(o);}
|
|||
|
#endif /* CTK_ENDIAN_H */
|