mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-07-13 17:25:34 +08:00
91 lines
1.8 KiB
C++
91 lines
1.8 KiB
C++
#pragma once
|
|
|
|
#include <vector>
|
|
#include "md4c.h"
|
|
|
|
class MD4
|
|
{
|
|
public:
|
|
|
|
MD4(const void* _message = NULL, unsigned int _messageSize = 0) : message(NULL), messageSize(_messageSize)
|
|
{
|
|
SetMessage(_message, _messageSize);
|
|
|
|
memset(md4, 0, sizeof(md4));
|
|
}
|
|
|
|
MD4(const MD4& _md4) : message(NULL), messageSize(_md4.messageSize)
|
|
{
|
|
memset( this->md4, 0, sizeof(this->md4) );
|
|
|
|
memcpy( this->md4, _md4.md4, sizeof(this->md4) );
|
|
|
|
if ( _md4.message != NULL )
|
|
{
|
|
this->message = new unsigned char[this->messageSize];
|
|
|
|
if ( this->message != NULL )
|
|
{
|
|
memset( this->message, 0, this->messageSize );
|
|
memcpy( this->message, _md4.message, this->messageSize );
|
|
}
|
|
}
|
|
}
|
|
|
|
~MD4 ()
|
|
{
|
|
if (message)
|
|
{
|
|
delete []message;
|
|
message = NULL;
|
|
}
|
|
}
|
|
|
|
inline void SetMessage (const void* pMessage, unsigned int nMessageSize)
|
|
{
|
|
if ( ( pMessage != NULL ) && ( 0 != nMessageSize ) )
|
|
{
|
|
if (message)
|
|
{
|
|
delete []message;
|
|
message = NULL;
|
|
}
|
|
messageSize = 0;
|
|
|
|
messageSize = nMessageSize;
|
|
|
|
message = new unsigned char [ messageSize ];
|
|
if ( message )
|
|
{
|
|
memset ( message, 0, messageSize );
|
|
memcpy ( message, pMessage, messageSize );
|
|
}
|
|
}
|
|
}
|
|
|
|
inline std::vector<unsigned char> GetMD4Bytes() const
|
|
{
|
|
std::vector<unsigned char> md4Bytes;
|
|
|
|
MD4_CTX context;
|
|
|
|
MD4Init( &context );
|
|
MD4Update( &context, this->message, this->messageSize );
|
|
MD4Final( (unsigned char*)this->md4, &context );
|
|
|
|
for ( unsigned int i = 0; i < md4Size; i++ )
|
|
{
|
|
md4Bytes.push_back( this->md4[i] );
|
|
}
|
|
|
|
return md4Bytes;
|
|
}
|
|
|
|
private:
|
|
|
|
static const unsigned char md4Size = 16;
|
|
|
|
unsigned char* message;
|
|
unsigned int messageSize;
|
|
unsigned char md4[md4Size];
|
|
}; |