void* HiddenFunctions::CheckPointerFuncVoid(void* ptr, const char* file, size_t line, const char* func) { if (!ptr) { throw WinApiError(E_POINTER, file, func, line); } return ptr; }
bool HiddenFunctions::CheckApiThrowErrorFunc(bool r, DWORD err, const char* file, size_t line, const char* func) { if (!r) { throw WinApiError(err, file, func, line); } return r; }
CryptoImpl::~CryptoImpl() { if (NULL != provider) { if (!CryptReleaseContext(provider, 0)) { LOG_ERR << "Error: " << WinApiError("CryptReleaseContext").what(); } } }
void CryptoProxy::verifyCryptoAlgs() { bool isMd5Supported = false; bool isSha1Supported = false; bool isAesSupported = false; DWORD flags = CRYPT_FIRST; for (;;) { PROV_ENUMALGS algs; DWORD dataLen = sizeof(algs); if (!CryptGetProvParam(impl->provider, PP_ENUMALGS, reinterpret_cast<BYTE*>(&algs), &dataLen, flags)) { DWORD err = GetLastError(); if (err == ERROR_NO_MORE_ITEMS) break; // finished // another error - throw throw WinApiError("CryptGetProvParams", err); } switch (algs.aiAlgid) { case CALG_MD5: isMd5Supported = true; break; case CALG_SHA: isSha1Supported = true; break; case CALG_AES_128: isAesSupported = true; break; } flags &= ~CRYPT_FIRST; } if (!isMd5Supported) throw runtime_error("Crypto: MD5 is not supported"); if (!isSha1Supported) throw runtime_error("Crypto: SHA-1 is not supported"); if (!isAesSupported) throw runtime_error("Crypto: AES-128 is not supported"); }