Hash :
f23a2145
Author :
Date :
2018-10-06T03:46:51
Add compatibility with Aladdin Enterprises MD5 implementation This will be guarded by a LIBMD_MD5_ALADDIN macro check, to avoid polluting the namespace by unsuspecting code. The macro can always be defined unconditionally, and the guard could even potentially be removed in the future if required. Prompted-by: Yangfl <mmyangfl@gmail.com> Ref: https://bugs.debian.org/909116
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
/* $OpenBSD: md5.h,v 1.15 2004/05/03 17:30:14 millert Exp $ */
/*
* This code implements the MD5 message-digest algorithm.
* The algorithm is due to Ron Rivest. This code was
* written by Colin Plumb in 1993, no copyright is claimed.
* This code is in the public domain; do with it what you wish.
*
* Equivalent code is available from RSA Data Security, Inc.
* This code has been tested against that, and is equivalent,
* except that you don't need to include two pages of legalese
* with every copy.
*/
#ifndef _MD5_H_
#define _MD5_H_
#include <sys/types.h>
#include <stdint.h>
#define MD5_BLOCK_LENGTH 64
#define MD5_DIGEST_LENGTH 16
#define MD5_DIGEST_STRING_LENGTH (MD5_DIGEST_LENGTH * 2 + 1)
typedef struct MD5Context {
uint32_t state[4]; /* state */
uint64_t count; /* number of bits, mod 2^64 */
uint8_t buffer[MD5_BLOCK_LENGTH]; /* input buffer */
} MD5_CTX;
#ifdef __cplusplus
extern "C" {
#endif
void MD5Init(MD5_CTX *);
void MD5Update(MD5_CTX *, const uint8_t *, size_t);
void MD5Pad(MD5_CTX *);
void MD5Final(uint8_t [MD5_DIGEST_LENGTH], MD5_CTX *);
void MD5Transform(uint32_t [4], const uint8_t [MD5_BLOCK_LENGTH]);
char *MD5End(MD5_CTX *, char *);
char *MD5File(const char *, char *);
char *MD5FileChunk(const char *, char *, off_t, off_t);
char *MD5Data(const uint8_t *, size_t, char *);
#ifdef __cplusplus
}
#endif
/* Avoid polluting the namespace. Even though this makes this usage
* implementation-specific, defining it unconditionally should not be
* a problem, and better than possibly breaking unexpecting code. */
#ifdef LIBMD_MD5_ALADDIN
/*
* Interface compatibility with Aladdin Enterprises independent
* implementation from RFC 1321.
*/
typedef uint8_t md5_byte_t;
typedef uint32_t md5_word_t;
typedef MD5_CTX md5_state_t;
#define md5_init(pms) MD5Init(pms)
#define md5_append(pms, data, nbytes) MD5Update(pms, data, nbytes)
#define md5_finish(pms, digest) MD5Final(digest, pms)
#endif /* LIBMD_MD5_ALADDIN */
#endif /* _MD5_H_ */