============================ Vysvetlenie formátu ============================
<názov volania>
	<datatyp parametru 1> <názov parametru 1>
	<datatyp parametru 2> <názov parametru 2>
	<datatyp parametru ...> <názov parametru ...>
	<datatyp parametru n> <názov parametru n>
> LOG <prípadná podmienka>: <formátovací reťazec>, <názov parametru v Cuckoo>, <logovaný parameter x>, <názov parametru v Cuckoo>, <logovaný parameter y>, ... (podľa znakov v formátovacom reťazci)
	// výstupné mapovanie vstupu do hooku a 
	// zaznamenané údaje dostupné v Cuckoo
	<datatyp parametru x> <logovaný parameter x> -> <výsledný datatyp v Cuckoo> <výsledný názov parametru v Cuckoo>
	<datatyp parametru y> <logovaný parameter y> -> <výsledný datatyp v Cuckoo> <výsledný názov parametru v Cuckoo>
	...
=============================================================================

=============================== Funkcie hešov ===============================
CryptCreateHash
    HCRYPTPROV hProv
    ALG_ID Algid,
    HCRYPTKEY hKey
    DWORD dwFlags
    HCRYPTHASH *phHash
> LOG: "phpiP", "hProv", hProv, "Algid", Algid, "hKey", hKey, "Flags", dwFlags, "hHash", phHash
	void* hProv -> str 'hProv'
	void* Algid -> str 'Algid'
	void* hKey -> str 'hKey'
	DWORD dwFlags -> int 'Flags'
	void** phHash -> str 'hHash' (hodnota na adrese)

	
CryptDuplicateHash
    HCRYPTHASH  hHash
    DWORD       *pdwReserved
    DWORD       dwFlags
    HCRYPTHASH  *phHash
> LOG: "pP", "hHashOrig", hHash, "hHash", phHash
	void* hHash -> str 'hHashOrig'
	void** phHash -> str 'hHash' (hodnota na adrese)

	
CryptGetHashParam
    HCRYPTHASH  hHash
    DWORD   dwParam
	BYTE    *pbData
    DWORD   *pdwDataLen
    DWORD   dwFlags
> LOG: "piC", "hHash", hHash, "Param", dwParam, "Buffer", pdwDataLen, pbData
	void* hHash -> str 'hHash'
	DWORD dwParam -> int 'Param'
	DWORD *pdwDataLen, BYTE *pbData -> str 'Buffer' (buffer na adrese)
		

CryptHashData
    HCRYPTHASH hHash
    BYTE *pbData
    DWORD dwDataLen
    DWORD dwFlags
> LOG: "pc", "hHash", hHash, "Buffer", dwDataLen, pbData
	void* hHash -> str 'hHash'
	DWORD dwDataLen, BYTE *pbData -> str 'Buffer' (buffer na adrese)

	
CryptDestroyHash
    HCRYPTHASH  hHash
> LOG: "p", "hHash", hHash
	void* hHash -> str 'hHash'
	
=============================================================================

============================== Funkcie kľúčov ===============================

CryptDecrypt
    HCRYPTKEY hKey
    HCRYPTHASH hHash
    BOOL Final
    DWORD dwFlags
    BYTE *pbData
    DWORD *pdwDataLen
> LOG: "hhCi", "hKey", hKey, "CryptHash", hHash, "Buffer", pdwDataLen, pbData, "Final", Final
	void* hKey -> str 'hKey'
	void* hHash -> str 'CryptHash'
	DWORD *pdwDataLen, BYTE *pbData -> str 'Buffer' (buffer na adrese)
	DWORD Final -> int 'Final'

	
CryptEncrypt
    HCRYPTKEY hKey
    HCRYPTHASH hHash
    BOOL Final
    DWORD dwFlags
    BYTE *pbData
    DWORD *pdwDataLen
    DWORD dwBufLen
> LOG: "ppci", "hKey", hKey, "hHash", hHash, "DataIn", inputLength, inputData, "Final", Final
	// inputLength a inputData sú kopiou bufferu na adrese pbData o dĺžke *pdwDataLen
	void* hKey -> str 'hKey'
	void* hHash -> str 'CryptHash'
	DWORD inputLength, BYTE *inputData -> str 'DataIn' (buffer pred zašifrovaním)
	DWORD Final -> int 'Final'
	
	
