You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.6 KiB
62 lines
1.6 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: Generic MD5 hashing algo |
|
// |
|
//=============================================================================// |
|
|
|
#ifndef CHECKSUM_MD5_H |
|
#define CHECKSUM_MD5_H |
|
|
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
// 16 bytes == 128 bit digest |
|
#define MD5_DIGEST_LENGTH 16 |
|
#define MD5_BIT_LENGTH ( MD5_DIGEST_LENGTH * sizeof(unsigned char) ) |
|
struct MD5Value_t |
|
{ |
|
unsigned char bits[MD5_DIGEST_LENGTH]; |
|
|
|
void Zero(); |
|
bool IsZero() const; |
|
|
|
bool operator==( const MD5Value_t &src ) const; |
|
bool operator!=( const MD5Value_t &src ) const; |
|
|
|
}; |
|
|
|
// MD5 Hash |
|
typedef struct |
|
{ |
|
unsigned int buf[4]; |
|
unsigned int bits[2]; |
|
unsigned char in[64]; |
|
} MD5Context_t; |
|
|
|
void MD5Init( MD5Context_t *context ); |
|
void MD5Update( MD5Context_t *context, unsigned char const *buf, unsigned int len ); |
|
void MD5Final( unsigned char digest[ MD5_DIGEST_LENGTH ], MD5Context_t *context ); |
|
|
|
char *MD5_Print(unsigned char *digest, int hashlen ); |
|
|
|
/// Convenience wrapper to calculate the MD5 for a buffer, all in one step, without |
|
/// bothering with the context object. |
|
void MD5_ProcessSingleBuffer( const void *p, int len, MD5Value_t &md5Result ); |
|
|
|
unsigned int MD5_PseudoRandom(unsigned int nSeed); |
|
|
|
/// Returns true if the values match. |
|
bool MD5_Compare( const MD5Value_t &data, const MD5Value_t &compare ); |
|
|
|
inline bool MD5Value_t::operator==( const MD5Value_t &src ) const |
|
{ |
|
return MD5_Compare( *this, src ); |
|
} |
|
|
|
inline bool MD5Value_t::operator!=( const MD5Value_t &src ) const |
|
{ |
|
return !MD5_Compare( *this, src ); |
|
} |
|
|
|
#endif // CHECKSUM_MD5_H
|
|
|