advapi32: Remove a useless macro.

This commit is contained in:
Francois Gouget 2007-01-05 12:45:46 +01:00 committed by Alexandre Julliard
parent 9595ea7cd6
commit f46cfe601c

View File

@ -52,8 +52,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(crypt);
static HWND crypt_hWindow; static HWND crypt_hWindow;
#define CRYPT_ReturnLastError(err) do {SetLastError(err); return FALSE;} while(0)
#define CRYPT_Alloc(size) ((LPVOID)LocalAlloc(LMEM_ZEROINIT, size)) #define CRYPT_Alloc(size) ((LPVOID)LocalAlloc(LMEM_ZEROINIT, size))
#define CRYPT_Free(buffer) (LocalFree((HLOCAL)buffer)) #define CRYPT_Free(buffer) (LocalFree((HLOCAL)buffer))
@ -501,11 +499,15 @@ BOOL WINAPI CryptAcquireContextA (HCRYPTPROV *phProv, LPCSTR pszContainer,
pszProvider, dwProvType, dwFlags); pszProvider, dwProvType, dwFlags);
if ( !CRYPT_ANSIToUnicode(pszContainer, &pContainer, -1) ) if ( !CRYPT_ANSIToUnicode(pszContainer, &pContainer, -1) )
CRYPT_ReturnLastError(ERROR_NOT_ENOUGH_MEMORY); {
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
return FALSE;
}
if ( !CRYPT_ANSIToUnicode(pszProvider, &pProvider, -1) ) if ( !CRYPT_ANSIToUnicode(pszProvider, &pProvider, -1) )
{ {
CRYPT_Free(pContainer); CRYPT_Free(pContainer);
CRYPT_ReturnLastError(ERROR_NOT_ENOUGH_MEMORY); SetLastError(ERROR_NOT_ENOUGH_MEMORY);
return FALSE;
} }
ret = CryptAcquireContextW(phProv, pContainer, pProvider, dwProvType, dwFlags); ret = CryptAcquireContextW(phProv, pContainer, pProvider, dwProvType, dwFlags);
@ -626,10 +628,16 @@ BOOL WINAPI CryptGenRandom (HCRYPTPROV hProv, DWORD dwLen, BYTE *pbBuffer)
TRACE("(0x%lx, %d, %p)\n", hProv, dwLen, pbBuffer); TRACE("(0x%lx, %d, %p)\n", hProv, dwLen, pbBuffer);
if (!hProv) if (!hProv)
CRYPT_ReturnLastError(ERROR_INVALID_HANDLE); {
SetLastError(ERROR_INVALID_HANDLE);
return FALSE;
}
if (prov->dwMagic != MAGIC_CRYPTPROV) if (prov->dwMagic != MAGIC_CRYPTPROV)
CRYPT_ReturnLastError(ERROR_INVALID_PARAMETER); {
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
return prov->pFuncs->pCPGenRandom(prov->hPrivate, dwLen, pbBuffer); return prov->pFuncs->pCPGenRandom(prov->hPrivate, dwLen, pbBuffer);
} }
@ -663,13 +671,25 @@ BOOL WINAPI CryptCreateHash (HCRYPTPROV hProv, ALG_ID Algid, HCRYPTKEY hKey,
TRACE("(0x%lx, 0x%x, 0x%lx, %08x, %p)\n", hProv, Algid, hKey, dwFlags, phHash); TRACE("(0x%lx, 0x%x, 0x%lx, %08x, %p)\n", hProv, Algid, hKey, dwFlags, phHash);
if (!prov) if (!prov)
CRYPT_ReturnLastError(ERROR_INVALID_HANDLE); {
SetLastError(ERROR_INVALID_HANDLE);
return FALSE;
}
if (!phHash || prov->dwMagic != MAGIC_CRYPTPROV) if (!phHash || prov->dwMagic != MAGIC_CRYPTPROV)
CRYPT_ReturnLastError(ERROR_INVALID_PARAMETER); {
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
if (dwFlags) if (dwFlags)
CRYPT_ReturnLastError(NTE_BAD_FLAGS); {
SetLastError(NTE_BAD_FLAGS);
return FALSE;
}
if ( !(hash = CRYPT_Alloc(sizeof(CRYPTHASH))) ) if ( !(hash = CRYPT_Alloc(sizeof(CRYPTHASH))) )
CRYPT_ReturnLastError(ERROR_NOT_ENOUGH_MEMORY); {
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
return FALSE;
}
hash->pProvider = prov; hash->pProvider = prov;
@ -714,7 +734,10 @@ BOOL WINAPI CryptDecrypt (HCRYPTKEY hKey, HCRYPTHASH hHash, BOOL Final,
TRACE("(0x%lx, 0x%lx, %d, %08x, %p, %p)\n", hKey, hHash, Final, dwFlags, pbData, pdwDataLen); TRACE("(0x%lx, 0x%lx, %d, %08x, %p, %p)\n", hKey, hHash, Final, dwFlags, pbData, pdwDataLen);
if (!key || !pbData || !pdwDataLen || !key->pProvider || key->pProvider->dwMagic != MAGIC_CRYPTPROV) if (!key || !pbData || !pdwDataLen || !key->pProvider || key->pProvider->dwMagic != MAGIC_CRYPTPROV)
CRYPT_ReturnLastError(ERROR_INVALID_PARAMETER); {
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
prov = key->pProvider; prov = key->pProvider;
return prov->pFuncs->pCPDecrypt(prov->hPrivate, key->hPrivate, hash ? hash->hPrivate : 0, return prov->pFuncs->pCPDecrypt(prov->hPrivate, key->hPrivate, hash ? hash->hPrivate : 0,
@ -747,11 +770,20 @@ BOOL WINAPI CryptDeriveKey (HCRYPTPROV hProv, ALG_ID Algid, HCRYPTHASH hBaseData
TRACE("(0x%lx, 0x%08x, 0x%lx, 0x%08x, %p)\n", hProv, Algid, hBaseData, dwFlags, phKey); TRACE("(0x%lx, 0x%08x, 0x%lx, 0x%08x, %p)\n", hProv, Algid, hBaseData, dwFlags, phKey);
if (!prov || !hash) if (!prov || !hash)
CRYPT_ReturnLastError(ERROR_INVALID_HANDLE); {
SetLastError(ERROR_INVALID_HANDLE);
return FALSE;
}
if (!phKey || prov->dwMagic != MAGIC_CRYPTPROV) if (!phKey || prov->dwMagic != MAGIC_CRYPTPROV)
CRYPT_ReturnLastError(ERROR_INVALID_PARAMETER); {
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
if ( !(key = CRYPT_Alloc(sizeof(CRYPTKEY))) ) if ( !(key = CRYPT_Alloc(sizeof(CRYPTKEY))) )
CRYPT_ReturnLastError(ERROR_NOT_ENOUGH_MEMORY); {
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
return FALSE;
}
key->pProvider = prov; key->pProvider = prov;
if (prov->pFuncs->pCPDeriveKey(prov->hPrivate, Algid, hash->hPrivate, dwFlags, &key->hPrivate)) if (prov->pFuncs->pCPDeriveKey(prov->hPrivate, Algid, hash->hPrivate, dwFlags, &key->hPrivate))
@ -787,10 +819,16 @@ BOOL WINAPI CryptDestroyHash (HCRYPTHASH hHash)
TRACE("(0x%lx)\n", hHash); TRACE("(0x%lx)\n", hHash);
if (!hash) if (!hash)
CRYPT_ReturnLastError(ERROR_INVALID_HANDLE); {
SetLastError(ERROR_INVALID_HANDLE);
return FALSE;
}
if (!hash->pProvider || hash->pProvider->dwMagic != MAGIC_CRYPTPROV) if (!hash->pProvider || hash->pProvider->dwMagic != MAGIC_CRYPTPROV)
CRYPT_ReturnLastError(ERROR_INVALID_PARAMETER); {
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
prov = hash->pProvider; prov = hash->pProvider;
ret = prov->pFuncs->pCPDestroyHash(prov->hPrivate, hash->hPrivate); ret = prov->pFuncs->pCPDestroyHash(prov->hPrivate, hash->hPrivate);
@ -819,10 +857,16 @@ BOOL WINAPI CryptDestroyKey (HCRYPTKEY hKey)
TRACE("(0x%lx)\n", hKey); TRACE("(0x%lx)\n", hKey);
if (!key) if (!key)
CRYPT_ReturnLastError(ERROR_INVALID_HANDLE); {
SetLastError(ERROR_INVALID_HANDLE);
return FALSE;
}
if (!key->pProvider || key->pProvider->dwMagic != MAGIC_CRYPTPROV) if (!key->pProvider || key->pProvider->dwMagic != MAGIC_CRYPTPROV)
CRYPT_ReturnLastError(ERROR_INVALID_PARAMETER); {
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
prov = key->pProvider; prov = key->pProvider;
ret = prov->pFuncs->pCPDestroyKey(prov->hPrivate, key->hPrivate); ret = prov->pFuncs->pCPDestroyKey(prov->hPrivate, key->hPrivate);
@ -857,15 +901,22 @@ BOOL WINAPI CryptDuplicateHash (HCRYPTHASH hHash, DWORD *pdwReserved,
if (!orghash || pdwReserved || !phHash || !orghash->pProvider || if (!orghash || pdwReserved || !phHash || !orghash->pProvider ||
orghash->pProvider->dwMagic != MAGIC_CRYPTPROV) orghash->pProvider->dwMagic != MAGIC_CRYPTPROV)
{ {
CRYPT_ReturnLastError(ERROR_INVALID_PARAMETER); SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
} }
prov = orghash->pProvider; prov = orghash->pProvider;
if (!prov->pFuncs->pCPDuplicateHash) if (!prov->pFuncs->pCPDuplicateHash)
CRYPT_ReturnLastError(ERROR_CALL_NOT_IMPLEMENTED); {
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return FALSE;
}
if ( !(newhash = CRYPT_Alloc(sizeof(CRYPTHASH))) ) if ( !(newhash = CRYPT_Alloc(sizeof(CRYPTHASH))) )
CRYPT_ReturnLastError(ERROR_NOT_ENOUGH_MEMORY); {
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
return FALSE;
}
newhash->pProvider = prov; newhash->pProvider = prov;
if (prov->pFuncs->pCPDuplicateHash(prov->hPrivate, orghash->hPrivate, pdwReserved, dwFlags, &newhash->hPrivate)) if (prov->pFuncs->pCPDuplicateHash(prov->hPrivate, orghash->hPrivate, pdwReserved, dwFlags, &newhash->hPrivate))
@ -903,15 +954,22 @@ BOOL WINAPI CryptDuplicateKey (HCRYPTKEY hKey, DWORD *pdwReserved, DWORD dwFlags
if (!orgkey || pdwReserved || !phKey || !orgkey->pProvider || if (!orgkey || pdwReserved || !phKey || !orgkey->pProvider ||
orgkey->pProvider->dwMagic != MAGIC_CRYPTPROV) orgkey->pProvider->dwMagic != MAGIC_CRYPTPROV)
{ {
CRYPT_ReturnLastError(ERROR_INVALID_PARAMETER); SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
} }
prov = orgkey->pProvider; prov = orgkey->pProvider;
if (!prov->pFuncs->pCPDuplicateKey) if (!prov->pFuncs->pCPDuplicateKey)
CRYPT_ReturnLastError(ERROR_CALL_NOT_IMPLEMENTED); {
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return FALSE;
}
if ( !(newkey = CRYPT_Alloc(sizeof(CRYPTKEY))) ) if ( !(newkey = CRYPT_Alloc(sizeof(CRYPTKEY))) )
CRYPT_ReturnLastError(ERROR_NOT_ENOUGH_MEMORY); {
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
return FALSE;
}
newkey->pProvider = prov; newkey->pProvider = prov;
if (prov->pFuncs->pCPDuplicateKey(prov->hPrivate, orgkey->hPrivate, pdwReserved, dwFlags, &newkey->hPrivate)) if (prov->pFuncs->pCPDuplicateKey(prov->hPrivate, orgkey->hPrivate, pdwReserved, dwFlags, &newkey->hPrivate))
@ -956,7 +1014,10 @@ BOOL WINAPI CryptEncrypt (HCRYPTKEY hKey, HCRYPTHASH hHash, BOOL Final,
TRACE("(0x%lx, 0x%lx, %d, %08x, %p, %p, %d)\n", hKey, hHash, Final, dwFlags, pbData, pdwDataLen, dwBufLen); TRACE("(0x%lx, 0x%lx, %d, %08x, %p, %p, %d)\n", hKey, hHash, Final, dwFlags, pbData, pdwDataLen, dwBufLen);
if (!key || !pdwDataLen || !key->pProvider || key->pProvider->dwMagic != MAGIC_CRYPTPROV) if (!key || !pdwDataLen || !key->pProvider || key->pProvider->dwMagic != MAGIC_CRYPTPROV)
CRYPT_ReturnLastError(ERROR_INVALID_PARAMETER); {
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
prov = key->pProvider; prov = key->pProvider;
return prov->pFuncs->pCPEncrypt(prov->hPrivate, key->hPrivate, hash ? hash->hPrivate : 0, return prov->pFuncs->pCPEncrypt(prov->hPrivate, key->hPrivate, hash ? hash->hPrivate : 0,
@ -1001,11 +1062,22 @@ BOOL WINAPI CryptEnumProvidersW (DWORD dwIndex, DWORD *pdwReserved,
TRACE("(%d, %p, %d, %p, %p, %p)\n", dwIndex, pdwReserved, dwFlags, TRACE("(%d, %p, %d, %p, %p, %p)\n", dwIndex, pdwReserved, dwFlags,
pdwProvType, pszProvName, pcbProvName); pdwProvType, pszProvName, pcbProvName);
if (pdwReserved || !pcbProvName) CRYPT_ReturnLastError(ERROR_INVALID_PARAMETER); if (pdwReserved || !pcbProvName)
if (dwFlags) CRYPT_ReturnLastError(NTE_BAD_FLAGS); {
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
if (dwFlags)
{
SetLastError(NTE_BAD_FLAGS);
return FALSE;
}
if (RegOpenKeyW(HKEY_LOCAL_MACHINE, providerW, &hKey)) if (RegOpenKeyW(HKEY_LOCAL_MACHINE, providerW, &hKey))
CRYPT_ReturnLastError(NTE_FAIL); {
SetLastError(NTE_FAIL);
return FALSE;
}
if (!pszProvName) if (!pszProvName)
{ {
@ -1016,7 +1088,10 @@ BOOL WINAPI CryptEnumProvidersW (DWORD dwIndex, DWORD *pdwReserved,
NULL, NULL, NULL, NULL, NULL, NULL); NULL, NULL, NULL, NULL, NULL, NULL);
if (!(provNameW = CRYPT_Alloc(*pcbProvName * sizeof(WCHAR)))) if (!(provNameW = CRYPT_Alloc(*pcbProvName * sizeof(WCHAR))))
CRYPT_ReturnLastError(ERROR_NOT_ENOUGH_MEMORY); {
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
return FALSE;
}
RegEnumKeyExW(hKey, dwIndex, provNameW, pcbProvName, NULL, NULL, NULL, NULL); RegEnumKeyExW(hKey, dwIndex, provNameW, pcbProvName, NULL, NULL, NULL, NULL);
CRYPT_Free(provNameW); CRYPT_Free(provNameW);
@ -1024,7 +1099,10 @@ BOOL WINAPI CryptEnumProvidersW (DWORD dwIndex, DWORD *pdwReserved,
*pcbProvName *= sizeof(WCHAR); *pcbProvName *= sizeof(WCHAR);
if (dwIndex >= numkeys) if (dwIndex >= numkeys)
CRYPT_ReturnLastError(ERROR_NO_MORE_ITEMS); {
SetLastError(ERROR_NO_MORE_ITEMS);
return FALSE;
}
} else { } else {
DWORD size = sizeof(DWORD); DWORD size = sizeof(DWORD);
DWORD result; DWORD result;
@ -1032,7 +1110,10 @@ BOOL WINAPI CryptEnumProvidersW (DWORD dwIndex, DWORD *pdwReserved,
result = RegEnumKeyW(hKey, dwIndex, pszProvName, *pcbProvName / sizeof(WCHAR)); result = RegEnumKeyW(hKey, dwIndex, pszProvName, *pcbProvName / sizeof(WCHAR));
if (result) if (result)
CRYPT_ReturnLastError(result); {
SetLastError(result);
return FALSE;
}
if (RegOpenKeyW(hKey, pszProvName, &subkey)) if (RegOpenKeyW(hKey, pszProvName, &subkey))
return FALSE; return FALSE;
if (RegQueryValueExW(subkey, typeW, NULL, NULL, (BYTE*)pdwProvType, &size)) if (RegQueryValueExW(subkey, typeW, NULL, NULL, (BYTE*)pdwProvType, &size))
@ -1060,7 +1141,10 @@ BOOL WINAPI CryptEnumProvidersA (DWORD dwIndex, DWORD *pdwReserved,
CryptEnumProvidersW(dwIndex, pdwReserved, dwFlags, pdwProvType, NULL, &strlen); CryptEnumProvidersW(dwIndex, pdwReserved, dwFlags, pdwProvType, NULL, &strlen);
if ( pszProvName && !(str = CRYPT_Alloc(strlen)) ) if ( pszProvName && !(str = CRYPT_Alloc(strlen)) )
CRYPT_ReturnLastError(ERROR_NOT_ENOUGH_MEMORY); {
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
return FALSE;
}
ret = CryptEnumProvidersW(dwIndex, pdwReserved, dwFlags, pdwProvType, str, &strlen); ret = CryptEnumProvidersW(dwIndex, pdwReserved, dwFlags, pdwProvType, str, &strlen);
if (str) if (str)
CRYPT_UnicodeToANSI(str, &pszProvName, *pcbProvName); CRYPT_UnicodeToANSI(str, &pszProvName, *pcbProvName);
@ -1069,7 +1153,10 @@ BOOL WINAPI CryptEnumProvidersA (DWORD dwIndex, DWORD *pdwReserved,
{ {
CRYPT_Free(str); CRYPT_Free(str);
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
CRYPT_ReturnLastError(ERROR_MORE_DATA); {
SetLastError(ERROR_MORE_DATA);
return FALSE;
}
} }
return ret; return ret;
} }
@ -1116,18 +1203,31 @@ BOOL WINAPI CryptEnumProviderTypesW (DWORD dwIndex, DWORD *pdwReserved,
dwFlags, pdwProvType, pszTypeName, pcbTypeName); dwFlags, pdwProvType, pszTypeName, pcbTypeName);
if (pdwReserved || !pdwProvType || !pcbTypeName) if (pdwReserved || !pdwProvType || !pcbTypeName)
CRYPT_ReturnLastError(ERROR_INVALID_PARAMETER); {
if (dwFlags) CRYPT_ReturnLastError(NTE_BAD_FLAGS); SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
if (dwFlags)
{
SetLastError(NTE_BAD_FLAGS);
return FALSE;
}
if (RegOpenKeyW(HKEY_LOCAL_MACHINE, KEYSTR, &hKey)) if (RegOpenKeyW(HKEY_LOCAL_MACHINE, KEYSTR, &hKey))
return FALSE; return FALSE;
RegQueryInfoKeyW(hKey, NULL, NULL, NULL, &numkeys, &keylen, NULL, NULL, NULL, NULL, NULL, NULL); RegQueryInfoKeyW(hKey, NULL, NULL, NULL, &numkeys, &keylen, NULL, NULL, NULL, NULL, NULL, NULL);
if (dwIndex >= numkeys) if (dwIndex >= numkeys)
CRYPT_ReturnLastError(ERROR_NO_MORE_ITEMS); {
SetLastError(ERROR_NO_MORE_ITEMS);
return FALSE;
}
keylen++; keylen++;
if ( !(keyname = CRYPT_Alloc(keylen*sizeof(WCHAR))) ) if ( !(keyname = CRYPT_Alloc(keylen*sizeof(WCHAR))) )
CRYPT_ReturnLastError(ERROR_NOT_ENOUGH_MEMORY); {
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
return FALSE;
}
if ( RegEnumKeyW(hKey, dwIndex, keyname, keylen) ) { if ( RegEnumKeyW(hKey, dwIndex, keyname, keylen) ) {
CRYPT_Free(keyname); CRYPT_Free(keyname);
return FALSE; return FALSE;
@ -1142,7 +1242,10 @@ BOOL WINAPI CryptEnumProviderTypesW (DWORD dwIndex, DWORD *pdwReserved,
result = RegQueryValueExW(hSubkey, typenameW, NULL, &dwType, (LPBYTE)pszTypeName, pcbTypeName); result = RegQueryValueExW(hSubkey, typenameW, NULL, &dwType, (LPBYTE)pszTypeName, pcbTypeName);
if (result) if (result)
CRYPT_ReturnLastError(result); {
SetLastError(result);
return FALSE;
}
RegCloseKey(hSubkey); RegCloseKey(hSubkey);
RegCloseKey(hKey); RegCloseKey(hKey);
@ -1166,7 +1269,10 @@ BOOL WINAPI CryptEnumProviderTypesA (DWORD dwIndex, DWORD *pdwReserved,
CryptEnumProviderTypesW(dwIndex, pdwReserved, dwFlags, pdwProvType, NULL, &strlen); CryptEnumProviderTypesW(dwIndex, pdwReserved, dwFlags, pdwProvType, NULL, &strlen);
if ( pszTypeName && !(str = CRYPT_Alloc(strlen)) ) if ( pszTypeName && !(str = CRYPT_Alloc(strlen)) )
CRYPT_ReturnLastError(ERROR_NOT_ENOUGH_MEMORY); {
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
return FALSE;
}
ret = CryptEnumProviderTypesW(dwIndex, pdwReserved, dwFlags, pdwProvType, str, &strlen); ret = CryptEnumProviderTypesW(dwIndex, pdwReserved, dwFlags, pdwProvType, str, &strlen);
if (str) if (str)
CRYPT_UnicodeToANSI(str, &pszTypeName, *pcbTypeName); CRYPT_UnicodeToANSI(str, &pszTypeName, *pcbTypeName);
@ -1175,7 +1281,10 @@ BOOL WINAPI CryptEnumProviderTypesA (DWORD dwIndex, DWORD *pdwReserved,
{ {
CRYPT_Free(str); CRYPT_Free(str);
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
CRYPT_ReturnLastError(ERROR_MORE_DATA); {
SetLastError(ERROR_MORE_DATA);
return FALSE;
}
} }
return ret; return ret;
} }
@ -1210,7 +1319,10 @@ BOOL WINAPI CryptExportKey (HCRYPTKEY hKey, HCRYPTKEY hExpKey, DWORD dwBlobType,
TRACE("(0x%lx, 0x%lx, %d, %08x, %p, %p)\n", hKey, hExpKey, dwBlobType, dwFlags, pbData, pdwDataLen); TRACE("(0x%lx, 0x%lx, %d, %08x, %p, %p)\n", hKey, hExpKey, dwBlobType, dwFlags, pbData, pdwDataLen);
if (!key || !pdwDataLen || !key->pProvider || key->pProvider->dwMagic != MAGIC_CRYPTPROV) if (!key || !pdwDataLen || !key->pProvider || key->pProvider->dwMagic != MAGIC_CRYPTPROV)
CRYPT_ReturnLastError(ERROR_INVALID_PARAMETER); {
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
prov = key->pProvider; prov = key->pProvider;
return prov->pFuncs->pCPExportKey(prov->hPrivate, key->hPrivate, expkey ? expkey->hPrivate : 0, return prov->pFuncs->pCPExportKey(prov->hPrivate, key->hPrivate, expkey ? expkey->hPrivate : 0,
@ -1240,11 +1352,20 @@ BOOL WINAPI CryptGenKey (HCRYPTPROV hProv, ALG_ID Algid, DWORD dwFlags, HCRYPTKE
TRACE("(0x%lx, %d, %08x, %p)\n", hProv, Algid, dwFlags, phKey); TRACE("(0x%lx, %d, %08x, %p)\n", hProv, Algid, dwFlags, phKey);
if (!prov) if (!prov)
CRYPT_ReturnLastError(ERROR_INVALID_HANDLE); {
SetLastError(ERROR_INVALID_HANDLE);
return FALSE;
}
if (!phKey || !prov || prov->dwMagic != MAGIC_CRYPTPROV) if (!phKey || !prov || prov->dwMagic != MAGIC_CRYPTPROV)
CRYPT_ReturnLastError(ERROR_INVALID_PARAMETER); {
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
if ( !(key = CRYPT_Alloc(sizeof(CRYPTKEY))) ) if ( !(key = CRYPT_Alloc(sizeof(CRYPTKEY))) )
CRYPT_ReturnLastError(ERROR_NOT_ENOUGH_MEMORY); {
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
return FALSE;
}
key->pProvider = prov; key->pProvider = prov;
@ -1288,17 +1409,30 @@ BOOL WINAPI CryptGetDefaultProviderW (DWORD dwProvType, DWORD *pdwReserved,
static const WCHAR nameW[] = {'N','a','m','e',0}; static const WCHAR nameW[] = {'N','a','m','e',0};
if (pdwReserved || !pcbProvName) if (pdwReserved || !pcbProvName)
CRYPT_ReturnLastError(ERROR_INVALID_PARAMETER); {
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
if (dwFlags & ~(CRYPT_USER_DEFAULT | CRYPT_MACHINE_DEFAULT)) if (dwFlags & ~(CRYPT_USER_DEFAULT | CRYPT_MACHINE_DEFAULT))
CRYPT_ReturnLastError(NTE_BAD_FLAGS); {
SetLastError(NTE_BAD_FLAGS);
return FALSE;
}
if (dwProvType > 999) if (dwProvType > 999)
CRYPT_ReturnLastError(NTE_BAD_PROV_TYPE); {
SetLastError(NTE_BAD_PROV_TYPE);
return FALSE;
}
if ( !(keyname = CRYPT_GetTypeKeyName(dwProvType, dwFlags & CRYPT_USER_DEFAULT)) ) if ( !(keyname = CRYPT_GetTypeKeyName(dwProvType, dwFlags & CRYPT_USER_DEFAULT)) )
CRYPT_ReturnLastError(ERROR_NOT_ENOUGH_MEMORY); {
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
return FALSE;
}
if (RegOpenKeyW((dwFlags & CRYPT_USER_DEFAULT) ? HKEY_CURRENT_USER : HKEY_LOCAL_MACHINE ,keyname, &hKey)) if (RegOpenKeyW((dwFlags & CRYPT_USER_DEFAULT) ? HKEY_CURRENT_USER : HKEY_LOCAL_MACHINE ,keyname, &hKey))
{ {
CRYPT_Free(keyname); CRYPT_Free(keyname);
CRYPT_ReturnLastError(NTE_PROV_TYPE_NOT_DEF); SetLastError(NTE_PROV_TYPE_NOT_DEF);
return FALSE;
} }
CRYPT_Free(keyname); CRYPT_Free(keyname);
@ -1333,7 +1467,10 @@ BOOL WINAPI CryptGetDefaultProviderA (DWORD dwProvType, DWORD *pdwReserved,
CryptGetDefaultProviderW(dwProvType, pdwReserved, dwFlags, NULL, &strlen); CryptGetDefaultProviderW(dwProvType, pdwReserved, dwFlags, NULL, &strlen);
if ( pszProvName && !(str = CRYPT_Alloc(strlen)) ) if ( pszProvName && !(str = CRYPT_Alloc(strlen)) )
CRYPT_ReturnLastError(ERROR_NOT_ENOUGH_MEMORY); {
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
return FALSE;
}
ret = CryptGetDefaultProviderW(dwProvType, pdwReserved, dwFlags, str, &strlen); ret = CryptGetDefaultProviderW(dwProvType, pdwReserved, dwFlags, str, &strlen);
if (str) if (str)
CRYPT_UnicodeToANSI(str, &pszProvName, *pcbProvName); CRYPT_UnicodeToANSI(str, &pszProvName, *pcbProvName);
@ -1342,7 +1479,10 @@ BOOL WINAPI CryptGetDefaultProviderA (DWORD dwProvType, DWORD *pdwReserved,
{ {
CRYPT_Free(str); CRYPT_Free(str);
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
CRYPT_ReturnLastError(ERROR_MORE_DATA); {
SetLastError(ERROR_MORE_DATA);
return FALSE;
}
} }
return ret; return ret;
} }
@ -1375,7 +1515,10 @@ BOOL WINAPI CryptGetHashParam (HCRYPTHASH hHash, DWORD dwParam, BYTE *pbData,
TRACE("(0x%lx, %d, %p, %p, %08x)\n", hHash, dwParam, pbData, pdwDataLen, dwFlags); TRACE("(0x%lx, %d, %p, %p, %08x)\n", hHash, dwParam, pbData, pdwDataLen, dwFlags);
if (!hash || !pdwDataLen || !hash->pProvider || hash->pProvider->dwMagic != MAGIC_CRYPTPROV) if (!hash || !pdwDataLen || !hash->pProvider || hash->pProvider->dwMagic != MAGIC_CRYPTPROV)
CRYPT_ReturnLastError(ERROR_INVALID_PARAMETER); {
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
prov = hash->pProvider; prov = hash->pProvider;
return prov->pFuncs->pCPGetHashParam(prov->hPrivate, hash->hPrivate, dwParam, return prov->pFuncs->pCPGetHashParam(prov->hPrivate, hash->hPrivate, dwParam,
@ -1410,7 +1553,10 @@ BOOL WINAPI CryptGetKeyParam (HCRYPTKEY hKey, DWORD dwParam, BYTE *pbData,
TRACE("(0x%lx, %d, %p, %p, %08x)\n", hKey, dwParam, pbData, pdwDataLen, dwFlags); TRACE("(0x%lx, %d, %p, %p, %08x)\n", hKey, dwParam, pbData, pdwDataLen, dwFlags);
if (!key || !pdwDataLen || !key->pProvider || key->pProvider->dwMagic != MAGIC_CRYPTPROV) if (!key || !pdwDataLen || !key->pProvider || key->pProvider->dwMagic != MAGIC_CRYPTPROV)
CRYPT_ReturnLastError(ERROR_INVALID_PARAMETER); {
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
prov = key->pProvider; prov = key->pProvider;
return prov->pFuncs->pCPGetKeyParam(prov->hPrivate, key->hPrivate, dwParam, return prov->pFuncs->pCPGetKeyParam(prov->hPrivate, key->hPrivate, dwParam,
@ -1444,7 +1590,10 @@ BOOL WINAPI CryptGetProvParam (HCRYPTPROV hProv, DWORD dwParam, BYTE *pbData,
TRACE("(0x%lx, %d, %p, %p, %08x)\n", hProv, dwParam, pbData, pdwDataLen, dwFlags); TRACE("(0x%lx, %d, %p, %p, %08x)\n", hProv, dwParam, pbData, pdwDataLen, dwFlags);
if (!prov || prov->dwMagic != MAGIC_CRYPTPROV) if (!prov || prov->dwMagic != MAGIC_CRYPTPROV)
CRYPT_ReturnLastError(ERROR_INVALID_PARAMETER); {
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
return prov->pFuncs->pCPGetProvParam(prov->hPrivate, dwParam, pbData, pdwDataLen, dwFlags); return prov->pFuncs->pCPGetProvParam(prov->hPrivate, dwParam, pbData, pdwDataLen, dwFlags);
} }
@ -1471,11 +1620,20 @@ BOOL WINAPI CryptGetUserKey (HCRYPTPROV hProv, DWORD dwKeySpec, HCRYPTKEY *phUse
TRACE("(0x%lx, %d, %p)\n", hProv, dwKeySpec, phUserKey); TRACE("(0x%lx, %d, %p)\n", hProv, dwKeySpec, phUserKey);
if (!prov) if (!prov)
CRYPT_ReturnLastError(ERROR_INVALID_HANDLE); {
SetLastError(ERROR_INVALID_HANDLE);
return FALSE;
}
if (!phUserKey || prov->dwMagic != MAGIC_CRYPTPROV) if (!phUserKey || prov->dwMagic != MAGIC_CRYPTPROV)
CRYPT_ReturnLastError(ERROR_INVALID_PARAMETER); {
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
if ( !(key = CRYPT_Alloc(sizeof(CRYPTKEY))) ) if ( !(key = CRYPT_Alloc(sizeof(CRYPTKEY))) )
CRYPT_ReturnLastError(ERROR_NOT_ENOUGH_MEMORY); {
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
return FALSE;
}
key->pProvider = prov; key->pProvider = prov;
@ -1514,9 +1672,15 @@ BOOL WINAPI CryptHashData (HCRYPTHASH hHash, const BYTE *pbData, DWORD dwDataLen
TRACE("(0x%lx, %p, %d, %08x)\n", hHash, pbData, dwDataLen, dwFlags); TRACE("(0x%lx, %p, %d, %08x)\n", hHash, pbData, dwDataLen, dwFlags);
if (!hash) if (!hash)
CRYPT_ReturnLastError(ERROR_INVALID_HANDLE); {
SetLastError(ERROR_INVALID_HANDLE);
return FALSE;
}
if (!hash->pProvider || hash->pProvider->dwMagic != MAGIC_CRYPTPROV) if (!hash->pProvider || hash->pProvider->dwMagic != MAGIC_CRYPTPROV)
CRYPT_ReturnLastError(ERROR_INVALID_PARAMETER); {
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
prov = hash->pProvider; prov = hash->pProvider;
return prov->pFuncs->pCPHashData(prov->hPrivate, hash->hPrivate, pbData, dwDataLen, dwFlags); return prov->pFuncs->pCPHashData(prov->hPrivate, hash->hPrivate, pbData, dwDataLen, dwFlags);
@ -1545,10 +1709,16 @@ BOOL WINAPI CryptHashSessionKey (HCRYPTHASH hHash, HCRYPTKEY hKey, DWORD dwFlags
TRACE("(0x%lx, 0x%lx, %08x)\n", hHash, hKey, dwFlags); TRACE("(0x%lx, 0x%lx, %08x)\n", hHash, hKey, dwFlags);
if (!hash || !key) if (!hash || !key)
CRYPT_ReturnLastError(ERROR_INVALID_HANDLE); {
SetLastError(ERROR_INVALID_HANDLE);
return FALSE;
}
if (!hash->pProvider || hash->pProvider->dwMagic != MAGIC_CRYPTPROV) if (!hash->pProvider || hash->pProvider->dwMagic != MAGIC_CRYPTPROV)
CRYPT_ReturnLastError(ERROR_INVALID_PARAMETER); {
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
prov = hash->pProvider; prov = hash->pProvider;
return prov->pFuncs->pCPHashSessionKey(prov->hPrivate, hash->hPrivate, key->hPrivate, dwFlags); return prov->pFuncs->pCPHashSessionKey(prov->hPrivate, hash->hPrivate, key->hPrivate, dwFlags);
@ -1580,10 +1750,16 @@ BOOL WINAPI CryptImportKey (HCRYPTPROV hProv, BYTE *pbData, DWORD dwDataLen,
TRACE("(0x%lx, %p, %d, 0x%lx, %08x, %p)\n", hProv, pbData, dwDataLen, hPubKey, dwFlags, phKey); TRACE("(0x%lx, %p, %d, 0x%lx, %08x, %p)\n", hProv, pbData, dwDataLen, hPubKey, dwFlags, phKey);
if (!prov || !pbData || !dwDataLen || !phKey || prov->dwMagic != MAGIC_CRYPTPROV) if (!prov || !pbData || !dwDataLen || !phKey || prov->dwMagic != MAGIC_CRYPTPROV)
CRYPT_ReturnLastError(ERROR_INVALID_PARAMETER); {
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
if ( !(importkey = CRYPT_Alloc(sizeof(CRYPTKEY))) ) if ( !(importkey = CRYPT_Alloc(sizeof(CRYPTKEY))) )
CRYPT_ReturnLastError(ERROR_NOT_ENOUGH_MEMORY); {
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
return FALSE;
}
importkey->pProvider = prov; importkey->pProvider = prov;
if (prov->pFuncs->pCPImportKey(prov->hPrivate, pbData, dwDataLen, if (prov->pFuncs->pCPImportKey(prov->hPrivate, pbData, dwDataLen,
@ -1629,9 +1805,15 @@ BOOL WINAPI CryptSignHashW (HCRYPTHASH hHash, DWORD dwKeySpec, LPCWSTR sDescript
hHash, dwKeySpec, debugstr_w(sDescription), dwFlags, pbSignature, pdwSigLen); hHash, dwKeySpec, debugstr_w(sDescription), dwFlags, pbSignature, pdwSigLen);
if (!hash) if (!hash)
CRYPT_ReturnLastError(ERROR_INVALID_HANDLE); {
SetLastError(ERROR_INVALID_HANDLE);
return FALSE;
}
if (!pdwSigLen || !hash->pProvider || hash->pProvider->dwMagic != MAGIC_CRYPTPROV) if (!pdwSigLen || !hash->pProvider || hash->pProvider->dwMagic != MAGIC_CRYPTPROV)
CRYPT_ReturnLastError(ERROR_INVALID_PARAMETER); {
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
prov = hash->pProvider; prov = hash->pProvider;
return prov->pFuncs->pCPSignHash(prov->hPrivate, hash->hPrivate, dwKeySpec, sDescription, return prov->pFuncs->pCPSignHash(prov->hPrivate, hash->hPrivate, dwKeySpec, sDescription,
@ -1682,7 +1864,10 @@ BOOL WINAPI CryptSetHashParam (HCRYPTHASH hHash, DWORD dwParam, BYTE *pbData, DW
TRACE("(0x%lx, %d, %p, %08x)\n", hHash, dwParam, pbData, dwFlags); TRACE("(0x%lx, %d, %p, %08x)\n", hHash, dwParam, pbData, dwFlags);
if (!hash || !pbData || !hash->pProvider || hash->pProvider->dwMagic != MAGIC_CRYPTPROV) if (!hash || !pbData || !hash->pProvider || hash->pProvider->dwMagic != MAGIC_CRYPTPROV)
CRYPT_ReturnLastError(ERROR_INVALID_PARAMETER); {
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
prov = hash->pProvider; prov = hash->pProvider;
return prov->pFuncs->pCPSetHashParam(prov->hPrivate, hash->hPrivate, return prov->pFuncs->pCPSetHashParam(prov->hPrivate, hash->hPrivate,
@ -1712,7 +1897,10 @@ BOOL WINAPI CryptSetKeyParam (HCRYPTKEY hKey, DWORD dwParam, BYTE *pbData, DWORD
TRACE("(0x%lx, %d, %p, %08x)\n", hKey, dwParam, pbData, dwFlags); TRACE("(0x%lx, %d, %p, %08x)\n", hKey, dwParam, pbData, dwFlags);
if (!key || !pbData || !key->pProvider || key->pProvider->dwMagic != MAGIC_CRYPTPROV) if (!key || !pbData || !key->pProvider || key->pProvider->dwMagic != MAGIC_CRYPTPROV)
CRYPT_ReturnLastError(ERROR_INVALID_PARAMETER); {
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
prov = key->pProvider; prov = key->pProvider;
return prov->pFuncs->pCPSetKeyParam(prov->hPrivate, key->hPrivate, return prov->pFuncs->pCPSetKeyParam(prov->hPrivate, key->hPrivate,
@ -1773,20 +1961,33 @@ BOOL WINAPI CryptSetProviderExW (LPCWSTR pszProvName, DWORD dwProvType, DWORD *p
TRACE("(%s, %d, %p, %08x)\n", debugstr_w(pszProvName), dwProvType, pdwReserved, dwFlags); TRACE("(%s, %d, %p, %08x)\n", debugstr_w(pszProvName), dwProvType, pdwReserved, dwFlags);
if (!pszProvName || pdwReserved) if (!pszProvName || pdwReserved)
CRYPT_ReturnLastError(ERROR_INVALID_PARAMETER); {
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
if (dwProvType > MAXPROVTYPES) if (dwProvType > MAXPROVTYPES)
CRYPT_ReturnLastError(NTE_BAD_PROV_TYPE); {
SetLastError(NTE_BAD_PROV_TYPE);
return FALSE;
}
if (dwFlags & ~(CRYPT_MACHINE_DEFAULT | CRYPT_USER_DEFAULT | CRYPT_DELETE_DEFAULT) if (dwFlags & ~(CRYPT_MACHINE_DEFAULT | CRYPT_USER_DEFAULT | CRYPT_DELETE_DEFAULT)
|| dwFlags == CRYPT_DELETE_DEFAULT) || dwFlags == CRYPT_DELETE_DEFAULT)
CRYPT_ReturnLastError(NTE_BAD_FLAGS); {
SetLastError(NTE_BAD_FLAGS);
return FALSE;
}
if (!(keyname = CRYPT_GetTypeKeyName(dwProvType, dwFlags & CRYPT_USER_DEFAULT))) if (!(keyname = CRYPT_GetTypeKeyName(dwProvType, dwFlags & CRYPT_USER_DEFAULT)))
CRYPT_ReturnLastError(ERROR_NOT_ENOUGH_MEMORY); {
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
return FALSE;
}
if (RegOpenKeyW((dwFlags & CRYPT_USER_DEFAULT) ? HKEY_CURRENT_USER : HKEY_LOCAL_MACHINE, if (RegOpenKeyW((dwFlags & CRYPT_USER_DEFAULT) ? HKEY_CURRENT_USER : HKEY_LOCAL_MACHINE,
keyname, &hTypeKey)) keyname, &hTypeKey))
{ {
CRYPT_Free(keyname); CRYPT_Free(keyname);
CRYPT_ReturnLastError(NTE_BAD_PROVIDER); SetLastError(NTE_BAD_PROVIDER);
return FALSE;
} }
CRYPT_Free(keyname); CRYPT_Free(keyname);
@ -1799,14 +2000,16 @@ BOOL WINAPI CryptSetProviderExW (LPCWSTR pszProvName, DWORD dwProvType, DWORD *p
if (!(keyname = CRYPT_GetProvKeyName(pszProvName))) if (!(keyname = CRYPT_GetProvKeyName(pszProvName)))
{ {
RegCloseKey(hTypeKey); RegCloseKey(hTypeKey);
CRYPT_ReturnLastError(ERROR_NOT_ENOUGH_MEMORY); SetLastError(ERROR_NOT_ENOUGH_MEMORY);
return FALSE;
} }
if (RegOpenKeyW((dwFlags & CRYPT_USER_DEFAULT) ? HKEY_CURRENT_USER : HKEY_LOCAL_MACHINE, if (RegOpenKeyW((dwFlags & CRYPT_USER_DEFAULT) ? HKEY_CURRENT_USER : HKEY_LOCAL_MACHINE,
keyname, &hProvKey)) keyname, &hProvKey))
{ {
CRYPT_Free(keyname); CRYPT_Free(keyname);
RegCloseKey(hTypeKey); RegCloseKey(hTypeKey);
CRYPT_ReturnLastError(NTE_BAD_PROVIDER); SetLastError(NTE_BAD_PROVIDER);
return FALSE;
} }
CRYPT_Free(keyname); CRYPT_Free(keyname);
@ -1867,9 +2070,15 @@ BOOL WINAPI CryptSetProvParam (HCRYPTPROV hProv, DWORD dwParam, BYTE *pbData, DW
TRACE("(0x%lx, %d, %p, %08x)\n", hProv, dwParam, pbData, dwFlags); TRACE("(0x%lx, %d, %p, %08x)\n", hProv, dwParam, pbData, dwFlags);
if (!prov) if (!prov)
CRYPT_ReturnLastError(ERROR_INVALID_HANDLE); {
SetLastError(ERROR_INVALID_HANDLE);
return FALSE;
}
if (prov->dwMagic != MAGIC_CRYPTPROV) if (prov->dwMagic != MAGIC_CRYPTPROV)
CRYPT_ReturnLastError(ERROR_INVALID_PARAMETER); {
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
if (dwFlags & PP_USE_HARDWARE_RNG) if (dwFlags & PP_USE_HARDWARE_RNG)
{ {
FIXME("PP_USE_HARDWARE_RNG: What do I do with this?\n"); FIXME("PP_USE_HARDWARE_RNG: What do I do with this?\n");
@ -1924,12 +2133,16 @@ BOOL WINAPI CryptVerifySignatureW (HCRYPTHASH hHash, BYTE *pbSignature, DWORD dw
dwSigLen, hPubKey, debugstr_w(sDescription), dwFlags); dwSigLen, hPubKey, debugstr_w(sDescription), dwFlags);
if (!hash || !key) if (!hash || !key)
CRYPT_ReturnLastError(ERROR_INVALID_HANDLE); {
SetLastError(ERROR_INVALID_HANDLE);
return FALSE;
}
if (!pbSignature || !dwSigLen || if (!pbSignature || !dwSigLen ||
!hash->pProvider || hash->pProvider->dwMagic != MAGIC_CRYPTPROV || !hash->pProvider || hash->pProvider->dwMagic != MAGIC_CRYPTPROV ||
!key->pProvider || key->pProvider->dwMagic != MAGIC_CRYPTPROV) !key->pProvider || key->pProvider->dwMagic != MAGIC_CRYPTPROV)
{ {
CRYPT_ReturnLastError(ERROR_INVALID_PARAMETER); SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
} }
prov = hash->pProvider; prov = hash->pProvider;