#ifndef MD5_H #define MD5_H #include "cdflib.h" /* The following tests optimise behaviour on little-endian machines, where there is no need to reverse the byte order of 32 bit words in the MD5 computation. By default, HIGHFIRST is defined, which indicates we're running on a big-endian (most significant byte first) machine, on which the byteReverse function in md5.c must be invoked. However, byteReverse is coded in such a way that it is an identity function when run on a little-endian machine, so calling it on such a platform causes no harm apart from wasting time. If the platform is known to be little-endian, we speed things up by undefining HIGHFIRST, which defines byteReverse as a null macro. Doing things in this manner insures we work on new platforms regardless of their byte order. */ #undef HIGHFIRST #if defined(sun) || defined(MIPSEB) || defined(IBMRS) || \ defined(HP) || defined(NeXT) || defined(mac) || \ defined(PPC) || defined(macosX) # define HIGHFIRST #endif /* On machines where "long" is 64 bits, we need to declare uint32 as something guaranteed to be 32 bits. */ #if defined(alphaosf) || defined(IRIX64bit) || defined(SOLARIS64) || \ defined(__amd64) || defined(__x86_64__) || defined(__ia64__) typedef unsigned int uint32; #else typedef unsigned long uint32; #endif struct MD5Context { uint32 buf[4]; uint32 bits[2]; unsigned char in[64]; }; void byteReverse PROTOARGs(( unsigned char *buf, unsigned longs )); VISIBLE_PREFIX void MD5Init PROTOARGs(( struct MD5Context *ctx )); VISIBLE_PREFIX void MD5Update PROTOARGs(( struct MD5Context *ctx, unsigned char *buf, unsigned len )); VISIBLE_PREFIX void MD5Final PROTOARGs(( unsigned char *digest, struct MD5Context *ctx )); VISIBLE_PREFIX void MD5Transform PROTOARGs(( uint32 *buf, uint32 *in )); /* * This is needed to make RSAREF happy on some MS-DOS compilers. */ typedef struct MD5Context MD5_CTX; /* Define CHECK_HARDWARE_PROPERTIES to have main,c verify byte order and uint32 settings. */ #define CHECK_HARDWARE_PROPERTIES #endif /* CDFMD5_H */