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;
	}
Exemple #3
0
CryptoImpl::~CryptoImpl()
{
    if (NULL != provider)
    {
        if (!CryptReleaseContext(provider, 0))
        {
            LOG_ERR << "Error: " << WinApiError("CryptReleaseContext").what();
        }
    }
}
Exemple #4
0
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");

}