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