1 #pragma once 2 #include <stdio.h> 3 #include <stdint.h> 4 #include <string.h> 5 #include <stdlib.h> 6 #include "Common.h" 7 8 typedef struct { 9 uint32_t state[4]; // Current accumulation of hash 10 uint32_t temp[64]; 11 uint8_t buffer[128]; // Input to be used in the next step 12 uint16_t bufferLength; 13 size_t bytesHashed; 14 uint8_t digest[16]; // Result of algorithm 15 }MD5Context; 16 17 void md5Init(MD5Context* ctx); 18 void md5Update(MD5Context* ctx, uint8_t* input, size_t input_len); 19 void md5Finalize(MD5Context* ctx); 20 21 uint32_t rotateLeft(uint32_t x, uint32_t n); 22 23 class MD5 { 24 public: 25 MD5(); 26 std::string Digest(); 27 void Finalize(); 28 std::string HexDigest(); 29 void Update(std::string data); 30 void Update(std::wstring data, CodeType code = CodeType::UTF8_NO_BOM, bool* char_cannot_convert = nullptr); 31 private: 32 MD5Context ctx; 33 bool m_finalized; 34 }; 35