CryptGenKey
    HCRYPTPROV hProv
    ALG_ID Algid,
    DWORD dwFlags
    HCRYPTKEY *phKey
> LOG: "phiP", "hProv", hProv, "Algid", Algid, "Flags", dwFlags, "hKey", phKey
	void* hProv -> str 'hProv'
	void* Algid -> str 'Algid'
	DWORD dwFlags -> int 'Flags'
	void** phKey -> str 'hKey' (hodnota na adrese)
	

CryptDeriveKey
    HCRYPTPROV  hProv
    ALG_ID      Algid,
    HCRYPTHASH  hBaseData
    DWORD       dwFlags
    HCRYPTKEY   *phKey
> LOG: "phpiP", "hProv", hProv, "Algid", Algid, "hBaseData", hBaseData, "Flags", dwFlags, "hKey", phKey
	void* hProv -> str 'hProv'
	void* Algid -> str 'Algid'
	void* hBaseData -> str 'hBaseData'
	DWORD dwFlags -> int 'Flags'
	void** phKey -> str 'hKey' (hodnota na adrese)

	
CryptDuplicateKey
    HCRYPTKEY   hKey
    DWORD   *pdwReserved
    DWORD   dwFlags
    HCRYPTKEY   *phKey
> LOG: "pP", "hKeyOrig", hKey, "hKey", phKey
	void* hKey -> str 'hKeyOrig'
	void** phKey -> str 'hKey' (hodnota na adrese)


CryptImportKey
    HCRYPTPROV  hProv
	CONST BYTE  *pbData,
    DWORD       dwDataLen
    HCRYPTKEY   hPubKey
    DWORD       dwFlags
    HCRYPTKEY   *phKey
> LOG: "pcpiP", "hProv", hProv, "Buffer", dwDataLen, pbData, "hPubKey", hPubKey, "Flags", dwFlags, "hKey", phKey
	void* hProv -> str 'hProv'
	DWORD dwDataLen, BYTE *pbData -> str 'Buffer' (buffer na adrese)
	void* hPubKey -> str 'hPubKey'
	DWORD dwFlags -> int 'Flags'
	void** phKey -> str 'hKey' (hodnota na adrese)


CryptImportPublicKeyInfo
    HCRYPTPROV            hCryptProv
    DWORD                 dwCertEncodingType
    PCERT_PUBLIC_KEY_INFO pInfo,
    HCRYPTKEY             *phKey
> LOG: "phsbP", "hProv", hCryptProv, "CertEncodingType", dwCertEncodingType, "AlgOID", pInfo->Algorithm.pszObjId, "Blob", pInfo->PublicKey.cbData, pInfo->PublicKey.pbData, "hKey", phKey
	void* hProv -> str 'hProv'
	void* dwCertEncodingType -> str 'CertEncodingType'
	BYTE* pInfo->Algorithm.pszObjId -> str 'AlgOID' (C-string)
	DWORD pInfo->PublicKey.cbData, BYTE* pInfo->PublicKey.pbData -> str 'Blob' (buffer na adrese)
	void** phKey -> str 'hKey' (hodnota na adrese)


CryptGetUserKey
    HCRYPTPROV hProv
	DWORD      dwKeySpec
	HCRYPTKEY  *phUserKey
> LOG: "phP", "hProv", hProv, "dwKeySpec", dwKeySpec, "hUserKey", phUserKey
    void* hProv -> str 'hProv'
	DWORD dwKeySpec -> int 'dwKeySpec'
	void** phUserKey -> str 'hUserKey' (hodnota na adrese)

	
CryptExportKey
    HCRYPTKEY hKey
    HCRYPTKEY hExpKey
    DWORD dwBlobType
    DWORD dwFlags
    BYTE *pbData
    DWORD *pdwDataLen
> LOG: "pCii", "hKey", hKey, "Buffer", pdwDataLen, pbData, "BlobType", dwBlobType, "Flags", dwFlags
	void* hKey -> str 'hKey'
	DWORD *pdwDataLen, BYTE *pbData -> str 'Buffer' (buffer na adrese)
	DWORD dwBlobType -> int 'BlobType'
	DWORD dwFlags -> int 'Flags'


