1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| | #include "md5.h"
#include <nettle/md5.h>
#include <nettle/base16.h>
#include <string>
#include <vector>
std::string
md5 (const std::string str)
{
// Convert str to a byte array
std::vector<uint8_t> input (str.begin (), str.end ());
// Compute the digest
struct md5_ctx nettle_ctx;
md5_init (&nettle_ctx);
md5_update (&nettle_ctx, input.size (), input.data ());
uint8_t digest[MD5_DIGEST_SIZE];
md5_digest (&nettle_ctx, MD5_DIGEST_SIZE, digest);
// Encode it to base16
std::vector<char> encoded (BASE16_ENCODE_LENGTH (MD5_DIGEST_SIZE));
base16_encode_update (encoded.data (), MD5_DIGEST_SIZE, digest);
std::string final_digest (encoded.begin (), encoded.end ());
return final_digest;
}
|