33static const char szKeySet[] =
"wine_test_keyset";
35#define NON_DEF_PROV_TYPE 999
52 pCryptEnumProviderTypesA = (
void*)
GetProcAddress(hadvapi32,
"CryptEnumProviderTypesA");
53 pCryptEnumProvidersA = (
void*)
GetProcAddress(hadvapi32,
"CryptEnumProvidersA");
54 pCryptGetDefaultProviderA = (
void*)
GetProcAddress(hadvapi32,
"CryptGetDefaultProviderA");
55 pCryptSetProviderExA = (
void*)
GetProcAddress(hadvapi32,
"CryptSetProviderExA");
56 pCryptGenRandom = (
void*)
GetProcAddress(hadvapi32,
"CryptGenRandom");
57 pCryptDuplicateHash = (
void*)
GetProcAddress(hadvapi32,
"CryptDuplicateHash");
58 pCryptHashSessionKey = (
void*)
GetProcAddress(hadvapi32,
"CryptHashSessionKey");
59 pCryptSignHashW = (
void*)
GetProcAddress(hadvapi32,
"CryptSignHashW");
60 pCryptVerifySignatureW = (
void*)
GetProcAddress(hadvapi32,
"CryptVerifySignatureW");
61 pSystemFunction036 = (
void*)
GetProcAddress(hadvapi32,
"SystemFunction036");
139 ok(!
ret,
"CryptReleaseContext succeeded unexpectedly\n");
144 ok(!
ret,
"CryptReleaseContext succeeded unexpectedly\n");
167 ok(!
ret,
"CryptReleaseContext succeeded unexpectedly\n");
174 ok(!
ret,
"CryptReleaseContext succeeded unexpectedly\n");
179 ok(!
ret,
"CryptReleaseContext succeeded unexpectedly\n");
278 ok(!!*(
void **)
hProv,
"Got zero *(void **)hProv.\n");
297 result = pCryptHashSessionKey(hHash, 0, 0);
370 ok (hProv2 == 0,
"%Id\n", hProv2);
400#if defined(__REACTOS__) && defined(_M_AMD64)
402 ok(
FALSE,
"FIXME: The following tests normally completes on ReactOS x64, but not after being fuzzed from other tests in our test suite.\n");
406 result = pCryptDuplicateHash(hHash,
NULL, 0, &hHash2);
440 result = pCryptHashSessionKey(hHash,
hKey, 0);
457 win_skip(
"CryptSignHashW is not available\n");
471 if (pCryptVerifySignatureW)
478 win_skip(
"CryptVerifySignatureW is not available\n");
488 0x07, 0x02, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x52, 0x53, 0x41, 0x32, 0x00,
489 0x02, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x79, 0x10, 0x1c, 0xd0, 0x6b, 0x10,
490 0x18, 0x30, 0x94, 0x61, 0xdc, 0x0e, 0xcb, 0x96, 0x4e, 0x21, 0x3f, 0x79, 0xcd,
491 0xa9, 0x17, 0x62, 0xbc, 0xbb, 0x61, 0x4c, 0xe0, 0x75, 0x38, 0x6c, 0xf3, 0xde,
492 0x60, 0x86, 0x03, 0x97, 0x65, 0xeb, 0x1e, 0x6b, 0xdb, 0x53, 0x85, 0xad, 0x68,
493 0x21, 0xf1, 0x5d, 0xe7, 0x1f, 0xe6, 0x53, 0xb4, 0xbb, 0x59, 0x3e, 0x14, 0x27,
494 0xb1, 0x83, 0xa7, 0x3a, 0x54, 0xe2, 0x8f, 0x65, 0x8e, 0x6a, 0x4a, 0xcf, 0x3b,
495 0x1f, 0x65, 0xff, 0xfe, 0xf1, 0x31, 0x3a, 0x37, 0x7a, 0x8b, 0xcb, 0xc6, 0xd4,
496 0x98, 0x50, 0x36, 0x67, 0xe4, 0xa1, 0xe8, 0x7e, 0x8a, 0xc5, 0x23, 0xf2, 0x77,
497 0xf5, 0x37, 0x61, 0x49, 0x72, 0x59, 0xe8, 0x3d, 0xf7, 0x60, 0xb2, 0x77, 0xca,
498 0x78, 0x54, 0x6d, 0x65, 0x9e, 0x03, 0x97, 0x1b, 0x61, 0xbd, 0x0c, 0xd8, 0x06,
499 0x63, 0xe2, 0xc5, 0x48, 0xef, 0xb3, 0xe2, 0x6e, 0x98, 0x7d, 0xbd, 0x4e, 0x72,
500 0x91, 0xdb, 0x31, 0x57, 0xe3, 0x65, 0x3a, 0x49, 0xca, 0xec, 0xd2, 0x02, 0x4e,
501 0x22, 0x7e, 0x72, 0x8e, 0xf9, 0x79, 0x84, 0x82, 0xdf, 0x7b, 0x92, 0x2d, 0xaf,
502 0xc9, 0xe4, 0x33, 0xef, 0x89, 0x5c, 0x66, 0x99, 0xd8, 0x80, 0x81, 0x47, 0x2b,
503 0xb1, 0x66, 0x02, 0x84, 0x59, 0x7b, 0xc3, 0xbe, 0x98, 0x45, 0x4a, 0x3d, 0xdd,
504 0xea, 0x2b, 0xdf, 0x4e, 0xb4, 0x24, 0x6b, 0xec, 0xe7, 0xd9, 0x0c, 0x45, 0xb8,
505 0xbe, 0xca, 0x69, 0x37, 0x92, 0x4c, 0x38, 0x6b, 0x96, 0x6d, 0xcd, 0x86, 0x67,
506 0x5c, 0xea, 0x54, 0x94, 0xa4, 0xca, 0xa4, 0x02, 0xa5, 0x21, 0x4d, 0xae, 0x40,
507 0x8f, 0x9d, 0x51, 0x83, 0xf2, 0x3f, 0x33, 0xc1, 0x72, 0xb4, 0x1d, 0x94, 0x6e,
508 0x7d, 0xe4, 0x27, 0x3f, 0xea, 0xff, 0xe5, 0x9b, 0xa7, 0x5e, 0x55, 0x8e, 0x0d,
509 0x69, 0x1c, 0x7a, 0xff, 0x81, 0x9d, 0x53, 0x52, 0x97, 0x9a, 0x76, 0x79, 0xda,
510 0x93, 0x32, 0x16, 0xec, 0x69, 0x51, 0x1a, 0x4e, 0xc3, 0xf1, 0x72, 0x80, 0x78,
511 0x5e, 0x66, 0x4a, 0x8d, 0x85, 0x2f, 0x3f, 0xb2, 0xa7 };
519 BYTE bogus[] = { 0 };
521 if (!pCryptVerifySignatureW)
523 win_skip(
"CryptVerifySignatureW is not available\n");
528 ret = pCryptVerifySignatureW(0,
NULL, 0, 0,
NULL, 0);
531 win_skip(
"CryptVerifySignatureW is not implemented\n");
535 "Expected ERROR_INVALID_PARAMETER, got %08lx\n",
GetLastError());
548 "Expected ERROR_INVALID_PARAMETER, got %08lx\n",
GetLastError());
552 "Expected ERROR_INVALID_PARAMETER, got %08lx\n",
GetLastError());
557 "Expected NTE_BAD_SIGNATURE or ERROR_INVALID_PARAMETER, got %08lx\n",
563 "Expected NTE_BAD_SIGNATURE or ERROR_INVALID_PARAMETER, got %08lx\n",
568 "Expected NTE_BAD_SIGNATURE, got %08lx\n",
GetLastError());
570 ret = pCryptVerifySignatureW(
hash, bogus,
sizeof(bogus),
key,
NULL, 0);
574 "Expected NTE_BAD_SIGNATURE, got %08lx\n",
GetLastError());
627 DWORD notZeroFlags = 5;
629 if(!pCryptEnumProvidersA)
631 win_skip(
"CryptEnumProvidersA is not available\n");
635 if (!
FindProvRegVals(dwIndex, &dwType, &pszProvName, &cbName, &provCount))
637 win_skip(
"Could not find providers in registry\n");
642 result = pCryptEnumProvidersA(dwIndex, ¬Null, 0, &
type,
NULL, &providerLen);
646 result = pCryptEnumProvidersA(dwIndex,
NULL, notZeroFlags, &
type,
NULL, &providerLen);
651 providerLen = cbName / 2;
655 result = pCryptEnumProvidersA(dwIndex,
NULL, 0, &
type, provider, &providerLen);
668 ok(
count==provCount,
"expected %i, got %i\n", (
int)provCount, (
int)
count);
679 ok(
result && providerLen==cbName,
"expected %i, got %i\n", (
int)cbName, (
int)providerLen);
684 result = pCryptEnumProvidersA(dwIndex,
NULL, 0, &
type, provider, &providerLen);
686 ok(
type==dwType,
"expected %ld, got %ld\n", dwType,
type);
688 ok(!
strcmp(pszProvName, provider),
"expected %s, got %s\n", pszProvName, provider);
689 ok(cbName==providerLen,
"expected %ld, got %ld\n", cbName, providerLen);
693 result = pCryptEnumProvidersA(dwIndex,
NULL, 0, &
type, provider, &providerLen);
695 ok(
type==dwType,
"expected %ld, got %ld\n", dwType,
type);
697 ok(!
strcmp(pszProvName, provider),
"expected %s, got %s\n", pszProvName, provider);
698 ok(cbName==providerLen,
"expected %ld, got %ld\n", cbName, providerLen);
730 *pdwProvType = *(--
ch) -
'0';
731 *pdwProvType += (*(--
ch) -
'0') * 10;
732 *pdwProvType += (*(--
ch) -
'0') * 100;
767 DWORD dwProvType = 0;
780 DWORD notZeroFlags = 5;
782 if(!pCryptEnumProviderTypesA)
784 win_skip(
"CryptEnumProviderTypesA is not available\n");
790 skip(
"Could not find provider types in registry\n");
795 result = pCryptEnumProviderTypesA(
index, ¬Null, 0, &provType, typeName, &typeNameSize);
800 result = pCryptEnumProviderTypesA(
index,
NULL, notZeroFlags, &provType, typeName, &typeNameSize);
810 typeNameSize = cbTypeName / 2;
815 result = pCryptEnumProviderTypesA(
index,
NULL, 0, &provType, typeName, &typeNameSize);
826 while(pCryptEnumProviderTypesA(typeCount++,
NULL, 0, &provType,
NULL, &typeNameSize))
829 ok(typeCount==dwTypeCount,
"expected %ld, got %ld\n", dwTypeCount, typeCount);
833 for (typeCount = 0; typeCount < dwTypeCount + 1; typeCount++)
834 result = pCryptEnumProviderTypesA(typeCount,
NULL, 0, &provType,
NULL, &typeNameSize);
840 ok(
result && typeNameSize==cbTypeName,
"expected %ld, got %ld\n", cbTypeName, typeNameSize);
844 typeNameSize = 0xdeadbeef;
845 result = pCryptEnumProviderTypesA(
index,
NULL, 0, &provType, typeName, &typeNameSize);
847 ok(provType==dwProvType,
"expected %ld, got %ld\n", dwProvType, provType);
849 ok(!
strcmp(pszTypeName, typeName),
"expected %s, got %s\n", pszTypeName, typeName);
850 ok(typeNameSize==cbTypeName,
"expected %ld, got %ld\n", cbTypeName, typeNameSize);
864 LPCSTR machinestr =
"Software\\Microsoft\\Cryptography\\Defaults\\Provider Types\\Type XXX";
865 LPCSTR userstr =
"Software\\Microsoft\\Cryptography\\Provider Type XXX";
872 *(--
ptr) = (dwProvType % 10) +
'0';
873 *(--
ptr) = ((dwProvType / 10) % 10) +
'0';
874 *(--
ptr) = (dwProvType / 100) +
'0';
923 if(!pCryptGetDefaultProviderA)
925 win_skip(
"CryptGetDefaultProviderA is not available\n");
931 skip(
"Could not find default provider in registry\n");
936 result = pCryptGetDefaultProviderA(provType, ¬Null,
flags, provName, &provNameSize);
942 result = pCryptGetDefaultProviderA(provType,
NULL,
flags, provName, &provNameSize);
948 provType = 0xdeadbeef;
949 result = pCryptGetDefaultProviderA(provType,
NULL,
flags, provName, &provNameSize);
952 "expected NTE_BAD_PROV_TYPE or ERROR_INVALID_PARAMETER, got %ld/%ld\n",
960 provNameSize = cbProvName / 2;
964 result = pCryptGetDefaultProviderA(provType,
NULL,
flags, provName, &provNameSize);
972 ok(
result && provNameSize==cbProvName,
"expected %ld, got %ld\n", cbProvName, provNameSize);
973 provNameSize = cbProvName;
978 provNameSize = 0xdeadbeef;
979 result = pCryptGetDefaultProviderA(provType,
NULL,
flags, provName, &provNameSize);
982 ok(!
strcmp(pszProvName, provName),
"expected %s, got %s\n", pszProvName, provName);
983 ok(provNameSize==cbProvName,
"expected %ld, got %ld\n", cbProvName, provNameSize);
1000 if(!pCryptGetDefaultProviderA || !pCryptSetProviderExA)
1002 win_skip(
"CryptGetDefaultProviderA and/or CryptSetProviderExA are not available\n");
1025 skip(
"Not enough rights to remove the default provider\n");
1054 char originalGuid[40];
1065 skip(
"couldn't open HKLM\\Software\\Microsoft\\Cryptography\n");
1069 size =
sizeof(originalGuid);
1079 skip(
"broken virtualization on HKLM\\Software\\Microsoft\\Cryptography\n");
1090 "CryptAcquireContextA failed: %08lx\n",
GetLastError());
1100#define key_length 16
1103 { 0xbf, 0xf6, 0x83, 0x4b, 0x3e, 0xa3, 0x23, 0xdd,
1104 0x96, 0x78, 0x70, 0x8e, 0xa1, 0x9d, 0x3b, 0x40 };
1112 BYTE key_data[2048];
1127 key_blob.header.reserved = 0;
1128 key_blob.header.aiKeyAlg =
CALG_RC2;
1129 key_blob.key_size =
sizeof(
key);
1164 key_blob.key_size = 7;
1177 key_blob.key_size =
sizeof(
key);
1192 key_blob.key_size =
sizeof(
key);
1214 key_blob.key_size =
sizeof(key_blob.key_data);
1234 if (!pSystemFunction036)
1236 win_skip(
"SystemFunction036 is not available\n");
1240 ret = pSystemFunction036(
NULL, 0);
1241 ok(
ret ==
TRUE,
"Expected SystemFunction036 to return TRUE, got %d\n",
ret);
1247 ret = pSystemFunction036(
NULL, 5);
1251 ret = pSystemFunction036(&
test, 0);
1252 ok(
ret ==
TRUE,
"Expected SystemFunction036 to return TRUE, got %d\n",
ret);
1254 ret = pSystemFunction036(&
test,
sizeof(
int));
1255 ok(
ret ==
TRUE,
"Expected SystemFunction036 to return TRUE, got %d\n",
ret);
1275 ok(
len,
"expected len > 0\n");
1289 ok(prov == 0,
"got %Id\n", prov);
void user(int argc, const char *argv[])
#define RegCloseKey(hKey)
#define ERROR_INSUFFICIENT_BUFFER
LONG WINAPI RegSetValueExA(HKEY hKey, LPCSTR lpValueName, DWORD Reserved, DWORD dwType, CONST BYTE *lpData, DWORD cbData)
LONG WINAPI RegOpenKeyExA(_In_ HKEY hKey, _In_ LPCSTR lpSubKey, _In_ DWORD ulOptions, _In_ REGSAM samDesired, _Out_ PHKEY phkResult)
LONG WINAPI RegQueryInfoKeyA(HKEY hKey, LPSTR lpClass, LPDWORD lpcClass, LPDWORD lpReserved, LPDWORD lpcSubKeys, LPDWORD lpcMaxSubKeyLen, LPDWORD lpcMaxClassLen, LPDWORD lpcValues, LPDWORD lpcMaxValueNameLen, LPDWORD lpcMaxValueLen, LPDWORD lpcbSecurityDescriptor, PFILETIME lpftLastWriteTime)
LONG WINAPI RegOpenKeyA(HKEY hKey, LPCSTR lpSubKey, PHKEY phkResult)
LONG WINAPI RegDeleteValueA(HKEY hKey, LPCSTR lpValueName)
LONG WINAPI RegQueryValueExA(_In_ HKEY hkeyorg, _In_ LPCSTR name, _In_ LPDWORD reserved, _Out_opt_ LPDWORD type, _Out_opt_ LPBYTE data, _Inout_opt_ LPDWORD count)
LONG WINAPI RegEnumKeyExA(_In_ HKEY hKey, _In_ DWORD dwIndex, _Out_ LPSTR lpName, _Inout_ LPDWORD lpcbName, _Reserved_ LPDWORD lpReserved, _Out_opt_ LPSTR lpClass, _Inout_opt_ LPDWORD lpcbClass, _Out_opt_ PFILETIME lpftLastWriteTime)
BOOL WINAPI CryptExportKey(HCRYPTKEY hKey, HCRYPTKEY hExpKey, DWORD dwBlobType, DWORD dwFlags, BYTE *pbData, DWORD *pdwDataLen)
BOOL WINAPI CryptCreateHash(HCRYPTPROV hProv, ALG_ID Algid, HCRYPTKEY hKey, DWORD dwFlags, HCRYPTHASH *phHash)
BOOL WINAPI CryptSetProvParam(HCRYPTPROV hProv, DWORD dwParam, const BYTE *pbData, DWORD dwFlags)
BOOL WINAPI CryptGetHashParam(HCRYPTHASH hHash, DWORD dwParam, BYTE *pbData, DWORD *pdwDataLen, DWORD dwFlags)
BOOL WINAPI CryptDestroyKey(HCRYPTKEY hKey)
BOOL WINAPI CryptDestroyHash(HCRYPTHASH hHash)
BOOL WINAPI CryptDuplicateKey(HCRYPTKEY hKey, DWORD *pdwReserved, DWORD dwFlags, HCRYPTKEY *phKey)
BOOL WINAPI CryptReleaseContext(HCRYPTPROV hProv, DWORD dwFlags)
BOOL WINAPI CryptHashData(HCRYPTHASH hHash, const BYTE *pbData, DWORD dwDataLen, DWORD dwFlags)
BOOL WINAPI CryptAcquireContextA(HCRYPTPROV *phProv, LPCSTR pszContainer, LPCSTR pszProvider, DWORD dwProvType, DWORD dwFlags)
BOOL WINAPI CryptDeriveKey(HCRYPTPROV hProv, ALG_ID Algid, HCRYPTHASH hBaseData, DWORD dwFlags, HCRYPTKEY *phKey)
BOOL WINAPI CryptContextAddRef(HCRYPTPROV hProv, DWORD *pdwReserved, DWORD dwFlags)
BOOL WINAPI CryptGenKey(HCRYPTPROV hProv, ALG_ID Algid, DWORD dwFlags, HCRYPTKEY *phKey)
BOOL WINAPI CryptDecrypt(HCRYPTKEY hKey, HCRYPTHASH hHash, BOOL Final, DWORD dwFlags, BYTE *pbData, DWORD *pdwDataLen)
BOOL WINAPI CryptGetUserKey(HCRYPTPROV hProv, DWORD dwKeySpec, HCRYPTKEY *phUserKey)
BOOL WINAPI CryptGetKeyParam(HCRYPTKEY hKey, DWORD dwParam, BYTE *pbData, DWORD *pdwDataLen, DWORD dwFlags)
BOOL WINAPI CryptSetKeyParam(HCRYPTKEY hKey, DWORD dwParam, const BYTE *pbData, DWORD dwFlags)
BOOL WINAPI CryptSetHashParam(HCRYPTHASH hHash, DWORD dwParam, const BYTE *pbData, DWORD dwFlags)
BOOL WINAPI CryptGetProvParam(HCRYPTPROV hProv, DWORD dwParam, BYTE *pbData, DWORD *pdwDataLen, DWORD dwFlags)
BOOL WINAPI CryptEncrypt(HCRYPTKEY hKey, HCRYPTHASH hHash, BOOL Final, DWORD dwFlags, BYTE *pbData, DWORD *pdwDataLen, DWORD dwBufLen)
BOOL WINAPI CryptImportKey(HCRYPTPROV hProv, const BYTE *pbData, DWORD dwDataLen, HCRYPTKEY hPubKey, DWORD dwFlags, HCRYPTKEY *phKey)
#define ERROR_CALL_NOT_IMPLEMENTED
#define ERROR_INVALID_PARAMETER
#define GetProcAddress(x, y)
#define ERROR_NO_MORE_ITEMS
#define ERROR_ACCESS_DENIED
static void cleanup(void)
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
_ACRTIMP size_t __cdecl strlen(const char *)
_ACRTIMP int __cdecl strcmp(const char *, const char *)
GLuint GLuint GLsizei count
GLuint GLuint GLsizei GLenum type
GLdouble GLdouble GLdouble r
HLOCAL NTAPI LocalAlloc(UINT uFlags, SIZE_T dwBytes)
HLOCAL NTAPI LocalFree(HLOCAL hMem)
int WINAPI lstrlenA(LPCSTR lpString)
#define memcpy(s1, s2, n)
#define ERROR_FILE_NOT_FOUND
#define NON_DEF_PROV_TYPE
static void test_verify_sig(void)
static void test_rc2_keylen(void)
static void test_SystemFunction036(void)
static BOOL FindProvRegVals(DWORD dwIndex, DWORD *pdwProvType, LPSTR *pszProvName, DWORD *pcbProvName, DWORD *pdwProvCount)
static void test_set_provider_ex(void)
static const char szBadKeySet[]
static void init_function_pointers(void)
static void test_machine_guid(void)
static const BYTE privKey[]
static BOOL FindDfltProvRegVals(DWORD dwProvType, DWORD dwFlags, LPSTR *pszProvName, DWORD *pcbProvName)
static const char szKeySet[]
static const char szRsaBaseProv[]
static void test_incorrect_api_usage(void)
static void init_environment(void)
static void test_get_default_provider(void)
static BOOL FindProvTypesRegVals(DWORD *pdwIndex, DWORD *pdwProvType, LPSTR *pszTypeName, DWORD *pcbTypeName, DWORD *pdwTypeCount)
static void test_enum_provider_types(void)
static void clean_up_environment(void)
static void test_container_sd(void)
static void test_CryptReleaseContext(void)
static const char szNonExistentProv[]
static void test_acquire_context(void)
static void test_enum_providers(void)
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
static const WCHAR szName[]
DWORD WINAPI GetLastError(void)
#define PP_KEYSET_SEC_DESCR
#define CRYPT_VERIFYCONTEXT
#define CRYPT_MACHINE_DEFAULT
#define CRYPT_DELETEKEYSET
#define CRYPT_USER_DEFAULT
#define CRYPT_IPSEC_HMAC_KEY
#define CRYPT_DELETE_DEFAULT
#define CRYPT_MACHINE_KEYSET
#define ERROR_NOT_LOGGED_ON
#define NTE_BAD_PROV_TYPE
#define ERROR_RING2_STACK_IN_USE
#define NTE_KEYSET_NOT_DEF
#define NTE_KEYSET_ENTRY_BAD
#define NTE_BAD_HASH_STATE
#define NTE_PROV_TYPE_ENTRY_BAD
#define NTE_BAD_SIGNATURE
#define NTE_PROV_TYPE_NO_MATCH
#define ERROR_ENVVAR_NOT_FOUND
#define NTE_PROV_TYPE_NOT_DEF
#define HKEY_LOCAL_MACHINE
#define HKEY_CURRENT_USER
#define OWNER_SECURITY_INFORMATION