implemented some stubs needed by ClamWin
[reactos.git] / reactos / lib / advapi32 / crypt / crypt.c
index ce90065..a2b4e89 100644 (file)
@@ -25,8 +25,9 @@
  *  - Signature checking
  */
 
-#include "advapi32.h"
+#include <advapi32.h>
 #include "crypt.h"
+#include <winefs.h>
 
 #define NDEBUG
 #include <debug.h>
@@ -126,7 +127,7 @@ static inline BOOL CRYPT_ANSIToUnicode(LPCSTR str, LPWSTR* wstr, int wstrsize)
                return TRUE;
        }
        wcount = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0);
-       wcount = wcount < wstrsize/sizeof(WCHAR) ? wcount : wstrsize/sizeof(WCHAR);
+       wcount = wcount < wstrsize/(int)sizeof(WCHAR) ? wcount : wstrsize/(int)sizeof(WCHAR);
        if (wstrsize == -1)
                *wstr = CRYPT_Alloc(wcount * sizeof(WCHAR));
        if (*wstr)
@@ -270,7 +271,7 @@ BOOL WINAPI CryptAcquireContextA (HCRYPTPROV *phProv, LPCSTR pszContainer,
                SetLastError(NTE_BAD_PROV_TYPE);
                return FALSE;
        }
