For educational reasons I've decided to create my own CA. Here is what I learned.
Lets get some context first.
// Convert a UTF-16 string to an ANSI string. | |
std::string utf16ToAnsi(const std::wstring &wstr) { | |
size_type length = wstr.size(); | |
int bufSize = WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK, &wstr[0], length, NULL, 0, NULL, NULL); | |
std::string strTo(bufSize + 1, 0); | |
WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK, &wstr[0], length, &strTo[0], bufSize, NULL, NULL); | |
return strTo; | |
} | |
// Convert a UTF-16 string to an UTF-8 string. |
#include <windows.h> | |
#include <time.h> | |
#include <stdio.h> | |
#include <stdint.h> | |
// http://www.programmingforums.org/post45492.html | |
static const int64_t EPOCH_DIFF = 0x019DB1DED53E8000LL; // 116444736000000000 nsecs | |
static const int RATE_DIFF = 10000000; // 100 nsecs | |
time_t tmToUnixTime(const struct tm& stm) { |