* Sync up to trunk head (r64921).
[reactos.git] / dll / win32 / advapi32 / crypt / crypt.c
index ff734d5..2643561 100644 (file)
  *  - Thread-safing
   */
 
-#define WINE_STRICT_PROTOTYPES
 #include <advapi32.h>
 WINE_DEFAULT_DEBUG_CHANNEL(crypt);
 
-
-/*
- * Note: this code is harmless on little-endian machines.
- */
-VOID byteReverse(unsigned char *buf, unsigned longs)
-{
-    unsigned int t;
-
-    do
-    {
-        t = (unsigned int)((unsigned)buf[3] << 8 | buf[2]) << 16 |
-            ((unsigned)buf[1] << 8 | buf[0]);
-        *(unsigned int *)buf = t;
-        buf += 4;
-    } while (--longs);
-}
-
 static HWND crypt_hWindow;
 
 #define CRYPT_Alloc(size) (LocalAlloc(LMEM_ZEROINIT, size))
@@ -324,7 +306,7 @@ static void CRYPT_CreateMachineGuid(void)
  *  dwProvType   [I] Crypto provider type to get a handle.
  *  dwFlags      [I] flags for the operation
  *
- * RETURNS 
+ * RETURNS
  *  TRUE on success, FALSE on failure.
  */
 BOOL WINAPI CryptAcquireContextW (HCRYPTPROV *phProv, LPCWSTR pszContainer,
@@ -348,7 +330,7 @@ BOOL WINAPI CryptAcquireContextW (HCRYPTPROV *phProv, LPCWSTR pszContainer,
                SetLastError(NTE_BAD_PROV_TYPE);
                return FALSE;
        }
-       
+
        if (!phProv)
        {
                SetLastError(ERROR_INVALID_PARAMETER);
@@ -584,7 +566,7 @@ BOOL WINAPI CryptAcquireContextA (HCRYPTPROV *phProv, LPCSTR pszContainer,
  */
 BOOL WINAPI CryptContextAddRef (HCRYPTPROV hProv, DWORD *pdwReserved, DWORD dwFlags)
 {
-       PCRYPTPROV pProv = (PCRYPTPROV)hProv;   
+       PCRYPTPROV pProv = (PCRYPTPROV)hProv;
 
        TRACE("(0x%lx, %p, %08x)\n", hProv, pdwReserved, dwFlags);
 
@@ -637,7 +619,7 @@ BOOL WINAPI CryptReleaseContext (HCRYPTPROV hProv, DWORD dwFlags)
        }
 
        pProv->refcount--;
-       if (pProv->refcount <= 0) 
+       if (pProv->refcount <= 0)
        {
                ret = pProv->pFuncs->pCPReleaseContext(pProv->hPrivate, dwFlags);
                pProv->dwMagic = 0;
@@ -1145,10 +1127,10 @@ 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))))
                {
                        SetLastError(ERROR_NOT_ENOUGH_MEMORY);
@@ -1170,7 +1152,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)
                {
@@ -1314,7 +1296,7 @@ BOOL WINAPI CryptEnumProviderTypesW (DWORD dwIndex, DWORD *pdwReserved,
        *pdwProvType += (*(--ch) - '0') * 10;
        *pdwProvType += (*(--ch) - '0') * 100;
        CRYPT_Free(keyname);
-       
+
        result = RegQueryValueExW(hSubkey, typenameW, NULL, &dwType, (LPBYTE)pszTypeName, pcbTypeName);
        if (result)
        {
@@ -1367,7 +1349,7 @@ BOOL WINAPI CryptEnumProviderTypesA (DWORD dwIndex, DWORD *pdwReserved,
 
 /******************************************************************************
  * CryptExportKey (ADVAPI32.@)
- * 
+ *
  * Exports a cryptographic key from a CSP.
  *
  * PARAMS
@@ -1508,8 +1490,8 @@ BOOL WINAPI CryptGetDefaultProviderW (DWORD dwProvType, DWORD *pdwReserved,
                return FALSE;
        }
        CRYPT_Free(keyname);
-       
-       result = RegQueryValueExW(hKey, nameW, NULL, NULL, (LPBYTE)pszProvName, pcbProvName); 
+
+       result = RegQueryValueExW(hKey, nameW, NULL, NULL, (LPBYTE)pszProvName, pcbProvName);
        RegCloseKey(hKey);
 
        if (result)
@@ -1518,10 +1500,10 @@ BOOL WINAPI CryptGetDefaultProviderW (DWORD dwProvType, DWORD *pdwReserved,
                        SetLastError(NTE_PROV_TYPE_ENTRY_BAD);
                else
                        SetLastError(result);
-               
+
                return FALSE;
        }
-       
+
        return TRUE;
 }
 
@@ -1769,7 +1751,7 @@ BOOL WINAPI CryptHashData (HCRYPTHASH hHash, const BYTE *pbData, DWORD dwDataLen
  *
  * Compute the cryptographic hash of a session key object.
  *
- * 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.
@@ -1820,7 +1802,7 @@ BOOL WINAPI CryptHashSessionKey (HCRYPTHASH hHash, HCRYPTKEY hKey, DWORD dwFlags
  *  Success: TRUE
  *  Failure: FALSE
  */
-BOOL WINAPI CryptImportKey (HCRYPTPROV hProv, CONST BYTE *pbData, DWORD dwDataLen,
+BOOL WINAPI CryptImportKey (HCRYPTPROV hProv, const BYTE *pbData, DWORD dwDataLen,
                HCRYPTKEY hPubKey, DWORD dwFlags, HCRYPTKEY *phKey)
 {
        PCRYPTPROV prov = (PCRYPTPROV)hProv;
@@ -1884,7 +1866,7 @@ BOOL WINAPI CryptSignHashW (HCRYPTHASH hHash, DWORD dwKeySpec, LPCWSTR sDescript
        PCRYPTHASH hash = (PCRYPTHASH)hHash;
        PCRYPTPROV prov;
 
-       TRACE("(0x%lx, %d, %s, %08x, %p, %p)\n", 
+       TRACE("(0x%lx, %d, %s, %08x, %p, %p)\n",
                hHash, dwKeySpec, debugstr_w(sDescription), dwFlags, pbSignature, pdwSigLen);
 
        if (!hash)
@@ -1915,7 +1897,7 @@ BOOL WINAPI CryptSignHashA (HCRYPTHASH hHash, DWORD dwKeySpec, LPCSTR sDescripti
        LPWSTR wsDescription;
        BOOL result;
 
-       TRACE("(0x%lx, %d, %s, %08x, %p, %p)\n", 
+       TRACE("(0x%lx, %d, %s, %08x, %p, %p)\n",
                hHash, dwKeySpec, debugstr_a(sDescription), dwFlags, pbSignature, pdwSigLen);
 
        CRYPT_ANSIToUnicode(sDescription, &wsDescription, -1);
@@ -1940,7 +1922,7 @@ BOOL WINAPI CryptSignHashA (HCRYPTHASH hHash, DWORD dwKeySpec, LPCSTR sDescripti
  *  Success: TRUE
  *  Failure: FALSE
  */
-BOOL WINAPI CryptSetHashParam (HCRYPTHASH hHash, DWORD dwParam, CONST BYTE *pbData, DWORD dwFlags)
+BOOL WINAPI CryptSetHashParam (HCRYPTHASH hHash, DWORD dwParam, const BYTE *pbData, DWORD dwFlags)
 {
        PCRYPTPROV prov;
        PCRYPTHASH hash = (PCRYPTHASH)hHash;
@@ -1974,7 +1956,7 @@ BOOL WINAPI CryptSetHashParam (HCRYPTHASH hHash, DWORD dwParam, CONST BYTE *pbDa
  *  Success: TRUE
  *  Failure: FALSE
  */
-BOOL WINAPI CryptSetKeyParam (HCRYPTKEY hKey, DWORD dwParam, CONST BYTE *pbData, DWORD dwFlags)
+BOOL WINAPI CryptSetKeyParam (HCRYPTKEY hKey, DWORD dwParam, const BYTE *pbData, DWORD dwFlags)
 {
        PCRYPTPROV prov;
        PCRYPTKEY key = (PCRYPTKEY)hKey;
@@ -2076,7 +2058,7 @@ BOOL WINAPI CryptSetProviderExW (LPCWSTR pszProvName, DWORD dwProvType, DWORD *p
                return FALSE;
        }
        CRYPT_Free(keyname);
-       
+
        if (dwFlags & CRYPT_DELETE_DEFAULT)
        {
                RegDeleteValueW(hTypeKey, nameW);
@@ -2098,7 +2080,7 @@ BOOL WINAPI CryptSetProviderExW (LPCWSTR pszProvName, DWORD dwProvType, DWORD *p
                        return FALSE;
                }
                CRYPT_Free(keyname);
-               
+
                if (RegSetValueExW(hTypeKey, nameW, 0, REG_SZ, (const BYTE *)pszProvName,
                        (strlenW(pszProvName) + 1)*sizeof(WCHAR)))
                {
@@ -2106,7 +2088,7 @@ BOOL WINAPI CryptSetProviderExW (LPCWSTR pszProvName, DWORD dwProvType, DWORD *p
                        RegCloseKey(hProvKey);
                        return FALSE;
                }
-               
+
                RegCloseKey(hProvKey);
        }
        RegCloseKey(hTypeKey);
@@ -2149,7 +2131,7 @@ BOOL WINAPI CryptSetProviderExA (LPCSTR pszProvName, DWORD dwProvType, DWORD *pd
  *  Success: TRUE
  *  Failure: FALSE
  */
-BOOL WINAPI CryptSetProvParam (HCRYPTPROV hProv, DWORD dwParam, CONST BYTE *pbData, DWORD dwFlags)
+BOOL WINAPI CryptSetProvParam (HCRYPTPROV hProv, DWORD dwParam, const BYTE *pbData, DWORD dwFlags)
 {
        PCRYPTPROV prov = (PCRYPTPROV)hProv;
 
@@ -2165,7 +2147,7 @@ BOOL WINAPI CryptSetProvParam (HCRYPTPROV hProv, DWORD dwParam, CONST BYTE *pbDa
                SetLastError(ERROR_INVALID_PARAMETER);
                return FALSE;
        }
-       if (dwFlags & PP_USE_HARDWARE_RNG)
+       if (dwParam == PP_USE_HARDWARE_RNG)
        {
                FIXME("PP_USE_HARDWARE_RNG: What do I do with this?\n");
                FIXME("\tLetting the CSP decide.\n");
@@ -2202,13 +2184,13 @@ BOOL WINAPI CryptSetProvParam (HCRYPTPROV hProv, DWORD dwParam, CONST BYTE *pbDa
  * RETURNS
  *  Success: TRUE
  *  Failure: FALSE
- * 
+ *
  * NOTES
  *  Because of security flaws sDescription should not be used and should thus be
  *  NULL. It is supported only for compatibility with Microsoft's Cryptographic
  *  Providers.
  */
-BOOL WINAPI CryptVerifySignatureW (HCRYPTHASH hHash, CONST BYTE *pbSignature, DWORD dwSigLen,
+BOOL WINAPI CryptVerifySignatureW (HCRYPTHASH hHash, const BYTE *pbSignature, DWORD dwSigLen,
                HCRYPTKEY hPubKey, LPCWSTR sDescription, DWORD dwFlags)
 {
        PCRYPTHASH hash = (PCRYPTHASH)hHash;
@@ -2225,7 +2207,7 @@ BOOL WINAPI CryptVerifySignatureW (HCRYPTHASH hHash, CONST BYTE *pbSignature, DW
                SetLastError(ERROR_INVALID_PARAMETER);
                return FALSE;
        }
-               
+
        prov = hash->pProvider;
        return prov->pFuncs->pCPVerifySignature(prov->hPrivate, hash->hPrivate, pbSignature, dwSigLen,
                key->hPrivate, sDescription, dwFlags);
@@ -2236,7 +2218,7 @@ BOOL WINAPI CryptVerifySignatureW (HCRYPTHASH hHash, CONST BYTE *pbSignature, DW
  *
  * See CryptVerifySignatureW.
  */
-BOOL WINAPI CryptVerifySignatureA (HCRYPTHASH hHash, CONST BYTE *pbSignature, DWORD dwSigLen,
+BOOL WINAPI CryptVerifySignatureA (HCRYPTHASH hHash, const BYTE *pbSignature, DWORD dwSigLen,
                HCRYPTKEY hPubKey, LPCSTR sDescription, DWORD dwFlags)
 {
        LPWSTR wsDescription;
@@ -2317,8 +2299,8 @@ BOOLEAN WINAPI SystemFunction036(PVOID pbBuffer, ULONG dwLen)
         FIXME("couldn't open /dev/urandom\n");
     SetLastError(NTE_FAIL);
     return FALSE;
-}    
-    
+}
+
 /*
    These functions have nearly identical prototypes to CryptProtectMemory and CryptUnprotectMemory,
    in crypt32.dll.
@@ -2333,10 +2315,10 @@ BOOLEAN WINAPI SystemFunction036(PVOID pbBuffer, ULONG dwLen)
  *  memory [I/O] Pointer to memory to encrypt.
  *  length [I] Length of region to encrypt in bytes.
  *  flags  [I] Control whether other processes are able to decrypt the memory.
- *    RTL_ENCRYPT_OPTION_SAME_PROCESS 
- *    RTL_ENCRYPT_OPTION_CROSS_PROCESS 
+ *    RTL_ENCRYPT_OPTION_SAME_PROCESS
+ *    RTL_ENCRYPT_OPTION_CROSS_PROCESS
  *    RTL_ENCRYPT_OPTION_SAME_LOGON
- *    
+ *
  * RETURNS
  *  Success: STATUS_SUCCESS
  *  Failure: NTSTATUS error code
@@ -2380,3 +2362,22 @@ NTSTATUS WINAPI SystemFunction041(PVOID memory, ULONG length, ULONG flags)
        return STATUS_SUCCESS;
 }
 #endif /* !__REACTOS __ */
+
+/******************************************************************************
+ * WriteEncryptedFileRaw   (ADVAPI32.@)
+ *
+ * Import encrypted files
+ *
+ * PARAMS
+ *  import   [I] pointer to the import callback function
+ *  callback     [I] pointer to the application defined context
+ *  context    [I] pointer to the system context
+ * RETURNS
+ *  Success: ERROR_SUCCESS
+ *  Failure: NTSTATUS error code
+ */
+DWORD WINAPI WriteEncryptedFileRaw(PFE_IMPORT_FUNC import, PVOID callback, PVOID context)
+{
+    FIXME("(%p, %p, %p): stub\n", import, callback, context);
+    return ERROR_CALL_NOT_IMPLEMENTED;
+}