| 1 |
#define _MD5_EXPLICIT_INIT 1 |
| 2 |
|
| 3 |
#include "md5c.c" |
| 4 |
|
| 5 |
/* Pascal interface |
| 6 |
It's easier to define Pascal functions in THINK C than |
| 7 |
it is to call C functions from THINK Pascal |
| 8 |
*/ |
| 9 |
|
| 10 |
/* THINK Pascal < 4 doesn't load libraries' DATA resources. |
| 11 |
Call this function once to initialize global state, but |
| 12 |
only if you need it! |
| 13 |
*/ |
| 14 |
pascal void InitLibP() |
| 15 |
{ |
| 16 |
PADDING = (unsigned char *) NewPtrClear(64); |
| 17 |
PADDING[0] = 0x80; |
| 18 |
} |
| 19 |
|
| 20 |
#ifdef _MD5_EXPLICIT_INIT |
| 21 |
/* MD5InitP - initialize the MD5 context |
| 22 |
*/ |
| 23 |
pascal void MD5InitP(MD5_CTX *ctx) |
| 24 |
{ |
| 25 |
MD5Init(ctx); |
| 26 |
} |
| 27 |
#endif |
| 28 |
|
| 29 |
/* MD5UpdateP - update an MD5 digest with a Str255 |
| 30 |
This doesn't use pascal.h because that would insert a |
| 31 |
null byte. |
| 32 |
*/ |
| 33 |
pascal void MD5UpdateP(MD5_CTX *ctx, unsigned char *input) |
| 34 |
{ |
| 35 |
int len = (int) *input++; |
| 36 |
MD5Update(ctx, input, len); |
| 37 |
} |
| 38 |
|
| 39 |
/* MD5Final - finalize an MD5 context, retrieving the |
| 40 |
digest into a Str255. |
| 41 |
This doesn't use pascal.h because that would expect a |
| 42 |
null byte to indicate length. |
| 43 |
*/ |
| 44 |
pascal void MD5FinalP(unsigned char *digest, MD5_CTX *ctx) |
| 45 |
{ |
| 46 |
*(digest++) = 16; |
| 47 |
MD5Final(digest, ctx); |
| 48 |
} |