1a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/* 2a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang * This is an OpenSSL-compatible implementation of the RSA Data Security, Inc. 3a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang * MD5 Message-Digest Algorithm (RFC 1321). 4a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang * 5a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang * Homepage: 6a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang * http://openwall.info/wiki/people/solar/software/public-domain-source-code/md5 7a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang * 8a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang * Author: 9a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang * Alexander Peslyak, better known as Solar Designer <solar at openwall.com> 10a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang * 11a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang * This software was written by Alexander Peslyak in 2001. No copyright is 12a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang * claimed, and the software is hereby placed in the public domain. 13a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang * In case this attempt to disclaim copyright and place the software in the 14a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang * public domain is deemed null and void, then the software is 15a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang * Copyright (c) 2001 Alexander Peslyak and it is hereby released to the 16a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang * general public under the following terms: 17a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang * 18a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang * Redistribution and use in source and binary forms, with or without 19a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang * modification, are permitted. 20a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang * 21a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang * There's ABSOLUTELY NO WARRANTY, express or implied. 22a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang * 23a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang * See md5.c for more information. 24a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang */ 25a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 26a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#ifdef HAVE_OPENSSL 27a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#include <openssl/md5.h> 28a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#elif !defined(_MD5_H) 29a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define _MD5_H 30a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 31a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/* Any 32-bit or wider unsigned integer data type will do */ 32a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wangtypedef unsigned int MD5_u32plus; 33a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 34a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wangtypedef struct { 35a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang MD5_u32plus lo, hi; 36a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang MD5_u32plus a, b, c, d; 37a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang unsigned char buffer[64]; 38a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang MD5_u32plus block[16]; 39a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang} MD5_CTX; 40a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 41a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wangextern void MD5_Init(MD5_CTX *ctx); 42a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wangextern void MD5_Update(MD5_CTX *ctx, void *data, unsigned long size); 43a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wangextern void MD5_Final(unsigned char *result, MD5_CTX *ctx); 44a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 45a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#endif 46