CryptExportPublicKeyInfo
    HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProvOrNCryptKey,
    DWORD dwKeySpec
    DWORD dwCertEncodingType
	PCERT_PUBLIC_KEY_INFO pInfo,
    DWORD *pcbInfo
> LOG: "phsc", "hProv", hCryptProvOrNCryptKey, "CertEncodingType", dwCertEncodingType, "AlgOID", pInfo->Algorithm.pszObjId, "Blob", pInfo->PublicKey.cbData, pInfo->PublicKey.pbData
	void* hProv -> str 'hProv'
	void* dwCertEncodingType -> str 'CertEncodingType'
	BYTE* pInfo->Algorithm.pszObjId -> str 'AlgOID' (C-string)
	DWORD pInfo->PublicKey.cbData, BYTE* pInfo->PublicKey.pbData -> str 'Blob' (buffer na adrese)


CryptSetKeyParam
    HCRYPTKEY   hKey
    DWORD       dwParam
    CONST BYTE  *pbData,
    DWORD       dwFlags
> LOG if dwParam == KP_MODE: "piIi", "hKey", hKey, "Param", dwParam, "Data", pbData, "Flags", dwFlags
	// môžeme prečítať 4 bajty argumentu a interpretovať ako celé číslo
	void* hKey -> str 'hKey'
	DWORD dwParam -> int 'Param'
	DWORD *pbData -> int 'Data'
	DWORD dwFlags -> int 'Flags'
> LOG else: "pipi", "hKey", hKey, "Param", dwParam, "Data", pbData, "Flags", dwFlags
	void* hKey -> str 'hKey'
	DWORD dwParam -> int 'Param'
	void* pbData -> str 'Data'
	DWORD dwFlags -> int 'Flags'


CryptGetKeyParam
    HCRYPTKEY   hKey
    DWORD   dwParam
	BYTE    *pbData
    DWORD   *pdwDataLen
    DWORD   dwFlags
> LOG if dwParam == KP_MODE: "piIi", "hKey", hKey, "Param", dwParam, "Data", pbData, "Flags", dwFlags
	void* hKey -> str 'hKey'
	DWORD dwParam -> int 'Param'
	DWORD *pbData -> int 'Data'
	DWORD dwFlags -> int 'Flags'
> LOG else: "piCi", "hKey", hKey, "Param", dwParam, "Data", pdwDataLen, pbData, "Flags", dwFlags
	void* hKey -> str 'hKey'
	DWORD dwParam -> int 'Param'
	DWORD *pdwDataLen, BYTE* pbData -> str 'Data' (buffer)
	DWORD dwFlags -> int 'Flags'


CryptDestroyKey
    HCRYPTKEY   hKey
> LOG: "h", "hKey", hKey
	void* hKey -> str 'hKey'

=============================================================================

============================= Funkcie kontextov =============================


CryptAcquireContextA
	HCRYPTPROV *phProv
	LPCSTR pszContainer
	LPCSTR pszProvider
	DWORD dwProvType
	DWORD dwFlags
> LOG: "Psshh", "hProv", phProv, "Container", pszContainer, "Provider", pszProvider, "ProvType", dwProvType, "Flags", dwFlags
	void** phProv -> str 'hProv' (hodnota na adrese)
	CHAR* pszContainer -> str 'Container' (C-string)
	CHAR* pszProvider -> str 'Provider' (C-string)
	void* dwProvType -> str 'ProvType'
	void* dwFlags -> str 'Flags'
	
	
CryptAcquireContextA
	HCRYPTPROV *phProv
	LPCSTR pszContainer
	LPCSTR pszProvider
	DWORD dwProvType
	DWORD dwFlags
> LOG: "Puuhh", "hProv", phProv, "Container", pszContainer, "Provider", pszProvider, "ProvType", dwProvType, "Flags", dwFlags
	void** phProv -> str 'hProv' (hodnota na adrese)
	WCHAR* pszContainer -> str 'Container' (wide C-string)
	WCHAR* pszProvider -> str 'Provider' (wide C-string)
	void* dwProvType -> str 'ProvType'
	void* dwFlags -> str 'Flags'


CryptReleaseContext
	HCRYPTPROV  hProv
	DWORD       dwFlags
> LOG: "pi", "hProv", hProv, "dwFlags", dwFlags
	void* hProv -> str 'hProv'
	DWORD dwFlags -> int 'dwFlags'


=============================================================================