-       
+
        if (!phProv)
        {
                SetLastError(ERROR_INVALID_PARAMETER);
@@ -325,7 +326,7 @@ BOOL WINAPI CryptAcquireContextA (HCRYPTPROV *phProv, LPCSTR pszContainer,
                        SetLastError(ERROR_NOT_ENOUGH_MEMORY);
                        goto error;
                }
-               r = RegQueryValueExA(key, "Name", NULL, NULL, provname, &len);
+               r = RegQueryValueExA(key, "Name", NULL, NULL, (LPBYTE)provname, &len);
                if (r != ERROR_SUCCESS)
                {
                        DPRINT("error %ld reading 'Name' from registry\n", r );
@@ -381,7 +382,7 @@ BOOL WINAPI CryptAcquireContextA (HCRYPTPROV *phProv, LPCSTR pszContainer,
                SetLastError(ERROR_NOT_ENOUGH_MEMORY);
                goto error;
        }
-       r = RegQueryValueExA(key, "Image Path", NULL, NULL, temp, &len);
+       r = RegQueryValueExA(key, "Image Path", NULL, NULL, (LPBYTE)temp, &len);
        if (r != ERROR_SUCCESS)
        {
                DPRINT("error %ld reading 'Image Path' from registry\n", r );
@@ -1001,19 +1002,19 @@ BOOL WINAPI CryptEnumProvidersW (DWORD dwIndex, DWORD *pdwReserved,
        {
                DWORD numkeys;
                WCHAR *provNameW;
-               
+
                RegQueryInfoKeyW(hKey, NULL, NULL, NULL, &numkeys, pcbProvName,
                                 NULL, NULL, NULL, NULL, NULL, NULL);
-               
+
                if (!(provNameW = CRYPT_Alloc(*pcbProvName * sizeof(WCHAR))))
                        CRYPT_ReturnLastError(ERROR_NOT_ENOUGH_MEMORY);
-               
+
                RegEnumKeyExW(hKey, dwIndex, provNameW, pcbProvName, NULL, NULL, NULL, NULL);
                (*pcbProvName)++;
                *pcbProvName *= sizeof(WCHAR);
-               
+
                CRYPT_Free(provNameW);
-               
+
                if (dwIndex >= numkeys)
                        CRYPT_ReturnLastError(ERROR_NO_MORE_ITEMS);
        }
@@ -1022,7 +1023,7 @@ BOOL WINAPI CryptEnumProvidersW (DWORD dwIndex, DWORD *pdwReserved,
                DWORD size = sizeof(DWORD);
                DWORD result;
                HKEY subkey;
-               
+
                result = RegEnumKeyW(hKey, dwIndex, pszProvName, *pcbProvName / sizeof(WCHAR));
                if (result)
                        CRYPT_ReturnLastError(result);
@@ -1123,8 +1124,8 @@ BOOL WINAPI CryptEnumProviderTypesA (DWORD dwIndex, DWORD *pdwReserved,
        *pdwProvType += (*(--ch) - '0') * 10;
        *pdwProvType += (*(--ch) - '0') * 100;
        CRYPT_Free(keyname);
-       
-       result = RegQueryValueExA(hSubkey, "TypeName", NULL, &dwType, pszTypeName, pcbTypeName);
+
+       result = RegQueryValueExA(hSubkey, "TypeName", NULL, &dwType, (LPBYTE)pszTypeName, pcbTypeName);
        if (result)
                CRYPT_ReturnLastError(result);
 
@@ -1162,7 +1163,7 @@ BOOL WINAPI CryptEnumProviderTypesW (DWORD dwIndex, DWORD *pdwReserved,
 
 /******************************************************************************
  * CryptExportKey (ADVAPI32.@)
- * 
+ *
  * Exports a cryptographic key from a CSP.
  *
  * PARAMS
@@ -1280,18 +1281,18 @@ BOOL WINAPI CryptGetDefaultProviderA (DWORD dwProvType, DWORD *pdwReserved,
                CRYPT_ReturnLastError(NTE_PROV_TYPE_NOT_DEF);
        }
        CRYPT_Free(keyname);
-       
-       result = RegQueryValueExA(hKey, "Name", NULL, NULL, pszProvName, pcbProvName); 
+
+       result = RegQueryValueExA(hKey, "Name", NULL, NULL, (LPBYTE)pszProvName, pcbProvName);
        if (result)
        {
                if (result != ERROR_MORE_DATA)
                        SetLastError(NTE_PROV_TYPE_ENTRY_BAD);
                else
                        SetLastError(result);
-               
+
                return FALSE;
        }
-       
+
        RegCloseKey(hKey);
        return TRUE;
 }
@@ -1498,7 +1499,7 @@ BOOL WINAPI CryptHashData (HCRYPTHASH hHash, BYTE *pbData, DWORD dwDataLen, DWOR
 /******************************************************************************
  * CryptHashSessionKey (ADVAPI32.@)
  *
- * PARAMS 
+ * PARAMS
  *  hHash   [I] Handle to the hash object.
  *  hKey    [I] Handle to the key to be hashed.
  *  dwFlags [I] Can be CRYPT_LITTLE_ENDIAN.
@@ -1729,7 +1730,7 @@ BOOL WINAPI CryptSetProviderExA (LPCSTR pszProvName, DWORD dwProvType, DWORD *pd
        if (dwFlags & ~(CRYPT_MACHINE_DEFAULT | CRYPT_USER_DEFAULT | CRYPT_DELETE_DEFAULT)
                        || dwFlags == CRYPT_DELETE_DEFAULT)
                CRYPT_ReturnLastError(NTE_BAD_FLAGS);
-       
+
        if (!(keyname = CRYPT_GetTypeKeyName(dwProvType, dwFlags & CRYPT_USER_DEFAULT)))
                CRYPT_ReturnLastError(ERROR_NOT_ENOUGH_MEMORY);
        if (RegOpenKeyA((dwFlags & CRYPT_USER_DEFAULT) ? HKEY_CURRENT_USER : HKEY_LOCAL_MACHINE,
@@ -1739,7 +1740,7 @@ BOOL WINAPI CryptSetProviderExA (LPCSTR pszProvName, DWORD dwProvType, DWORD *pd
                CRYPT_ReturnLastError(NTE_BAD_PROVIDER);
        }
        CRYPT_Free(keyname);
-       
+
        if (dwFlags & CRYPT_DELETE_DEFAULT)
        {
                RegDeleteValueA(hTypeKey, "Name");
@@ -1759,14 +1760,14 @@ BOOL WINAPI CryptSetProviderExA (LPCSTR pszProvName, DWORD dwProvType, DWORD *pd
                        CRYPT_ReturnLastError(NTE_BAD_PROVIDER);
                }
                CRYPT_Free(keyname);
-               
-               if (RegSetValueExA(hTypeKey, "Name", 0, REG_SZ, pszProvName, strlen(pszProvName) + 1))
+
+               if (RegSetValueExA(hTypeKey, "Name", 0, REG_SZ, (LPBYTE)pszProvName, strlen(pszProvName) + 1))
                {
                        RegCloseKey(hTypeKey);
                        RegCloseKey(hProvKey);
                        return FALSE;
                }
-               
+
                RegCloseKey(hProvKey);
        }
        RegCloseKey(hTypeKey);
@@ -1887,6 +1888,17 @@ BOOL WINAPI CryptVerifySignatureA (HCRYPTHASH hHash, BYTE *pbSignature, DWORD dw
                key->hPrivate, NULL, dwFlags);
 }
 
+BOOL WINAPI
+CryptVerifySignatureW (HCRYPTHASH hHash,
+                       BYTE *pbSignature,
+                       DWORD dwSigLen,
+                       HCRYPTKEY hPubKey,
+                       LPCWSTR sDescription,
+                       DWORD dwFlags)
+{
+       OutputDebugStringA ("ADVAPI32!CryptVerifySignatureW not implemented!");
+       return FALSE;
+}
 
 /*
    These functions have nearly identical prototypes to CryptProtectMemory and CryptUnprotectMemory,
@@ -1924,3 +1936,104 @@ NTSTATUS WINAPI SystemFunction041(PVOID memory, ULONG length, ULONG flags)  /* R
        DPRINT1("(%p, %lx, %lx): stub [RtlDecryptMemory]\n", memory, length, flags);
        return STATUS_SUCCESS;
 }
+
+
+/*
+ * @unimplemented
+ */
+DWORD WINAPI AddUsersToEncryptedFile (
+       LPCWSTR lpcwstr,
+       PENCRYPTION_CERTIFICATE_LIST pencryption_certificate_list
+       )
+{
+       DPRINT1("%s() not implemented!\n", __FUNCTION__);
+       return ERROR_CALL_NOT_IMPLEMENTED;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD WINAPI RemoveUsersFromEncryptedFile (
+       LPCWSTR lpcwstr,
+       PENCRYPTION_CERTIFICATE_HASH_LIST pencryption_certificate_hash_list
+       )
+{
+       DPRINT1("%s() not implemented!\n", __FUNCTION__);
+       return ERROR_CALL_NOT_IMPLEMENTED;
+}
+
+/*
+ * @unimplemented
+ */
+BOOL WINAPI FileEncryptionStatusW (
+       LPCWSTR lpcwstr,
+       LPDWORD lpdword
+       )
+{
+       DPRINT1("%s() not implemented!\n", __FUNCTION__);
+       return ERROR_CALL_NOT_IMPLEMENTED;
+}
+
+
+/*
+ * @unimplemented
+ */
+BOOL WINAPI FileEncryptionStatusA (
+       LPCSTR lpcstr,
+       LPDWORD lpdword
+       )
+{
+       DPRINT1("%s() not implemented!\n", __FUNCTION__);
+       return ERROR_CALL_NOT_IMPLEMENTED;
+}
+
+/*
+ * @unimplemented
+ */
+DWORD WINAPI QueryUsersOnEncryptedFile (
+       LPCWSTR lpctstr,
+       PENCRYPTION_CERTIFICATE_HASH_LIST* pencryption_certificate_hash_list
+       )
+{
+       DPRINT1("%s() not implemented!\n", __FUNCTION__);
+       return ERROR_CALL_NOT_IMPLEMENTED;
+}
+
+
+/*
+ * @unimplemented
+ */
+void WINAPI FreeEncryptionCertificateHashList (
+       PENCRYPTION_CERTIFICATE_HASH_LIST pencryption_certificate_hash_list
+       )
+{
+       DPRINT1("%s() not implemented!\n", __FUNCTION__);
+       return;
+}
+
+
+/*
+ * @unimplemented
+ */
+DWORD WINAPI QueryRecoveryAgentsOnEncryptedFile (
+       LPCWSTR lpctstr,
+       PENCRYPTION_CERTIFICATE_HASH_LIST* pencryption_certificate_hash_list
+       )
+{
+       DPRINT1("%s() not implemented!\n", __FUNCTION__);
+       return ERROR_CALL_NOT_IMPLEMENTED;
+}
+
+/*
+ * @unimplemented
+ */
+BOOL WINAPI EncryptionDisable(
+    LPCWSTR DirPath,
+    BOOL Disable
+    )
+{
+       DPRINT1("%s() not implemented!\n", __FUNCTION__);
+       return ERROR_CALL_NOT_IMPLEMENTED;
+}
+
+