xref: /MusicPlayer2/MusicPlayer2/md5.h (revision 443d2d2511be730d1b1dd3181942b7fa6539aa1a)
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