1*bc5531deSDag-Erling Smørgrav /* $OpenBSD: md5.h,v 1.17 2012/12/05 23:19:57 deraadt Exp $ */ 2*bc5531deSDag-Erling Smørgrav 3*bc5531deSDag-Erling Smørgrav /* 4*bc5531deSDag-Erling Smørgrav * This code implements the MD5 message-digest algorithm. 5*bc5531deSDag-Erling Smørgrav * The algorithm is due to Ron Rivest. This code was 6*bc5531deSDag-Erling Smørgrav * written by Colin Plumb in 1993, no copyright is claimed. 7*bc5531deSDag-Erling Smørgrav * This code is in the public domain; do with it what you wish. 8*bc5531deSDag-Erling Smørgrav * 9*bc5531deSDag-Erling Smørgrav * Equivalent code is available from RSA Data Security, Inc. 10*bc5531deSDag-Erling Smørgrav * This code has been tested against that, and is equivalent, 11*bc5531deSDag-Erling Smørgrav * except that you don't need to include two pages of legalese 12*bc5531deSDag-Erling Smørgrav * with every copy. 13*bc5531deSDag-Erling Smørgrav */ 14*bc5531deSDag-Erling Smørgrav 15*bc5531deSDag-Erling Smørgrav #ifndef _MD5_H_ 16*bc5531deSDag-Erling Smørgrav #define _MD5_H_ 17*bc5531deSDag-Erling Smørgrav 18*bc5531deSDag-Erling Smørgrav #ifndef WITH_OPENSSL 19*bc5531deSDag-Erling Smørgrav 20*bc5531deSDag-Erling Smørgrav #define MD5_BLOCK_LENGTH 64 21*bc5531deSDag-Erling Smørgrav #define MD5_DIGEST_LENGTH 16 22*bc5531deSDag-Erling Smørgrav #define MD5_DIGEST_STRING_LENGTH (MD5_DIGEST_LENGTH * 2 + 1) 23*bc5531deSDag-Erling Smørgrav 24*bc5531deSDag-Erling Smørgrav typedef struct MD5Context { 25*bc5531deSDag-Erling Smørgrav u_int32_t state[4]; /* state */ 26*bc5531deSDag-Erling Smørgrav u_int64_t count; /* number of bits, mod 2^64 */ 27*bc5531deSDag-Erling Smørgrav u_int8_t buffer[MD5_BLOCK_LENGTH]; /* input buffer */ 28*bc5531deSDag-Erling Smørgrav } MD5_CTX; 29*bc5531deSDag-Erling Smørgrav 30*bc5531deSDag-Erling Smørgrav void MD5Init(MD5_CTX *); 31*bc5531deSDag-Erling Smørgrav void MD5Update(MD5_CTX *, const u_int8_t *, size_t) 32*bc5531deSDag-Erling Smørgrav __attribute__((__bounded__(__string__,2,3))); 33*bc5531deSDag-Erling Smørgrav void MD5Pad(MD5_CTX *); 34*bc5531deSDag-Erling Smørgrav void MD5Final(u_int8_t [MD5_DIGEST_LENGTH], MD5_CTX *) 35*bc5531deSDag-Erling Smørgrav __attribute__((__bounded__(__minbytes__,1,MD5_DIGEST_LENGTH))); 36*bc5531deSDag-Erling Smørgrav void MD5Transform(u_int32_t [4], const u_int8_t [MD5_BLOCK_LENGTH]) 37*bc5531deSDag-Erling Smørgrav __attribute__((__bounded__(__minbytes__,1,4))) 38*bc5531deSDag-Erling Smørgrav __attribute__((__bounded__(__minbytes__,2,MD5_BLOCK_LENGTH))); 39*bc5531deSDag-Erling Smørgrav char *MD5End(MD5_CTX *, char *) 40*bc5531deSDag-Erling Smørgrav __attribute__((__bounded__(__minbytes__,2,MD5_DIGEST_STRING_LENGTH))); 41*bc5531deSDag-Erling Smørgrav char *MD5File(const char *, char *) 42*bc5531deSDag-Erling Smørgrav __attribute__((__bounded__(__minbytes__,2,MD5_DIGEST_STRING_LENGTH))); 43*bc5531deSDag-Erling Smørgrav char *MD5FileChunk(const char *, char *, off_t, off_t) 44*bc5531deSDag-Erling Smørgrav __attribute__((__bounded__(__minbytes__,2,MD5_DIGEST_STRING_LENGTH))); 45*bc5531deSDag-Erling Smørgrav char *MD5Data(const u_int8_t *, size_t, char *) 46*bc5531deSDag-Erling Smørgrav __attribute__((__bounded__(__string__,1,2))) 47*bc5531deSDag-Erling Smørgrav __attribute__((__bounded__(__minbytes__,3,MD5_DIGEST_STRING_LENGTH))); 48*bc5531deSDag-Erling Smørgrav 49*bc5531deSDag-Erling Smørgrav #endif /* !WITH_OPENSSL */ 50*bc5531deSDag-Erling Smørgrav 51*bc5531deSDag-Erling Smørgrav #endif /* _MD5_H_ */ 52