ReactOS 0.4.16-dev-2354-g16de117
crypt.c File Reference
#include "config.h"
#include "wine/port.h"
#include <limits.h>
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <fcntl.h>
#include "ntstatus.h"
#include "crypt.h"
#include "winnls.h"
#include "winreg.h"
#include "rpc.h"
#include "wine/debug.h"
#include "wine/unicode.h"
#include "winternl.h"
Include dependency graph for crypt.c:

Go to the source code of this file.

Macros

#define WIN32_NO_STATUS
 
#define CRYPT_Alloc(size)   (LocalAlloc(LMEM_ZEROINIT, size))
 
#define CRYPT_Free(buffer)   (LocalFree(buffer))
 
#define CRYPT_GetProvFunc(name)    if ( !(provider->pFuncs->p##name = (void*)GetProcAddress(provider->hModule, #name)) ) goto error
 
#define CRYPT_GetProvFuncOpt(name)    provider->pFuncs->p##name = (void*)GetProcAddress(provider->hModule, #name)
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (crypt)
 
static PWSTR CRYPT_GetProvKeyName (PCWSTR pProvName)
 
static PWSTR CRYPT_GetTypeKeyName (DWORD dwType, BOOL user)
 
static BOOL CRYPT_UnicodeToANSI (LPCWSTR wstr, LPSTR *str, int strsize)
 
static BOOL CRYPT_ANSIToUnicode (LPCSTR str, LPWSTR *wstr, int wstrsize)
 
static BOOL CALLBACK CRYPT_VerifyImage (LPCSTR lpszImage, BYTE *pData)
 
static void CALLBACK CRYPT_ReturnhWnd (HWND *phWnd)
 
static PCRYPTPROV CRYPT_LoadProvider (PCWSTR pImage)
 
static void CRYPT_CreateMachineGuid (void)
 
void WINAPI CloseEncryptedFileRaw (PVOID context)
 
BOOL WINAPI CryptAcquireContextW (HCRYPTPROV *phProv, LPCWSTR pszContainer, LPCWSTR pszProvider, DWORD dwProvType, DWORD dwFlags)
 
BOOL WINAPI CryptAcquireContextA (HCRYPTPROV *phProv, LPCSTR pszContainer, LPCSTR pszProvider, DWORD dwProvType, DWORD dwFlags)
 
BOOL WINAPI CryptContextAddRef (HCRYPTPROV hProv, DWORD *pdwReserved, DWORD dwFlags)
 
BOOL WINAPI CryptReleaseContext (HCRYPTPROV hProv, DWORD dwFlags)
 
BOOL WINAPI CryptGenRandom (HCRYPTPROV hProv, DWORD dwLen, BYTE *pbBuffer)
 
BOOL WINAPI CryptCreateHash (HCRYPTPROV hProv, ALG_ID Algid, HCRYPTKEY hKey, DWORD dwFlags, HCRYPTHASH *phHash)
 
BOOL WINAPI CryptDecrypt (HCRYPTKEY hKey, HCRYPTHASH hHash, BOOL Final, DWORD dwFlags, BYTE *pbData, DWORD *pdwDataLen)
 
BOOL WINAPI CryptDeriveKey (HCRYPTPROV hProv, ALG_ID Algid, HCRYPTHASH hBaseData, DWORD dwFlags, HCRYPTKEY *phKey)
 
BOOL WINAPI CryptDestroyHash (HCRYPTHASH hHash)
 
BOOL WINAPI CryptDestroyKey (HCRYPTKEY hKey)
 
BOOL WINAPI CryptDuplicateHash (HCRYPTHASH hHash, DWORD *pdwReserved, DWORD dwFlags, HCRYPTHASH *phHash)
 
BOOL WINAPI CryptDuplicateKey (HCRYPTKEY hKey, DWORD *pdwReserved, DWORD dwFlags, HCRYPTKEY *phKey)
 
BOOL WINAPI CryptEncrypt (HCRYPTKEY hKey, HCRYPTHASH hHash, BOOL Final, DWORD dwFlags, BYTE *pbData, DWORD *pdwDataLen, DWORD dwBufLen)
 
BOOL WINAPI CryptEnumProvidersW (DWORD dwIndex, DWORD *pdwReserved, DWORD dwFlags, DWORD *pdwProvType, LPWSTR pszProvName, DWORD *pcbProvName)
 
BOOL WINAPI CryptEnumProvidersA (DWORD dwIndex, DWORD *pdwReserved, DWORD dwFlags, DWORD *pdwProvType, LPSTR pszProvName, DWORD *pcbProvName)
 
BOOL WINAPI CryptEnumProviderTypesW (DWORD dwIndex, DWORD *pdwReserved, DWORD dwFlags, DWORD *pdwProvType, LPWSTR pszTypeName, DWORD *pcbTypeName)
 
BOOL WINAPI CryptEnumProviderTypesA (DWORD dwIndex, DWORD *pdwReserved, DWORD dwFlags, DWORD *pdwProvType, LPSTR pszTypeName, DWORD *pcbTypeName)
 
BOOL WINAPI CryptExportKey (HCRYPTKEY hKey, HCRYPTKEY hExpKey, DWORD dwBlobType, DWORD dwFlags, BYTE *pbData, DWORD *pdwDataLen)
 
BOOL WINAPI CryptGenKey (HCRYPTPROV hProv, ALG_ID Algid, DWORD dwFlags, HCRYPTKEY *phKey)
 
BOOL WINAPI CryptGetDefaultProviderW (DWORD dwProvType, DWORD *pdwReserved, DWORD dwFlags, LPWSTR pszProvName, DWORD *pcbProvName)
 
BOOL WINAPI CryptGetDefaultProviderA (DWORD dwProvType, DWORD *pdwReserved, DWORD dwFlags, LPSTR pszProvName, DWORD *pcbProvName)
 
BOOL WINAPI CryptGetHashParam (HCRYPTHASH hHash, DWORD dwParam, BYTE *pbData, DWORD *pdwDataLen, DWORD dwFlags)
 
BOOL WINAPI CryptGetKeyParam (HCRYPTKEY hKey, DWORD dwParam, BYTE *pbData, DWORD *pdwDataLen, DWORD dwFlags)
 
BOOL WINAPI CryptGetProvParam (HCRYPTPROV hProv, DWORD dwParam, BYTE *pbData, DWORD *pdwDataLen, DWORD dwFlags)
 
BOOL WINAPI CryptGetUserKey (HCRYPTPROV hProv, DWORD dwKeySpec, HCRYPTKEY *phUserKey)
 
BOOL WINAPI CryptHashData (HCRYPTHASH hHash, const BYTE *pbData, DWORD dwDataLen, DWORD dwFlags)
 
BOOL WINAPI CryptHashSessionKey (HCRYPTHASH hHash, HCRYPTKEY hKey, DWORD dwFlags)
 
BOOL WINAPI CryptImportKey (HCRYPTPROV hProv, const BYTE *pbData, DWORD dwDataLen, HCRYPTKEY hPubKey, DWORD dwFlags, HCRYPTKEY *phKey)
 
BOOL WINAPI CryptSignHashW (HCRYPTHASH hHash, DWORD dwKeySpec, LPCWSTR sDescription, DWORD dwFlags, BYTE *pbSignature, DWORD *pdwSigLen)
 
BOOL WINAPI CryptSignHashA (HCRYPTHASH hHash, DWORD dwKeySpec, LPCSTR sDescription, DWORD dwFlags, BYTE *pbSignature, DWORD *pdwSigLen)
 
BOOL WINAPI CryptSetHashParam (HCRYPTHASH hHash, DWORD dwParam, const BYTE *pbData, DWORD dwFlags)
 
BOOL WINAPI CryptSetKeyParam (HCRYPTKEY hKey, DWORD dwParam, const BYTE *pbData, DWORD dwFlags)
 
BOOL WINAPI CryptSetProviderA (LPCSTR pszProvName, DWORD dwProvType)
 
BOOL WINAPI CryptSetProviderW (LPCWSTR pszProvName, DWORD dwProvType)
 
BOOL WINAPI CryptSetProviderExW (LPCWSTR pszProvName, DWORD dwProvType, DWORD *pdwReserved, DWORD dwFlags)
 
BOOL WINAPI CryptSetProviderExA (LPCSTR pszProvName, DWORD dwProvType, DWORD *pdwReserved, DWORD dwFlags)
 
BOOL WINAPI CryptSetProvParam (HCRYPTPROV hProv, DWORD dwParam, const BYTE *pbData, DWORD dwFlags)
 
BOOL WINAPI CryptVerifySignatureW (HCRYPTHASH hHash, const BYTE *pbSignature, DWORD dwSigLen, HCRYPTKEY hPubKey, LPCWSTR sDescription, DWORD dwFlags)
 
BOOL WINAPI CryptVerifySignatureA (HCRYPTHASH hHash, const BYTE *pbSignature, DWORD dwSigLen, HCRYPTKEY hPubKey, LPCSTR sDescription, DWORD dwFlags)
 
DWORD WINAPI OpenEncryptedFileRawA (LPCSTR filename, ULONG flags, PVOID *context)
 
DWORD WINAPI OpenEncryptedFileRawW (LPCWSTR filename, ULONG flags, PVOID *context)
 
DWORD WINAPI ReadEncryptedFileRaw (PFE_EXPORT_FUNC export, PVOID callback, PVOID context)
 
BOOL WINAPI SystemFunction030 (LPCVOID b1, LPCVOID b2)
 
BOOL WINAPI SystemFunction035 (LPCSTR lpszDllFilePath)
 
BOOLEAN WINAPI SystemFunction036 (PVOID pbBuffer, ULONG dwLen)
 
NTSTATUS WINAPI SystemFunction040 (PVOID memory, ULONG length, ULONG flags)
 
NTSTATUS WINAPI SystemFunction041 (PVOID memory, ULONG length, ULONG flags)
 
DWORD WINAPI WriteEncryptedFileRaw (PFE_IMPORT_FUNC import, PVOID callback, PVOID context)
 

Variables

static HWND crypt_hWindow
 

Macro Definition Documentation

◆ CRYPT_Alloc

#define CRYPT_Alloc (   size)    (LocalAlloc(LMEM_ZEROINIT, size))

Definition at line 61 of file crypt.c.

◆ CRYPT_Free

#define CRYPT_Free (   buffer)    (LocalFree(buffer))

Definition at line 62 of file crypt.c.

◆ CRYPT_GetProvFunc

#define CRYPT_GetProvFunc (   name)     if ( !(provider->pFuncs->p##name = (void*)GetProcAddress(provider->hModule, #name)) ) goto error

Definition at line 200 of file crypt.c.

◆ CRYPT_GetProvFuncOpt

#define CRYPT_GetProvFuncOpt (   name)     provider->pFuncs->p##name = (void*)GetProcAddress(provider->hModule, #name)

Definition at line 202 of file crypt.c.

◆ WIN32_NO_STATUS

#define WIN32_NO_STATUS

Definition at line 47 of file crypt.c.

Function Documentation

◆ CloseEncryptedFileRaw()

void WINAPI CloseEncryptedFileRaw ( PVOID  context)

Definition at line 338 of file crypt.c.

339{
340 FIXME("(%p): stub\n", context);
341}
#define FIXME(fmt,...)
Definition: precomp.h:53
Definition: http.c:7252

◆ CRYPT_ANSIToUnicode()

static BOOL CRYPT_ANSIToUnicode ( LPCSTR  str,
LPWSTR wstr,
int  wstrsize 
)
inlinestatic

Definition at line 158 of file crypt.c.

159{
160 unsigned int wcount;
161
162 if (!str)
163 {
164 *wstr = NULL;
165 return TRUE;
166 }
167 wcount = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0);
168 if (wstrsize == -1)
169 *wstr = CRYPT_Alloc(wcount * sizeof(WCHAR));
170 else
171 wcount = min( wcount, wstrsize/sizeof(WCHAR) );
172 if (*wstr)
173 {
174 MultiByteToWideChar(CP_ACP, 0, str, -1, *wstr, wcount);
175 return TRUE;
176 }
178 return FALSE;
179}
#define ERROR_NOT_ENOUGH_MEMORY
Definition: dderror.h:7
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define CRYPT_Alloc(size)
Definition: crypt.c:61
#define CP_ACP
Definition: compat.h:109
#define SetLastError(x)
Definition: compat.h:752
#define MultiByteToWideChar
Definition: compat.h:110
#define min(a, b)
Definition: monoChain.cc:55
const WCHAR * str
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by CryptAcquireContextA(), CryptSetProviderExA(), CryptSignHashA(), and CryptVerifySignatureA().

◆ CRYPT_CreateMachineGuid()

static void CRYPT_CreateMachineGuid ( void  )
static

Definition at line 277 of file crypt.c.

278{
279 static const WCHAR cryptographyW[] = {
280 'S','o','f','t','w','a','r','e','\\',
281 'M','i','c','r','o','s','o','f','t','\\',
282 'C','r','y','p','t','o','g','r','a','p','h','y',0 };
283 static const WCHAR machineGuidW[] = {
284 'M','a','c','h','i','n','e','G','u','i','d',0 };
285 LONG r;
286 HKEY key;
287
289 &key);
290 if (!r)
291 {
292 DWORD size;
293
294 r = RegQueryValueExW(key, machineGuidW, NULL, NULL, NULL, &size);
295 if (r == ERROR_FILE_NOT_FOUND)
296 {
297 UUID uuid;
298 WCHAR buf[37];
299 RPC_STATUS rs;
300 static const WCHAR uuidFmt[] = {
301 '%','0','8','x','-','%','0','4','x','-',
302 '%','0','4','x','-','%','0','2','x',
303 '%','0','2','x','-','%','0','2','x',
304 '%','0','2','x','%','0','2','x',
305 '%','0','2','x','%','0','2','x',
306 '%','0','2','x',0 };
307
308 rs = UuidCreate(&uuid);
309 if (rs == S_OK)
310 {
311 sprintfW(buf, uuidFmt,
313 uuid.Data4[0], uuid.Data4[1],
314 uuid.Data4[2], uuid.Data4[3],
315 uuid.Data4[4], uuid.Data4[5],
316 uuid.Data4[6], uuid.Data4[7] );
317 RegSetValueExW(key, machineGuidW, 0, REG_SZ,
318 (const BYTE *)buf,
319 (lstrlenW(buf)+1)*sizeof(WCHAR));
320 }
321 }
323 }
324}
#define RegCloseKey(hKey)
Definition: registry.h:49
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3333
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
Definition: reg.c:4882
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4103
#define lstrlenW
Definition: compat.h:750
unsigned long DWORD
Definition: ntddk_ex.h:95
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
GLsizeiptr size
Definition: glext.h:5919
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
Definition: msctf.idl:532
unsigned short Data3
Definition: widltypes.h:34
unsigned int Data1
Definition: widltypes.h:32
unsigned char Data4[8]
Definition: widltypes.h:35
unsigned short Data2
Definition: widltypes.h:33
#define S_OK
Definition: intsafe.h:52
#define REG_SZ
Definition: layer.c:22
#define ERROR_FILE_NOT_FOUND
Definition: disk.h:79
#define KEY_ALL_ACCESS
Definition: nt_native.h:1044
long LONG
Definition: pedump.c:60
RPC_STATUS WINAPI UuidCreate(UUID *Uuid)
Definition: rpcrt4_main.c:330
long RPC_STATUS
Definition: rpc.h:48
Definition: copy.c:22
#define sprintfW
Definition: unicode.h:64
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
unsigned char BYTE
Definition: xxhash.c:193

Referenced by CryptAcquireContextW().

◆ CRYPT_GetProvKeyName()

static PWSTR CRYPT_GetProvKeyName ( PCWSTR  pProvName)
inlinestatic

Definition at line 64 of file crypt.c.

65{
66 static const WCHAR KEYSTR[] = {
67 'S','o','f','t','w','a','r','e','\\',
68 'M','i','c','r','o','s','o','f','t','\\',
69 'C','r','y','p','t','o','g','r','a','p','h','y','\\',
70 'D','e','f','a','u','l','t','s','\\',
71 'P','r','o','v','i','d','e','r','\\',0
72 };
73 PWSTR keyname;
74
75 keyname = CRYPT_Alloc((strlenW(KEYSTR) + strlenW(pProvName) +1)*sizeof(WCHAR));
76 if (keyname)
77 {
78 strcpyW(keyname, KEYSTR);
79 strcpyW(keyname + strlenW(KEYSTR), pProvName);
80 } else
82 return keyname;
83}
uint16_t * PWSTR
Definition: typedefs.h:56
#define strlenW(s)
Definition: unicode.h:34
#define strcpyW(d, s)
Definition: unicode.h:35

Referenced by CryptAcquireContextW(), and CryptSetProviderExW().

◆ CRYPT_GetTypeKeyName()

static PWSTR CRYPT_GetTypeKeyName ( DWORD  dwType,
BOOL  user 
)
inlinestatic

Definition at line 85 of file crypt.c.

86{
87 static const WCHAR MACHINESTR[] = {
88 'S','o','f','t','w','a','r','e','\\',
89 'M','i','c','r','o','s','o','f','t','\\',
90 'C','r','y','p','t','o','g','r','a','p','h','y','\\',
91 'D','e','f','a','u','l','t','s','\\',
92 'P','r','o','v','i','d','e','r',' ','T','y','p','e','s','\\',
93 'T','y','p','e',' ','X','X','X',0
94 };
95 static const WCHAR USERSTR[] = {
96 'S','o','f','t','w','a','r','e','\\',
97 'M','i','c','r','o','s','o','f','t','\\',
98 'C','r','y','p','t','o','g','r','a','p','h','y','\\',
99 'P','r','o','v','i','d','e','r',' ','T','y','p','e',' ','X','X','X',0
100 };
101 PWSTR keyname;
102 PWSTR ptr;
103
104 keyname = CRYPT_Alloc( ((user ? strlenW(USERSTR) : strlenW(MACHINESTR)) +1)*sizeof(WCHAR));
105 if (keyname)
106 {
107 user ? strcpyW(keyname, USERSTR) : strcpyW(keyname, MACHINESTR);
108 ptr = keyname + strlenW(keyname);
109 *(--ptr) = (dwType % 10) + '0';
110 *(--ptr) = ((dwType / 10) % 10) + '0';
111 *(--ptr) = (dwType / 100) + '0';
112 } else
114 return keyname;
115}
void user(int argc, const char *argv[])
Definition: cmds.c:1350
static PVOID ptr
Definition: dispmode.c:27

Referenced by CryptAcquireContextW(), CryptGetDefaultProviderW(), and CryptSetProviderExW().

◆ CRYPT_LoadProvider()

static PCRYPTPROV CRYPT_LoadProvider ( PCWSTR  pImage)
static

Definition at line 204 of file crypt.c.

205{
206 PCRYPTPROV provider;
207 DWORD errorcode = ERROR_NOT_ENOUGH_MEMORY;
208
209 if ( !(provider = CRYPT_Alloc(sizeof(CRYPTPROV))) ) goto error;
210 if ( !(provider->pFuncs = CRYPT_Alloc(sizeof(PROVFUNCS))) ) goto error;
211 if ( !(provider->pVTable = CRYPT_Alloc(sizeof(VTableProvStruc))) ) goto error;
212 if ( !(provider->hModule = LoadLibraryW(pImage)) )
213 {
215 FIXME("Failed to load dll %s\n", debugstr_w(pImage));
216 goto error;
217 }
218 provider->dwMagic = MAGIC_CRYPTPROV;
219 provider->refcount = 1;
220
221 errorcode = NTE_PROVIDER_DLL_FAIL;
222 CRYPT_GetProvFunc(CPAcquireContext);
223 CRYPT_GetProvFunc(CPCreateHash);
224 CRYPT_GetProvFunc(CPDecrypt);
225 CRYPT_GetProvFunc(CPDeriveKey);
226 CRYPT_GetProvFunc(CPDestroyHash);
227 CRYPT_GetProvFunc(CPDestroyKey);
228 CRYPT_GetProvFuncOpt(CPDuplicateHash);
229 CRYPT_GetProvFuncOpt(CPDuplicateKey);
230 CRYPT_GetProvFunc(CPEncrypt);
231 CRYPT_GetProvFunc(CPExportKey);
232 CRYPT_GetProvFunc(CPGenKey);
233 CRYPT_GetProvFunc(CPGenRandom);
234 CRYPT_GetProvFunc(CPGetHashParam);
235 CRYPT_GetProvFunc(CPGetKeyParam);
236 CRYPT_GetProvFunc(CPGetProvParam);
237 CRYPT_GetProvFunc(CPGetUserKey);
238 CRYPT_GetProvFunc(CPHashData);
239 CRYPT_GetProvFunc(CPHashSessionKey);
240 CRYPT_GetProvFunc(CPImportKey);
241 CRYPT_GetProvFunc(CPReleaseContext);
242 CRYPT_GetProvFunc(CPSetHashParam);
243 CRYPT_GetProvFunc(CPSetKeyParam);
244 CRYPT_GetProvFunc(CPSetProvParam);
245 CRYPT_GetProvFunc(CPSignHash);
246 CRYPT_GetProvFunc(CPVerifySignature);
247
248 /* FIXME: Not sure what the pbContextInfo field is for.
249 * Does it need memory allocation?
250 */
251 provider->pVTable->Version = 3;
252 provider->pVTable->FuncVerifyImage = CRYPT_VerifyImage;
253 provider->pVTable->FuncReturnhWnd = CRYPT_ReturnhWnd;
254 provider->pVTable->dwProvType = 0;
255 provider->pVTable->pbContextInfo = NULL;
256 provider->pVTable->cbContextInfo = 0;
257 provider->pVTable->pszProvName = NULL;
258 return provider;
259
260error:
261 SetLastError(errorcode);
262 if (provider)
263 {
264 provider->dwMagic = 0;
265 if (provider->hModule)
266 FreeLibrary(provider->hModule);
267 CRYPT_Free(provider->pVTable);
268 CRYPT_Free(provider->pFuncs);
269 CRYPT_Free(provider);
270 }
271 return NULL;
272}
#define CRYPT_Free(buffer)
Definition: crypt.c:62
#define CRYPT_GetProvFunc(name)
Definition: crypt.c:200
#define CRYPT_GetProvFuncOpt(name)
Definition: crypt.c:202
static BOOL CALLBACK CRYPT_VerifyImage(LPCSTR lpszImage, BYTE *pData)
Definition: crypt.c:182
static void CALLBACK CRYPT_ReturnhWnd(HWND *phWnd)
Definition: crypt.c:195
#define MAGIC_CRYPTPROV
Definition: crypt.h:61
#define FreeLibrary(x)
Definition: compat.h:748
#define LoadLibraryW(x)
Definition: compat.h:747
#define debugstr_w
Definition: kernel32.h:32
#define error(str)
Definition: mkdosfs.c:1605
BYTE * pbContextInfo
Definition: wincrypt.h:818
LPSTR pszProvName
Definition: wincrypt.h:820
DWORD dwProvType
Definition: wincrypt.h:817
DWORD cbContextInfo
Definition: wincrypt.h:819
HMODULE hModule
Definition: crypt.h:69
PVTableProvStruc pVTable
Definition: crypt.h:72
PPROVFUNCS pFuncs
Definition: crypt.h:70
LONG refcount
Definition: crypt.h:68
DWORD dwMagic
Definition: crypt.h:67
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
#define NTE_PROV_DLL_NOT_FOUND
Definition: winerror.h:4277
#define NTE_PROVIDER_DLL_FAIL
Definition: winerror.h:4276

Referenced by CryptAcquireContextW().

◆ CRYPT_ReturnhWnd()

static void CALLBACK CRYPT_ReturnhWnd ( HWND phWnd)
static

Definition at line 195 of file crypt.c.

196{
197 if (phWnd) *phWnd = crypt_hWindow;
198}
static HWND crypt_hWindow
Definition: crypt.c:59

Referenced by CRYPT_LoadProvider().

◆ CRYPT_UnicodeToANSI()

static BOOL CRYPT_UnicodeToANSI ( LPCWSTR  wstr,
LPSTR str,
int  strsize 
)
inlinestatic

Definition at line 125 of file crypt.c.

126{
127 if (!wstr)
128 {
129 *str = NULL;
130 return TRUE;
131 }
132
133 if (!*str)
134 {
135 strsize = WideCharToMultiByte(CP_ACP, 0, wstr, -1, NULL, 0, NULL, NULL);
136 *str = CRYPT_Alloc(strsize * sizeof(CHAR));
137 }
138 else if (strsize < 0)
139 {
140 strsize = INT_MAX; /* windows will pretend that the buffer is infinitely long */
141 }
142
143 if (*str)
144 {
145 WideCharToMultiByte(CP_ACP, 0, wstr, -1, *str, strsize, NULL, NULL);
146 return TRUE;
147 }
148
150 return FALSE;
151}
#define WideCharToMultiByte
Definition: compat.h:111
#define INT_MAX
Definition: limits.h:26
char CHAR
Definition: xmlstorage.h:175

Referenced by CryptAcquireContextW(), CryptEnumProvidersA(), CryptEnumProviderTypesA(), and CryptGetDefaultProviderA().

◆ CRYPT_VerifyImage()

static BOOL CALLBACK CRYPT_VerifyImage ( LPCSTR  lpszImage,
BYTE pData 
)
static

Definition at line 182 of file crypt.c.

183{
184 if (!lpszImage || !pData)
185 {
187 return FALSE;
188 }
189
190 FIXME("(%s, %p): not verifying image\n", lpszImage, pData);
191
192 return TRUE;
193}
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
TW_UINT32 TW_UINT16 TW_UINT16 TW_MEMREF pData
Definition: twain.h:1830

Referenced by CRYPT_LoadProvider().

◆ CryptAcquireContextA()

BOOL WINAPI CryptAcquireContextA ( HCRYPTPROV phProv,
LPCSTR  pszContainer,
LPCSTR  pszProvider,
DWORD  dwProvType,
DWORD  dwFlags 
)

Definition at line 569 of file crypt.c.

571{
572 PWSTR pProvider = NULL, pContainer = NULL;
573 BOOL ret = FALSE;
574
575 TRACE("(%p, %s, %s, %d, %08x)\n", phProv, debugstr_a(pszContainer),
576 debugstr_a(pszProvider), dwProvType, dwFlags);
577
578 if ( !CRYPT_ANSIToUnicode(pszContainer, &pContainer, -1) )
579 {
581 return FALSE;
582 }
583 if ( !CRYPT_ANSIToUnicode(pszProvider, &pProvider, -1) )
584 {
585 CRYPT_Free(pContainer);
587 return FALSE;
588 }
589
590 ret = CryptAcquireContextW(phProv, pContainer, pProvider, dwProvType, dwFlags);
591
592 CRYPT_Free(pContainer);
594
595 return ret;
596}
static BOOL CRYPT_ANSIToUnicode(LPCSTR str, LPWSTR *wstr, int wstrsize)
Definition: crypt.c:158
BOOL WINAPI CryptAcquireContextW(HCRYPTPROV *phProv, LPCWSTR pszContainer, LPCWSTR pszProvider, DWORD dwProvType, DWORD dwFlags)
Definition: crypt.c:358
return ret
Definition: mutex.c:146
unsigned int BOOL
Definition: ntddk_ex.h:94
FxWmiProvider * pProvider
Definition: fxwmiapi.cpp:57
#define debugstr_a
Definition: kernel32.h:31
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141
#define TRACE(s)
Definition: solgame.cpp:4

Referenced by clean_up_aes_environment(), clean_up_base_environment(), clean_up_environment(), CRYPT_CreateKeyProv(), init_aes_environment(), init_base_environment(), init_environment(), test_acquire_context(), test_container_sd(), test_CryptReleaseContext(), test_decode_msg_get_param(), test_encrypt_message(), test_enveloped_msg_open(), test_hashes(), test_incorrect_api_usage(), test_key_initialization(), test_machine_guid(), test_null_provider(), test_rc2_keylen(), test_rsa_round_trip(), test_schannel_provider(), test_sign_message(), test_signed_msg_encoding(), test_signed_msg_get_param(), test_signed_msg_open(), test_signed_msg_update(), test_verify_sig(), test_VerifySignature(), testAcquireCertPrivateKey(), testCertSigs(), testCreateSelfSignCert(), and testPortPublicKeyInfo().

◆ CryptAcquireContextW()

BOOL WINAPI CryptAcquireContextW ( HCRYPTPROV phProv,
LPCWSTR  pszContainer,
LPCWSTR  pszProvider,
DWORD  dwProvType,
DWORD  dwFlags 
)

Definition at line 358 of file crypt.c.

360{
361 PCRYPTPROV pProv = NULL;
362 HKEY key;
363 PWSTR imagepath = NULL, keyname = NULL, provname = NULL, temp = NULL;
364 PSTR provnameA = NULL, pszContainerA = NULL;
365 DWORD keytype, type, len;
366 ULONG r;
367 static const WCHAR nameW[] = {'N','a','m','e',0};
368 static const WCHAR typeW[] = {'T','y','p','e',0};
369 static const WCHAR imagepathW[] = {'I','m','a','g','e',' ','P','a','t','h',0};
370
371 TRACE("(%p, %s, %s, %d, %08x)\n", phProv, debugstr_w(pszContainer),
372 debugstr_w(pszProvider), dwProvType, dwFlags);
373
374 if (dwProvType < 1 || dwProvType > MAXPROVTYPES)
375 {
377 return FALSE;
378 }
379
380 if (!phProv)
381 {
383 return FALSE;
384 }
385
386 /* Make sure the MachineGuid value exists */
388
389 if (!pszProvider || !*pszProvider)
390 {
391 /* No CSP name specified so try the user default CSP first
392 * then try the machine default CSP
393 */
394 if ( !(keyname = CRYPT_GetTypeKeyName(dwProvType, TRUE)) ) {
395 TRACE("No provider registered for crypto provider type %d.\n", dwProvType);
397 return FALSE;
398 }
399 if (RegOpenKeyW(HKEY_CURRENT_USER, keyname, &key))
400 {
401 CRYPT_Free(keyname);
402 if ( !(keyname = CRYPT_GetTypeKeyName(dwProvType, FALSE)) ) {
403 TRACE("No type registered for crypto provider type %d.\n", dwProvType);
406 goto error;
407 }
408 if (RegOpenKeyW(HKEY_LOCAL_MACHINE, keyname, &key)) {
409 TRACE("Did not find registry entry of crypto provider for %s.\n", debugstr_w(keyname));
410 CRYPT_Free(keyname);
413 goto error;
414 }
415 }
416 CRYPT_Free(keyname);
417 r = RegQueryValueExW(key, nameW, NULL, &keytype, NULL, &len);
418 if( r != ERROR_SUCCESS || !len || keytype != REG_SZ)
419 {
420 TRACE("error %d reading size of 'Name' from registry\n", r );
423 goto error;
424 }
425 if(!(provname = CRYPT_Alloc(len)))
426 {
429 goto error;
430 }
431 r = RegQueryValueExW(key, nameW, NULL, NULL, (LPBYTE)provname, &len);
432 if( r != ERROR_SUCCESS )
433 {
434 TRACE("error %d reading 'Name' from registry\n", r );
437 goto error;
438 }
440 } else {
441 if ( !(provname = CRYPT_Alloc((strlenW(pszProvider) +1)*sizeof(WCHAR))) )
442 {
444 goto error;
445 }
446 strcpyW(provname, pszProvider);
447 }
448
449 keyname = CRYPT_GetProvKeyName(provname);
450 r = RegOpenKeyW(HKEY_LOCAL_MACHINE, keyname, &key);
451 CRYPT_Free(keyname);
452 if (r != ERROR_SUCCESS)
453 {
455 goto error;
456 }
457 len = sizeof(DWORD);
459 if (r != ERROR_SUCCESS)
460 {
462 goto error;
463 }
464 if (type != dwProvType)
465 {
466 TRACE("Crypto provider has wrong type (%d vs expected %d).\n", type, dwProvType);
468 goto error;
469 }
470
471 r = RegQueryValueExW(key, imagepathW, NULL, &keytype, NULL, &len);
472 if ( r != ERROR_SUCCESS || keytype != REG_SZ)
473 {
474 TRACE("error %d reading size of 'Image Path' from registry\n", r );
477 goto error;
478 }
479 if (!(temp = CRYPT_Alloc(len)))
480 {
483 goto error;
484 }
485 r = RegQueryValueExW(key, imagepathW, NULL, NULL, (LPBYTE)temp, &len);
486 if( r != ERROR_SUCCESS )
487 {
488 TRACE("error %d reading 'Image Path' from registry\n", r );
491 goto error;
492 }
495 if ( !(imagepath = CRYPT_Alloc(len*sizeof(WCHAR))) )
496 {
498 goto error;
499 }
500 if (!ExpandEnvironmentStringsW(temp, imagepath, len))
501 {
502 /* ExpandEnvironmentStrings will call SetLastError */
503 goto error;
504 }
505 pProv = CRYPT_LoadProvider(imagepath);
506 if (!pProv) {
507 /* CRYPT_LoadProvider calls SetLastError */
508 goto error;
509 }
510 pProv->pVTable->dwProvType = dwProvType;
511 if(!CRYPT_UnicodeToANSI(provname, &provnameA, 0))
512 {
513 /* CRYPT_UnicodeToANSI calls SetLastError */
514 goto error;
515 }
516 pProv->pVTable->pszProvName = provnameA;
517 if(!CRYPT_UnicodeToANSI(pszContainer, &pszContainerA, 0))
518 {
519 /* CRYPT_UnicodeToANSI calls SetLastError */
520 goto error;
521 }
522 if (pProv->pFuncs->pCPAcquireContext(&pProv->hPrivate, pszContainerA, dwFlags, pProv->pVTable))
523 {
524 /* MSDN: When this flag is set, the value returned in phProv is undefined,
525 * and thus, the CryptReleaseContext function need not be called afterwards.
526 * Therefore, we must clean up everything now.
527 */
529 {
530 pProv->dwMagic = 0;
531 FreeLibrary(pProv->hModule);
532 CRYPT_Free(provnameA);
533 CRYPT_Free(pProv->pVTable);
534 CRYPT_Free(pProv->pFuncs);
535 CRYPT_Free(pProv);
536 } else {
537 *phProv = (HCRYPTPROV)pProv;
538 }
539 CRYPT_Free(pszContainerA);
540 CRYPT_Free(provname);
542 CRYPT_Free(imagepath);
543 return TRUE;
544 }
545 /* FALLTHROUGH TO ERROR IF FALSE - CSP internal error! */
546error:
547 if (pProv)
548 {
549 pProv->dwMagic = 0;
550 if (pProv->hModule)
551 FreeLibrary(pProv->hModule);
552 CRYPT_Free(pProv->pVTable);
553 CRYPT_Free(pProv->pFuncs);
554 CRYPT_Free(pProv);
555 }
556 CRYPT_Free(pszContainerA);
557 CRYPT_Free(provnameA);
558 CRYPT_Free(provname);
560 CRYPT_Free(imagepath);
561 return FALSE;
562}
static const WCHAR nameW[]
Definition: main.c:49
#define ERROR_SUCCESS
Definition: deptool.c:10
LONG WINAPI RegOpenKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
Definition: reg.c:3268
static PWSTR CRYPT_GetProvKeyName(PCWSTR pProvName)
Definition: crypt.c:64
static PCRYPTPROV CRYPT_LoadProvider(PCWSTR pImage)
Definition: crypt.c:204
static PWSTR CRYPT_GetTypeKeyName(DWORD dwType, BOOL user)
Definition: crypt.c:85
static BOOL CRYPT_UnicodeToANSI(LPCWSTR wstr, LPSTR *str, int strsize)
Definition: crypt.c:125
static void CRYPT_CreateMachineGuid(void)
Definition: crypt.c:277
#define MAXPROVTYPES
Definition: crypt.h:89
DWORD WINAPI ExpandEnvironmentStringsW(IN LPCWSTR lpSrc, IN LPWSTR lpDst, IN DWORD nSize)
Definition: environ.c:520
static const WCHAR typeW[]
Definition: name.c:51
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLenum GLsizei len
Definition: glext.h:6722
#define DWORD
Definition: nt_native.h:44
static calc_node_t temp
Definition: rpn_ieee.c:38
HCRYPTPROV hPrivate
Definition: crypt.h:71
char * PSTR
Definition: typedefs.h:51
unsigned char * LPBYTE
Definition: typedefs.h:53
uint32_t ULONG
Definition: typedefs.h:59
ULONG_PTR HCRYPTPROV
Definition: wincrypt.h:55
#define CRYPT_DELETEKEYSET
Definition: wincrypt.h:2275
#define NTE_BAD_PROV_TYPE
Definition: winerror.h:4267
#define NTE_KEYSET_NOT_DEF
Definition: winerror.h:4272
#define NTE_PROV_TYPE_ENTRY_BAD
Definition: winerror.h:4271
#define NTE_PROV_TYPE_NO_MATCH
Definition: winerror.h:4274
#define NTE_PROV_TYPE_NOT_DEF
Definition: winerror.h:4270
#define HKEY_CURRENT_USER
Definition: winreg.h:11

Referenced by CertCreateSelfSignCertificate(), CRYPT_AcquirePrivateKeyFromProvInfo(), CRYPT_GetDefaultProvider(), CryptAcquireContextA(), CryptCATAdminCalcHashFromFileHandle(), CryptCATAdminEnumCatalogFromHash(), CryptProtectData(), CryptUnprotectData(), DllRegisterServer(), export_acquire_private_key(), find_key_prov_info_in_provider(), hash_file(), I_CryptGetDefaultCryptProv(), key_prov_info_matches_cert(), save_pfx(), SOFTPUB_VerifyImageHash(), START_TEST(), testAcquireSecurityContext(), and testCreateSelfSignCert().

◆ CryptContextAddRef()

BOOL WINAPI CryptContextAddRef ( HCRYPTPROV  hProv,
DWORD pdwReserved,
DWORD  dwFlags 
)

Definition at line 613 of file crypt.c.

614{
615 PCRYPTPROV pProv = (PCRYPTPROV)hProv;
616
617 TRACE("(0x%lx, %p, %08x)\n", hProv, pdwReserved, dwFlags);
618
619 if (!pProv)
620 {
622 return FALSE;
623 }
624
625#ifdef __REACTOS__
627 {
628#endif
629 if (pProv->dwMagic != MAGIC_CRYPTPROV)
630 {
632 return FALSE;
633 }
634
636#ifdef __REACTOS__
637 }
639 {
641 _SEH2_YIELD(return FALSE);
642 }
643 _SEH2_END;
644#endif
645 return TRUE;
646}
#define InterlockedIncrement
Definition: armddk.h:53
struct tagCRYPTPROV * PCRYPTPROV
#define EXCEPTION_EXECUTE_HANDLER
Definition: excpt.h:90
static HCRYPTPROV hProv
Definition: rsaenh.c:32
#define _SEH2_EXCEPT(...)
Definition: pseh2_64.h:82
#define _SEH2_END
Definition: pseh2_64.h:171
#define _SEH2_TRY
Definition: pseh2_64.h:71
#define _SEH2_YIELD(__stmt)
Definition: pseh2_64.h:184
#define NTE_BAD_UID
Definition: winerror.h:4245

Referenced by I_CryptGetDefaultCryptProv(), test_CryptReleaseContext(), and test_incorrect_api_usage().

◆ CryptCreateHash()

BOOL WINAPI CryptCreateHash ( HCRYPTPROV  hProv,
ALG_ID  Algid,
HCRYPTKEY  hKey,
DWORD  dwFlags,
HCRYPTHASH phHash 
)

Definition at line 753 of file crypt.c.

755{
759
760 TRACE("(0x%lx, 0x%x, 0x%lx, %08x, %p)\n", hProv, Algid, hKey, dwFlags, phHash);
761
762#ifdef __REACTOS__
764 {
765#endif
766 if (!prov || !phHash || prov->dwMagic != MAGIC_CRYPTPROV ||
767 (key && key->dwMagic != MAGIC_CRYPTKEY))
768 {
770 return FALSE;
771 }
772#ifdef __REACTOS__
773 }
775 {
777 _SEH2_YIELD(return FALSE);
778 }
779 _SEH2_END;
780#endif
781 if (dwFlags)
782 {
784 return FALSE;
785 }
786 if ( !(hash = CRYPT_Alloc(sizeof(CRYPTHASH))) )
787 {
789 return FALSE;
790 }
791
792 hash->pProvider = prov;
793 hash->dwMagic = MAGIC_CRYPTHASH;
794 if (prov->pFuncs->pCPCreateHash(prov->hPrivate, Algid,
795 key ? key->hPrivate : 0, 0, &hash->hPrivate))
796 {
797 *phHash = (HCRYPTHASH)hash;
798 return TRUE;
799 }
800
801 /* CSP error! */
802 hash->dwMagic = 0;
804 *phHash = 0;
805 return FALSE;
806}
#define MAGIC_CRYPTHASH
Definition: crypt.h:63
#define MAGIC_CRYPTKEY
Definition: crypt.h:62
struct tagCRYPTKEY * PCRYPTKEY
FxAutoRegKey hKey
Definition: _hash_fun.h:40
ULONG_PTR HCRYPTHASH
Definition: wincrypt.h:59
#define NTE_BAD_FLAGS
Definition: winerror.h:4256

Referenced by CDecodeMsg_FinalizeHashedContent(), CHashEncodeMsg_Open(), create_silly_rename(), CRYPT_VerifySignature(), CryptCATAdminCalcHashFromFileHandle(), CryptHashCertificate(), CryptHashPublicKeyInfo(), CryptHashToBeSigned(), CryptProtectData(), CryptSignCertificate(), CryptUnprotectData(), CSignedMsgData_ConstructSignerHandles(), derive_key(), hash_dib(), hash_file(), load_encryption_key(), nfs41_client_owner(), rdssl_hash_clear(), rdssl_hash_info_create(), rdssl_hmac_md5(), SOFTPUB_VerifyImageHash(), test_hashes(), test_hmac(), test_import_hmac(), test_incorrect_api_usage(), test_key_derivation(), test_mac(), test_rc2(), test_rc4(), test_schannel_provider(), test_sha2(), test_verify_sig(), test_verify_signature(), test_VerifySignature(), and verifySig().

◆ CryptDecrypt()

BOOL WINAPI CryptDecrypt ( HCRYPTKEY  hKey,
HCRYPTHASH  hHash,
BOOL  Final,
DWORD  dwFlags,
BYTE pbData,
DWORD pdwDataLen 
)

Definition at line 826 of file crypt.c.

828{
829 PCRYPTPROV prov;
831 PCRYPTHASH hash = (PCRYPTHASH)hHash;
832
833 TRACE("(0x%lx, 0x%lx, %d, %08x, %p, %p)\n", hKey, hHash, Final, dwFlags, pbData, pdwDataLen);
834
835#ifdef __REACTOS__
837 {
838#endif
839 if (!key || !pbData || !pdwDataLen ||
840 !key->pProvider || key->dwMagic != MAGIC_CRYPTKEY ||
841 key->pProvider->dwMagic != MAGIC_CRYPTPROV)
842 {
844 return FALSE;
845 }
846
847 prov = key->pProvider;
848 return prov->pFuncs->pCPDecrypt(prov->hPrivate, key->hPrivate, hash ? hash->hPrivate : 0,
849 Final, dwFlags, pbData, pdwDataLen);
850#ifdef __REACTOS__
851 }
853 {
855 _SEH2_YIELD(return FALSE);
856 }
857 _SEH2_END;
858#endif
859}
struct tagCRYPTHASH * PCRYPTHASH

Referenced by CDecodeEnvelopedMsg_CrtlDecrypt(), CryptUnprotectData(), test_3des(), test_3des112(), test_aes(), test_block_cipher_modes(), test_des(), test_import_private(), test_incorrect_api_usage(), test_rc2(), test_rc4(), test_rsa_encrypt(), and test_rsa_round_trip().

◆ CryptDeriveKey()

BOOL WINAPI CryptDeriveKey ( HCRYPTPROV  hProv,
ALG_ID  Algid,
HCRYPTHASH  hBaseData,
DWORD  dwFlags,
HCRYPTKEY phKey 
)

Definition at line 877 of file crypt.c.

879{
881 PCRYPTHASH hash = (PCRYPTHASH)hBaseData;
883
884 TRACE("(0x%lx, 0x%08x, 0x%lx, 0x%08x, %p)\n", hProv, Algid, hBaseData, dwFlags, phKey);
885
886 if (!prov || !hash)
887 {
889 return FALSE;
890 }
891 if (!phKey || prov->dwMagic != MAGIC_CRYPTPROV || hash->dwMagic != MAGIC_CRYPTHASH)
892 {
894 return FALSE;
895 }
896 if ( !(key = CRYPT_Alloc(sizeof(CRYPTKEY))) )
897 {
899 return FALSE;
900 }
901
902 key->pProvider = prov;
903 key->dwMagic = MAGIC_CRYPTKEY;
904 if (prov->pFuncs->pCPDeriveKey(prov->hPrivate, Algid, hash->hPrivate, dwFlags, &key->hPrivate))
905 {
906 *phKey = (HCRYPTKEY)key;
907 return TRUE;
908 }
909
910 /* CSP error! */
911 key->dwMagic = 0;
913 *phKey = 0;
914 return FALSE;
915}
#define ERROR_INVALID_HANDLE
Definition: compat.h:98
ULONG_PTR HCRYPTKEY
Definition: wincrypt.h:58

Referenced by derive_key(), load_encryption_key(), test_incorrect_api_usage(), test_key_derivation(), test_rc2(), test_rc4(), and test_schannel_provider().

◆ CryptDestroyHash()

◆ CryptDestroyKey()

BOOL WINAPI CryptDestroyKey ( HCRYPTKEY  hKey)

Definition at line 969 of file crypt.c.

970{
972 PCRYPTPROV prov;
973 BOOL ret;
974
975 TRACE("(0x%lx)\n", hKey);
976
977 if (!key)
978 {
980 return FALSE;
981 }
982
983 if (!key->pProvider || key->dwMagic != MAGIC_CRYPTKEY ||
984 key->pProvider->dwMagic != MAGIC_CRYPTPROV)
985 {
987 return FALSE;
988 }
989
990 prov = key->pProvider;
991 ret = prov->pFuncs->pCPDestroyKey(prov->hPrivate, key->hPrivate);
992 key->dwMagic = 0;
994 return ret;
995}

Referenced by CDecodeEnvelopedMsg_CrtlDecrypt(), CDecodeSignedMsg_VerifySignatureWithKey(), CEnvelopedEncodeMsg_Close(), CertCreateSelfSignCertificate(), CertGetPublicKeyLength(), CRYPT_CreateKeyProv(), CRYPT_ExportKeyTrans(), CRYPT_ExportPublicKeyInfoEx(), CRYPT_ImportKeyTrans(), CRYPT_VerifySignature(), CryptProtectData(), CryptUnprotectData(), export_is_key_exportable(), init_aes_environment(), init_base_environment(), rdssl_cert_to_rkey(), rdssl_rc4_info_delete(), rdssl_rc4_set_key(), test_3des(), test_3des112(), test_aes(), test_block_cipher_modes(), test_decode_msg_get_param(), test_des(), test_hashes(), test_hmac(), test_import_export(), test_import_hmac(), test_import_private(), test_incorrect_api_usage(), test_key_derivation(), test_key_initialization(), test_key_permissions(), test_mac(), test_null_provider(), test_rc2(), test_rc2_keylen(), test_rc4(), test_rsa_encrypt(), test_rsa_round_trip(), test_schannel_provider(), test_sign_message(), test_signed_msg_encoding(), test_signed_msg_update(), test_verify_sig(), test_verify_signature(), test_VerifySignature(), testAcquireCertPrivateKey(), testAcquireSecurityContext(), testCreateSelfSignCert(), testExportPublicKey(), testImportPublicKey(), and testSignCert().

◆ CryptDuplicateHash()

BOOL WINAPI CryptDuplicateHash ( HCRYPTHASH  hHash,
DWORD pdwReserved,
DWORD  dwFlags,
HCRYPTHASH phHash 
)

Definition at line 1012 of file crypt.c.

1014{
1015 PCRYPTPROV prov;
1016 PCRYPTHASH orghash, newhash;
1017
1018 TRACE("(0x%lx, %p, %08x, %p)\n", hHash, pdwReserved, dwFlags, phHash);
1019
1020 orghash = (PCRYPTHASH)hHash;
1021 if (!orghash || pdwReserved || !phHash || !orghash->pProvider ||
1022 orghash->dwMagic != MAGIC_CRYPTHASH || orghash->pProvider->dwMagic != MAGIC_CRYPTPROV)
1023 {
1025 return FALSE;
1026 }
1027
1028 prov = orghash->pProvider;
1029 if (!prov->pFuncs->pCPDuplicateHash)
1030 {
1032 return FALSE;
1033 }
1034
1035 if ( !(newhash = CRYPT_Alloc(sizeof(CRYPTHASH))) )
1036 {
1038 return FALSE;
1039 }
1040
1041 newhash->pProvider = prov;
1042 newhash->dwMagic = MAGIC_CRYPTHASH;
1043 if (prov->pFuncs->pCPDuplicateHash(prov->hPrivate, orghash->hPrivate, pdwReserved, dwFlags, &newhash->hPrivate))
1044 {
1045 *phHash = (HCRYPTHASH)newhash;
1046 return TRUE;
1047 }
1048 newhash->dwMagic = 0;
1049 CRYPT_Free(newhash);
1050 return FALSE;
1051}
#define ERROR_CALL_NOT_IMPLEMENTED
Definition: compat.h:102
PCRYPTPROV pProvider
Definition: crypt.h:85
HCRYPTHASH hPrivate
Definition: crypt.h:86
DWORD dwMagic
Definition: crypt.h:84

◆ CryptDuplicateKey()

BOOL WINAPI CryptDuplicateKey ( HCRYPTKEY  hKey,
DWORD pdwReserved,
DWORD  dwFlags,
HCRYPTKEY phKey 
)

Definition at line 1068 of file crypt.c.

1069{
1070 PCRYPTPROV prov;
1071 PCRYPTKEY orgkey, newkey;
1072
1073 TRACE("(0x%lx, %p, %08x, %p)\n", hKey, pdwReserved, dwFlags, phKey);
1074
1075 orgkey = (PCRYPTKEY)hKey;
1076 if (!orgkey || pdwReserved || !phKey || !orgkey->pProvider ||
1077 orgkey->dwMagic != MAGIC_CRYPTKEY ||
1078 orgkey->pProvider->dwMagic != MAGIC_CRYPTPROV)
1079 {
1081 return FALSE;
1082 }
1083
1084 prov = orgkey->pProvider;
1085 if (!prov->pFuncs->pCPDuplicateKey)
1086 {
1088 return FALSE;
1089 }
1090
1091 if ( !(newkey = CRYPT_Alloc(sizeof(CRYPTKEY))) )
1092 {
1094 return FALSE;
1095 }
1096
1097 newkey->pProvider = prov;
1098 newkey->dwMagic = MAGIC_CRYPTKEY;
1099 if (prov->pFuncs->pCPDuplicateKey(prov->hPrivate, orgkey->hPrivate, pdwReserved, dwFlags, &newkey->hPrivate))
1100 {
1101 *phKey = (HCRYPTKEY)newkey;
1102 return TRUE;
1103 }
1104 newkey->dwMagic = 0;
1105 CRYPT_Free(newkey);
1106 return FALSE;
1107}
HCRYPTKEY hPrivate
Definition: crypt.h:79
DWORD dwMagic
Definition: crypt.h:77
PCRYPTPROV pProvider
Definition: crypt.h:78

Referenced by test_incorrect_api_usage().

◆ CryptEncrypt()

BOOL WINAPI CryptEncrypt ( HCRYPTKEY  hKey,
HCRYPTHASH  hHash,
BOOL  Final,
DWORD  dwFlags,
BYTE pbData,
DWORD pdwDataLen,
DWORD  dwBufLen 
)

Definition at line 1132 of file crypt.c.

1134{
1135 PCRYPTPROV prov;
1137 PCRYPTHASH hash = (PCRYPTHASH)hHash;
1138
1139 TRACE("(0x%lx, 0x%lx, %d, %08x, %p, %p, %d)\n", hKey, hHash, Final, dwFlags, pbData, pdwDataLen, dwBufLen);
1140
1141#ifdef __REACTOS__
1142 _SEH2_TRY
1143 {
1144#endif
1145 if (!key || !pdwDataLen || !key->pProvider ||
1146 key->dwMagic != MAGIC_CRYPTKEY || key->pProvider->dwMagic != MAGIC_CRYPTPROV)
1147 {
1149 return FALSE;
1150 }
1151
1152 prov = key->pProvider;
1153 return prov->pFuncs->pCPEncrypt(prov->hPrivate, key->hPrivate, hash ? hash->hPrivate : 0,
1154 Final, dwFlags, pbData, pdwDataLen, dwBufLen);
1155#ifdef __REACTOS__
1156 }
1158 {
1160 _SEH2_YIELD(return FALSE);
1161 }
1162 _SEH2_END;
1163#endif
1164}

Referenced by CEnvelopedEncodeMsg_Update(), CryptProtectData(), rdssl_rc4_crypt(), test_3des(), test_3des112(), test_aes(), test_block_cipher_modes(), test_des(), test_incorrect_api_usage(), test_key_derivation(), test_mac(), test_rc2(), test_rc4(), test_rsa_encrypt(), test_rsa_round_trip(), and test_schannel_provider().

◆ CryptEnumProvidersA()

BOOL WINAPI CryptEnumProvidersA ( DWORD  dwIndex,
DWORD pdwReserved,
DWORD  dwFlags,
DWORD pdwProvType,
LPSTR  pszProvName,
DWORD pcbProvName 
)

Definition at line 1280 of file crypt.c.

1282{
1283 PWSTR str = NULL;
1284 DWORD bufsize;
1285 BOOL ret;
1286
1287 TRACE("(%d, %p, %08x, %p, %p, %p)\n", dwIndex, pdwReserved, dwFlags,
1288 pdwProvType, pszProvName, pcbProvName);
1289
1290 if(!CryptEnumProvidersW(dwIndex, pdwReserved, dwFlags, pdwProvType, NULL, &bufsize))
1291 return FALSE;
1292 if ( pszProvName && !(str = CRYPT_Alloc(bufsize)) )
1293 {
1295 return FALSE;
1296 }
1297 ret = CryptEnumProvidersW(dwIndex, pdwReserved, dwFlags, pdwProvType, str, &bufsize);
1298 if (str)
1299 CRYPT_UnicodeToANSI(str, &pszProvName, *pcbProvName);
1300 *pcbProvName = bufsize / sizeof(WCHAR); /* FIXME: not correct */
1301 if (str)
1302 {
1303 CRYPT_Free(str);
1305 {
1307 return FALSE;
1308 }
1309 }
1310 return ret;
1311}
#define ERROR_MORE_DATA
Definition: dderror.h:13
#define ERROR_INSUFFICIENT_BUFFER
Definition: dderror.h:10
BOOL WINAPI CryptEnumProvidersW(DWORD dwIndex, DWORD *pdwReserved, DWORD dwFlags, DWORD *pdwProvType, LPWSTR pszProvName, DWORD *pcbProvName)
Definition: crypt.c:1188
GLenum GLuint GLsizei bufsize
Definition: glext.h:7473

◆ CryptEnumProvidersW()

BOOL WINAPI CryptEnumProvidersW ( DWORD  dwIndex,
DWORD pdwReserved,
DWORD  dwFlags,
DWORD pdwProvType,
LPWSTR  pszProvName,
DWORD pcbProvName 
)

Definition at line 1188 of file crypt.c.

1190{
1191 HKEY hKey;
1192 static const WCHAR providerW[] = {
1193 'S','o','f','t','w','a','r','e','\\',
1194 'M','i','c','r','o','s','o','f','t','\\',
1195 'C','r','y','p','t','o','g','r','a','p','h','y','\\',
1196 'D','e','f','a','u','l','t','s','\\',
1197 'P','r','o','v','i','d','e','r',0
1198 };
1199 static const WCHAR typeW[] = {'T','y','p','e',0};
1200 BOOL ret;
1201
1202 TRACE("(%d, %p, %d, %p, %p, %p)\n", dwIndex, pdwReserved, dwFlags,
1203 pdwProvType, pszProvName, pcbProvName);
1204
1205 if (pdwReserved || !pcbProvName)
1206 {
1208 return FALSE;
1209 }
1210 if (dwFlags)
1211 {
1213 return FALSE;
1214 }
1215
1216 if (RegOpenKeyW(HKEY_LOCAL_MACHINE, providerW, &hKey))
1217 {
1219 return FALSE;
1220 }
1221
1222 ret = TRUE;
1223 if (!pszProvName)
1224 {
1225 DWORD numkeys;
1226 WCHAR *provNameW;
1227
1228 RegQueryInfoKeyW(hKey, NULL, NULL, NULL, &numkeys, pcbProvName,
1229 NULL, NULL, NULL, NULL, NULL, NULL);
1230
1231 if (!(provNameW = CRYPT_Alloc(*pcbProvName * sizeof(WCHAR))))
1232 {
1235 return FALSE;
1236 }
1237
1238 RegEnumKeyExW(hKey, dwIndex, provNameW, pcbProvName, NULL, NULL, NULL, NULL);
1239 CRYPT_Free(provNameW);
1240 (*pcbProvName)++;
1241 *pcbProvName *= sizeof(WCHAR);
1242
1243 if (dwIndex >= numkeys)
1244 {
1246 ret = FALSE;
1247 }
1248 } else {
1249 DWORD size = sizeof(DWORD);
1250 DWORD result;
1251 HKEY subkey;
1252
1253 result = RegEnumKeyW(hKey, dwIndex, pszProvName, *pcbProvName / sizeof(WCHAR));
1254 if (result)
1255 {
1258 return FALSE;
1259 }
1260 if (RegOpenKeyW(hKey, pszProvName, &subkey))
1261 {
1263 return FALSE;
1264 }
1265
1266 if (RegQueryValueExW(subkey, typeW, NULL, NULL, (BYTE*)pdwProvType, &size))
1267 ret = FALSE;
1268
1269 RegCloseKey(subkey);
1270 }
1272 return ret;
1273}
LONG WINAPI RegEnumKeyExW(_In_ HKEY hKey, _In_ DWORD dwIndex, _Out_ LPWSTR lpName, _Inout_ LPDWORD lpcbName, _Reserved_ LPDWORD lpReserved, _Out_opt_ LPWSTR lpClass, _Inout_opt_ LPDWORD lpcbClass, _Out_opt_ PFILETIME lpftLastWriteTime)
Definition: reg.c:2504
LONG WINAPI RegQueryInfoKeyW(HKEY hKey, LPWSTR lpClass, LPDWORD lpcClass, LPDWORD lpReserved, LPDWORD lpcSubKeys, LPDWORD lpcMaxSubKeyLen, LPDWORD lpcMaxClassLen, LPDWORD lpcValues, LPDWORD lpcMaxValueNameLen, LPDWORD lpcMaxValueLen, LPDWORD lpcbSecurityDescriptor, PFILETIME lpftLastWriteTime)
Definition: reg.c:3662
LONG WINAPI RegEnumKeyW(HKEY hKey, DWORD dwIndex, LPWSTR lpName, DWORD cbName)
Definition: reg.c:2393
#define ERROR_NO_MORE_ITEMS
Definition: compat.h:105
GLuint64EXT * result
Definition: glext.h:11304
#define NTE_FAIL
Definition: winerror.h:4279

Referenced by CryptEnumProvidersA(), find_matching_provider(), and I_CryptGetDefaultCryptProv().

◆ CryptEnumProviderTypesA()

BOOL WINAPI CryptEnumProviderTypesA ( DWORD  dwIndex,
DWORD pdwReserved,
DWORD  dwFlags,
DWORD pdwProvType,
LPSTR  pszTypeName,
DWORD pcbTypeName 
)

Definition at line 1414 of file crypt.c.

1416{
1417 PWSTR str = NULL;
1418 DWORD bufsize;
1419 BOOL ret;
1420
1421 TRACE("(%d, %p, %08x, %p, %p, %p)\n", dwIndex, pdwReserved, dwFlags,
1422 pdwProvType, pszTypeName, pcbTypeName);
1423
1424 if(!CryptEnumProviderTypesW(dwIndex, pdwReserved, dwFlags, pdwProvType, NULL, &bufsize))
1425 return FALSE;
1426 if ( pszTypeName && !(str = CRYPT_Alloc(bufsize)) )
1427 {
1429 return FALSE;
1430 }
1431 ret = CryptEnumProviderTypesW(dwIndex, pdwReserved, dwFlags, pdwProvType, str, &bufsize);
1432 if (str)
1433 CRYPT_UnicodeToANSI(str, &pszTypeName, *pcbTypeName);
1434 *pcbTypeName = bufsize / sizeof(WCHAR);
1435 if (str)
1436 {
1437 CRYPT_Free(str);
1439 {
1441 return FALSE;
1442 }
1443 }
1444 return ret;
1445}
BOOL WINAPI CryptEnumProviderTypesW(DWORD dwIndex, DWORD *pdwReserved, DWORD dwFlags, DWORD *pdwProvType, LPWSTR pszTypeName, DWORD *pcbTypeName)
Definition: crypt.c:1335

◆ CryptEnumProviderTypesW()

BOOL WINAPI CryptEnumProviderTypesW ( DWORD  dwIndex,
DWORD pdwReserved,
DWORD  dwFlags,
DWORD pdwProvType,
LPWSTR  pszTypeName,
DWORD pcbTypeName 
)

Definition at line 1335 of file crypt.c.

1337{
1338 HKEY hKey, hSubkey;
1339 DWORD keylen, numkeys, dwType;
1340 PWSTR keyname, ch;
1341 DWORD result;
1342 static const WCHAR KEYSTR[] = {
1343 'S','o','f','t','w','a','r','e','\\',
1344 'M','i','c','r','o','s','o','f','t','\\',
1345 'C','r','y','p','t','o','g','r','a','p','h','y','\\',
1346 'D','e','f','a','u','l','t','s','\\',
1347 'P','r','o','v','i','d','e','r',' ','T','y','p','e','s',0
1348 };
1349 static const WCHAR typenameW[] = {'T','y','p','e','N','a','m','e',0};
1350
1351 TRACE("(%d, %p, %08x, %p, %p, %p)\n", dwIndex, pdwReserved,
1352 dwFlags, pdwProvType, pszTypeName, pcbTypeName);
1353
1354 if (pdwReserved || !pdwProvType || !pcbTypeName)
1355 {
1357 return FALSE;
1358 }
1359 if (dwFlags)
1360 {
1362 return FALSE;
1363 }
1364
1365 if (RegOpenKeyW(HKEY_LOCAL_MACHINE, KEYSTR, &hKey))
1366 return FALSE;
1367
1368 RegQueryInfoKeyW(hKey, NULL, NULL, NULL, &numkeys, &keylen, NULL, NULL, NULL, NULL, NULL, NULL);
1369 if (dwIndex >= numkeys)
1370 {
1373 return FALSE;
1374 }
1375 keylen++;
1376 if ( !(keyname = CRYPT_Alloc(keylen*sizeof(WCHAR))) )
1377 {
1380 return FALSE;
1381 }
1382 if ( RegEnumKeyW(hKey, dwIndex, keyname, keylen) ) {
1383 CRYPT_Free(keyname);
1385 return FALSE;
1386 }
1387 RegOpenKeyW(hKey, keyname, &hSubkey);
1389
1390 ch = keyname + strlenW(keyname);
1391 /* Convert "Type 000" to 0, etc/ */
1392 *pdwProvType = *(--ch) - '0';
1393 *pdwProvType += (*(--ch) - '0') * 10;
1394 *pdwProvType += (*(--ch) - '0') * 100;
1395 CRYPT_Free(keyname);
1396
1397 result = RegQueryValueExW(hSubkey, typenameW, NULL, &dwType, (LPBYTE)pszTypeName, pcbTypeName);
1398 if (result)
1399 {
1401 RegCloseKey(hSubkey);
1402 return FALSE;
1403 }
1404
1405 RegCloseKey(hSubkey);
1406 return TRUE;
1407}
unsigned char ch[4][2]
Definition: console.c:118

Referenced by CryptEnumProviderTypesA().

◆ CryptExportKey()

BOOL WINAPI CryptExportKey ( HCRYPTKEY  hKey,
HCRYPTKEY  hExpKey,
DWORD  dwBlobType,
DWORD  dwFlags,
BYTE pbData,
DWORD pdwDataLen 
)

Definition at line 1468 of file crypt.c.

1470{
1471 PCRYPTPROV prov;
1472 PCRYPTKEY key = (PCRYPTKEY)hKey, expkey = (PCRYPTKEY)hExpKey;
1473
1474 TRACE("(0x%lx, 0x%lx, %d, %08x, %p, %p)\n", hKey, hExpKey, dwBlobType, dwFlags, pbData, pdwDataLen);
1475
1476#ifdef __REACTOS__
1477 _SEH2_TRY
1478 {
1479#endif
1480 if (!key || !pdwDataLen || !key->pProvider ||
1481 key->dwMagic != MAGIC_CRYPTKEY || key->pProvider->dwMagic != MAGIC_CRYPTPROV)
1482 {
1484 return FALSE;
1485 }
1486
1487 prov = key->pProvider;
1488 return prov->pFuncs->pCPExportKey(prov->hPrivate, key->hPrivate, expkey ? expkey->hPrivate : 0,
1489 dwBlobType, dwFlags, pbData, pdwDataLen);
1490#ifdef __REACTOS__
1491 }
1493 {
1495 _SEH2_YIELD(return FALSE);
1496 }
1497 _SEH2_END;
1498#endif
1499}

Referenced by CRYPT_ExportKeyTrans(), CRYPT_ExportPublicKeyInfoEx(), rdssl_cert_to_rkey(), test_import_export(), test_import_private(), test_incorrect_api_usage(), test_key_permissions(), test_rsa_encrypt(), test_rsa_round_trip(), and testAcquireCertPrivateKey().

◆ CryptGenKey()

BOOL WINAPI CryptGenKey ( HCRYPTPROV  hProv,
ALG_ID  Algid,
DWORD  dwFlags,
HCRYPTKEY phKey 
)

Definition at line 1516 of file crypt.c.

1517{
1518 PCRYPTPROV prov = (PCRYPTPROV)hProv;
1519 PCRYPTKEY key;
1520
1521 TRACE("(0x%lx, %d, %08x, %p)\n", hProv, Algid, dwFlags, phKey);
1522
1523 if (!phKey || !prov || prov->dwMagic != MAGIC_CRYPTPROV)
1524 {
1526 return FALSE;
1527 }
1528 if ( !(key = CRYPT_Alloc(sizeof(CRYPTKEY))) )
1529 {
1531 return FALSE;
1532 }
1533
1534 key->pProvider = prov;
1535 key->dwMagic = MAGIC_CRYPTKEY;
1536 if (prov->pFuncs->pCPGenKey(prov->hPrivate, Algid, dwFlags, &key->hPrivate))
1537 {
1538 *phKey = (HCRYPTKEY)key;
1539 return TRUE;
1540 }
1541
1542 /* CSP error! */
1543 key->dwMagic = 0;
1544 CRYPT_Free(key);
1545 return FALSE;
1546}

Referenced by CertCreateSelfSignCertificate(), CRYPT_CreateKeyProv(), CRYPT_GenKey(), init_aes_environment(), init_base_environment(), test_incorrect_api_usage(), test_null_provider(), test_rsa_round_trip(), testCreateSelfSignCert(), testExportPublicKey(), and testSignCert().

◆ CryptGenRandom()

BOOL WINAPI CryptGenRandom ( HCRYPTPROV  hProv,
DWORD  dwLen,
BYTE pbBuffer 
)

Definition at line 713 of file crypt.c.

714{
716
717 TRACE("(0x%lx, %d, %p)\n", hProv, dwLen, pbBuffer);
718
719 if (!hProv)
720 {
722 return FALSE;
723 }
724
725 if (prov->dwMagic != MAGIC_CRYPTPROV)
726 {
728 return FALSE;
729 }
730
731 return prov->pFuncs->pCPGenRandom(prov->hPrivate, dwLen, pbBuffer);
732}

Referenced by CertCreateSelfSignCertificate(), fill_protect_data(), and test_gen_random().

◆ CryptGetDefaultProviderA()

BOOL WINAPI CryptGetDefaultProviderA ( DWORD  dwProvType,
DWORD pdwReserved,
DWORD  dwFlags,
LPSTR  pszProvName,
DWORD pcbProvName 
)

Definition at line 1625 of file crypt.c.

1627{
1628 PWSTR str = NULL;
1629 DWORD bufsize;
1630 BOOL ret;
1631
1632 TRACE("(%d, %p, %08x, %p, %p)\n", dwProvType, pdwReserved, dwFlags, pszProvName, pcbProvName);
1633
1634 CryptGetDefaultProviderW(dwProvType, pdwReserved, dwFlags, NULL, &bufsize);
1635 if ( pszProvName && !(str = CRYPT_Alloc(bufsize)) )
1636 {
1638 return FALSE;
1639 }
1640 ret = CryptGetDefaultProviderW(dwProvType, pdwReserved, dwFlags, str, &bufsize);
1641 if (str)
1642 CRYPT_UnicodeToANSI(str, &pszProvName, *pcbProvName);
1643 *pcbProvName = bufsize / sizeof(WCHAR);
1644 if (str)
1645 {
1646 CRYPT_Free(str);
1648 {
1650 return FALSE;
1651 }
1652 }
1653 return ret;
1654}
BOOL WINAPI CryptGetDefaultProviderW(DWORD dwProvType, DWORD *pdwReserved, DWORD dwFlags, LPWSTR pszProvName, DWORD *pcbProvName)
Definition: crypt.c:1568

◆ CryptGetDefaultProviderW()

BOOL WINAPI CryptGetDefaultProviderW ( DWORD  dwProvType,
DWORD pdwReserved,
DWORD  dwFlags,
LPWSTR  pszProvName,
DWORD pcbProvName 
)

Definition at line 1568 of file crypt.c.

1570{
1571 HKEY hKey;
1572 PWSTR keyname;
1573 DWORD result;
1574 static const WCHAR nameW[] = {'N','a','m','e',0};
1575
1576 if (pdwReserved || !pcbProvName)
1577 {
1579 return FALSE;
1580 }
1582 {
1584 return FALSE;
1585 }
1586 if (dwProvType > 999)
1587 {
1589 return FALSE;
1590 }
1591 if ( !(keyname = CRYPT_GetTypeKeyName(dwProvType, dwFlags & CRYPT_USER_DEFAULT)) )
1592 {
1594 return FALSE;
1595 }
1597 {
1598 CRYPT_Free(keyname);
1600 return FALSE;
1601 }
1602 CRYPT_Free(keyname);
1603
1604 result = RegQueryValueExW(hKey, nameW, NULL, NULL, (LPBYTE)pszProvName, pcbProvName);
1606
1607 if (result)
1608 {
1609 if (result != ERROR_MORE_DATA)
1611 else
1613
1614 return FALSE;
1615 }
1616
1617 return TRUE;
1618}
#define CRYPT_MACHINE_DEFAULT
Definition: wincrypt.h:2280
#define CRYPT_USER_DEFAULT
Definition: wincrypt.h:2281

Referenced by CryptGetDefaultProviderA().

◆ CryptGetHashParam()

BOOL WINAPI CryptGetHashParam ( HCRYPTHASH  hHash,
DWORD  dwParam,
BYTE pbData,
DWORD pdwDataLen,
DWORD  dwFlags 
)

◆ CryptGetKeyParam()

BOOL WINAPI CryptGetKeyParam ( HCRYPTKEY  hKey,
DWORD  dwParam,
BYTE pbData,
DWORD pdwDataLen,
DWORD  dwFlags 
)

Definition at line 1714 of file crypt.c.

1716{
1717 PCRYPTPROV prov;
1719
1720 TRACE("(0x%lx, %d, %p, %p, %08x)\n", hKey, dwParam, pbData, pdwDataLen, dwFlags);
1721
1722 if (!key || !pdwDataLen || !key->pProvider ||
1723 key->dwMagic != MAGIC_CRYPTKEY || key->pProvider->dwMagic != MAGIC_CRYPTPROV)
1724 {
1726 return FALSE;
1727 }
1728
1729 prov = key->pProvider;
1730 return prov->pFuncs->pCPGetKeyParam(prov->hPrivate, key->hPrivate, dwParam,
1731 pbData, pdwDataLen, dwFlags);
1732}

Referenced by CertGetPublicKeyLength(), export_is_key_exportable(), test_aes(), test_block_cipher_modes(), test_des(), test_import_export(), test_import_private(), test_incorrect_api_usage(), test_key_derivation(), test_key_permissions(), test_rc2(), test_rc4(), test_rsa_encrypt(), and testImportPublicKey().

◆ CryptGetProvParam()

BOOL WINAPI CryptGetProvParam ( HCRYPTPROV  hProv,
DWORD  dwParam,
BYTE pbData,
DWORD pdwDataLen,
DWORD  dwFlags 
)

Definition at line 1753 of file crypt.c.

1755{
1756 PCRYPTPROV prov = (PCRYPTPROV)hProv;
1757
1758 TRACE("(0x%lx, %d, %p, %p, %08x)\n", hProv, dwParam, pbData, pdwDataLen, dwFlags);
1759
1760 if (!prov || prov->dwMagic != MAGIC_CRYPTPROV)
1761 {
1763 return FALSE;
1764 }
1765
1766 return prov->pFuncs->pCPGetProvParam(prov->hPrivate, dwParam, pbData, pdwDataLen, dwFlags);
1767}

Referenced by CertContext_SetKeyProvInfo(), find_key_prov_info_in_provider(), is_supported_algid(), test_container_sd(), test_enum_container(), test_getDefaultCryptProv(), test_incorrect_api_usage(), test_null_provider(), and test_prov().

◆ CryptGetUserKey()

BOOL WINAPI CryptGetUserKey ( HCRYPTPROV  hProv,
DWORD  dwKeySpec,
HCRYPTKEY phUserKey 
)

Definition at line 1783 of file crypt.c.

1784{
1785 PCRYPTPROV prov = (PCRYPTPROV)hProv;
1786 PCRYPTKEY key;
1787
1788 TRACE("(0x%lx, %d, %p)\n", hProv, dwKeySpec, phUserKey);
1789
1790 if (!prov)
1791 {
1793 return FALSE;
1794 }
1795 if (!phUserKey || prov->dwMagic != MAGIC_CRYPTPROV)
1796 {
1798 return FALSE;
1799 }
1800 if ( !(key = CRYPT_Alloc(sizeof(CRYPTKEY))) )
1801 {
1803 return FALSE;
1804 }
1805
1806 key->pProvider = prov;
1807 key->dwMagic = MAGIC_CRYPTKEY;
1808 if (prov->pFuncs->pCPGetUserKey(prov->hPrivate, dwKeySpec, &key->hPrivate))
1809 {
1810 *phUserKey = (HCRYPTKEY)key;
1811 return TRUE;
1812 }
1813
1814 /* CSP Error */
1815 key->dwMagic = 0;
1816 CRYPT_Free(key);
1817 *phUserKey = 0;
1818 return FALSE;
1819}

Referenced by CertCreateSelfSignCertificate(), CRYPT_ExportPublicKeyInfoEx(), CRYPT_ImportKeyTrans(), export_is_key_exportable(), test_import_export(), test_incorrect_api_usage(), test_key_initialization(), test_key_permissions(), test_null_provider(), test_rsa_encrypt(), test_rsa_round_trip(), and testCreateSelfSignCert().

◆ CryptHashData()

◆ CryptHashSessionKey()

BOOL WINAPI CryptHashSessionKey ( HCRYPTHASH  hHash,
HCRYPTKEY  hKey,
DWORD  dwFlags 
)

Definition at line 1873 of file crypt.c.

1874{
1875 PCRYPTHASH hash = (PCRYPTHASH)hHash;
1877 PCRYPTPROV prov;
1878
1879 TRACE("(0x%lx, 0x%lx, %08x)\n", hHash, hKey, dwFlags);
1880
1881 if (!hash || !key)
1882 {
1884 return FALSE;
1885 }
1886
1887 if (!hash->pProvider || hash->dwMagic != MAGIC_CRYPTHASH ||
1888 hash->pProvider->dwMagic != MAGIC_CRYPTPROV || key->dwMagic != MAGIC_CRYPTKEY)
1889 {
1891 return FALSE;
1892 }
1893
1894 prov = hash->pProvider;
1895 return prov->pFuncs->pCPHashSessionKey(prov->hPrivate, hash->hPrivate, key->hPrivate, dwFlags);
1896}

◆ CryptImportKey()

BOOL WINAPI CryptImportKey ( HCRYPTPROV  hProv,
const BYTE pbData,
DWORD  dwDataLen,
HCRYPTKEY  hPubKey,
DWORD  dwFlags,
HCRYPTKEY phKey 
)

Definition at line 1915 of file crypt.c.

1917{
1918 PCRYPTPROV prov = (PCRYPTPROV)hProv;
1919 PCRYPTKEY pubkey = (PCRYPTKEY)hPubKey, importkey;
1920
1921 TRACE("(0x%lx, %p, %d, 0x%lx, %08x, %p)\n", hProv, pbData, dwDataLen, hPubKey, dwFlags, phKey);
1922
1923 if (!prov || !pbData || !dwDataLen || !phKey ||
1924 prov->dwMagic != MAGIC_CRYPTPROV ||
1925 (pubkey && pubkey->dwMagic != MAGIC_CRYPTKEY))
1926 {
1928 return FALSE;
1929 }
1930
1931 if ( !(importkey = CRYPT_Alloc(sizeof(CRYPTKEY))) )
1932 {
1934 return FALSE;
1935 }
1936
1937 importkey->pProvider = prov;
1938 importkey->dwMagic = MAGIC_CRYPTKEY;
1939 if (prov->pFuncs->pCPImportKey(prov->hPrivate, pbData, dwDataLen,
1940 pubkey ? pubkey->hPrivate : 0, dwFlags, &importkey->hPrivate))
1941 {
1942 *phKey = (HCRYPTKEY)importkey;
1943 return TRUE;
1944 }
1945
1946 importkey->dwMagic = 0;
1947 CRYPT_Free(importkey);
1948 return FALSE;
1949}
static const WCHAR pubkey[]
Definition: asmname.c:68

Referenced by CRYPT_ImportKeyTrans(), CRYPT_ImportPublicKeyInfoEx(), rdssl_hmac_md5(), rdssl_rc4_set_key(), test_decode_msg_get_param(), test_hashes(), test_import_export(), test_import_hmac(), test_import_private(), test_incorrect_api_usage(), test_key_initialization(), test_null_provider(), test_rc2_keylen(), test_rsa_round_trip(), test_schannel_provider(), test_sign_message(), test_signed_msg_encoding(), test_signed_msg_update(), test_verify_sig(), test_verify_signature(), testAcquireCertPrivateKey(), and testAcquireSecurityContext().

◆ CryptReleaseContext()

BOOL WINAPI CryptReleaseContext ( HCRYPTPROV  hProv,
DWORD  dwFlags 
)

Definition at line 661 of file crypt.c.

662{
663 PCRYPTPROV pProv = (PCRYPTPROV)hProv;
664 BOOL ret = TRUE;
665
666 TRACE("(0x%lx, %08x)\n", hProv, dwFlags);
667
668 if (!pProv)
669 {
671 return FALSE;
672 }
673
674 if (pProv->dwMagic != MAGIC_CRYPTPROV)
675 {
677 return FALSE;
678 }
679
680 if (InterlockedDecrement(&pProv->refcount) == 0)
681 {
682 ret = pProv->pFuncs->pCPReleaseContext(pProv->hPrivate, dwFlags);
683 pProv->dwMagic = 0;
684 FreeLibrary(pProv->hModule);
685#if 0
686 CRYPT_Free(pProv->pVTable->pContextInfo);
687#endif
689 CRYPT_Free(pProv->pVTable);
690 CRYPT_Free(pProv->pFuncs);
691 CRYPT_Free(pProv);
692 }
693 return ret;
694}
#define InterlockedDecrement
Definition: armddk.h:52

Referenced by CDecodeMsg_Close(), CEnvelopedEncodeMsg_Close(), CEnvelopedEncodeMsg_Open(), CertContext_SetProperty(), CertCreateSelfSignCertificate(), CHashEncodeMsg_Close(), clean_up_aes_environment(), clean_up_base_environment(), clean_up_environment(), create_silly_rename(), CRYPT_FileNameOpenStoreW(), CRYPT_FileOpenStore(), CRYPT_GetDefaultProvider(), CRYPT_MemOpenStore(), CRYPT_MsgOpenStore(), CRYPT_RegOpenStore(), CRYPT_SysOpenStoreW(), CryptCATAdminCalcHashFromFileHandle(), CryptCATAdminEnumCatalogFromHash(), CryptProtectData(), CryptSignMessage(), CryptUnprotectData(), CSignedEncodeMsg_Open(), DllMain(), DllRegisterServer(), export_private_key_dlg_proc(), find_key_prov_info_in_provider(), hash_file(), I_CryptGetDefaultCryptProv(), init_environment(), key_prov_info_matches_cert(), nfs41_client_owner(), rdssl_cert_to_rkey(), rdssl_hash_info_create(), rdssl_hash_info_delete(), rdssl_hmac_md5(), rdssl_rc4_info_delete(), SOFTPUB_VerifyImageHash(), START_TEST(), test_acquire_context(), test_container_sd(), test_CryptReleaseContext(), test_decode_msg_get_param(), test_encrypt_message(), test_enveloped_msg_open(), test_getDefaultCryptProv(), test_hashes(), test_incorrect_api_usage(), test_key_initialization(), test_machine_guid(), test_null_provider(), test_rc2_keylen(), test_rsa_round_trip(), test_schannel_provider(), test_sign_message(), test_signed_msg_encoding(), test_signed_msg_get_param(), test_signed_msg_open(), test_signed_msg_update(), test_sip(), test_verify_sig(), test_VerifySignature(), testAcquireCertPrivateKey(), testAcquireSecurityContext(), testCertSigs(), testCreateSelfSignCert(), and testPortPublicKeyInfo().

◆ CryptSetHashParam()

BOOL WINAPI CryptSetHashParam ( HCRYPTHASH  hHash,
DWORD  dwParam,
const BYTE pbData,
DWORD  dwFlags 
)

Definition at line 2035 of file crypt.c.

2036{
2037 PCRYPTPROV prov;
2038 PCRYPTHASH hash = (PCRYPTHASH)hHash;
2039
2040 TRACE("(0x%lx, %d, %p, %08x)\n", hHash, dwParam, pbData, dwFlags);
2041
2042 if (!hash || !pbData || !hash->pProvider ||
2043 hash->dwMagic != MAGIC_CRYPTHASH || hash->pProvider->dwMagic != MAGIC_CRYPTPROV)
2044 {
2046 return FALSE;
2047 }
2048
2049 prov = hash->pProvider;
2050 return prov->pFuncs->pCPSetHashParam(prov->hPrivate, hash->hPrivate,
2051 dwParam, pbData, dwFlags);
2052}

Referenced by rdssl_hmac_md5(), test_hashes(), test_hmac(), test_import_hmac(), test_incorrect_api_usage(), and test_schannel_provider().

◆ CryptSetKeyParam()

BOOL WINAPI CryptSetKeyParam ( HCRYPTKEY  hKey,
DWORD  dwParam,
const BYTE pbData,
DWORD  dwFlags 
)

Definition at line 2069 of file crypt.c.

2070{
2071 PCRYPTPROV prov;
2073
2074 TRACE("(0x%lx, %d, %p, %08x)\n", hKey, dwParam, pbData, dwFlags);
2075
2076 if (!key || !pbData || !key->pProvider ||
2077 key->dwMagic != MAGIC_CRYPTKEY || key->pProvider->dwMagic != MAGIC_CRYPTPROV)
2078 {
2080 return FALSE;
2081 }
2082
2083 prov = key->pProvider;
2084 return prov->pFuncs->pCPSetKeyParam(prov->hPrivate, key->hPrivate,
2085 dwParam, pbData, dwFlags);
2086}

Referenced by test_block_cipher_modes(), test_des(), test_incorrect_api_usage(), test_key_permissions(), test_rc2(), test_rc4(), test_rsa_encrypt(), and test_schannel_provider().

◆ CryptSetProviderA()

BOOL WINAPI CryptSetProviderA ( LPCSTR  pszProvName,
DWORD  dwProvType 
)

Definition at line 2101 of file crypt.c.

2102{
2103 TRACE("(%s, %d)\n", pszProvName, dwProvType);
2104 return CryptSetProviderExA(pszProvName, dwProvType, NULL, CRYPT_USER_DEFAULT);
2105}
BOOL WINAPI CryptSetProviderExA(LPCSTR pszProvName, DWORD dwProvType, DWORD *pdwReserved, DWORD dwFlags)
Definition: crypt.c:2214

◆ CryptSetProviderExA()

BOOL WINAPI CryptSetProviderExA ( LPCSTR  pszProvName,
DWORD  dwProvType,
DWORD pdwReserved,
DWORD  dwFlags 
)

Definition at line 2214 of file crypt.c.

2215{
2216 BOOL ret = FALSE;
2217 PWSTR str = NULL;
2218
2219 TRACE("(%s, %d, %p, %08x)\n", pszProvName, dwProvType, pdwReserved, dwFlags);
2220
2221 if (CRYPT_ANSIToUnicode(pszProvName, &str, -1))
2222 {
2223 ret = CryptSetProviderExW(str, dwProvType, pdwReserved, dwFlags);
2224 CRYPT_Free(str);
2225 }
2226 return ret;
2227}
BOOL WINAPI CryptSetProviderExW(LPCWSTR pszProvName, DWORD dwProvType, DWORD *pdwReserved, DWORD dwFlags)
Definition: crypt.c:2133

Referenced by CryptSetProviderA().

◆ CryptSetProviderExW()

BOOL WINAPI CryptSetProviderExW ( LPCWSTR  pszProvName,
DWORD  dwProvType,
DWORD pdwReserved,
DWORD  dwFlags 
)

Definition at line 2133 of file crypt.c.

2134{
2135 HKEY hProvKey, hTypeKey;
2136 PWSTR keyname;
2137 static const WCHAR nameW[] = {'N','a','m','e',0};
2138
2139 TRACE("(%s, %d, %p, %08x)\n", debugstr_w(pszProvName), dwProvType, pdwReserved, dwFlags);
2140
2141 if (!pszProvName || pdwReserved)
2142 {
2144 return FALSE;
2145 }
2146 if (dwProvType > MAXPROVTYPES)
2147 {
2149 return FALSE;
2150 }
2153 {
2155 return FALSE;
2156 }
2157
2158 if (!(keyname = CRYPT_GetTypeKeyName(dwProvType, dwFlags & CRYPT_USER_DEFAULT)))
2159 {
2161 return FALSE;
2162 }
2164 keyname, &hTypeKey))
2165 {
2166 CRYPT_Free(keyname);
2168 return FALSE;
2169 }
2170 CRYPT_Free(keyname);
2171
2173 {
2174 RegDeleteValueW(hTypeKey, nameW);
2175 }
2176 else
2177 {
2178 if (!(keyname = CRYPT_GetProvKeyName(pszProvName)))
2179 {
2180 RegCloseKey(hTypeKey);
2182 return FALSE;
2183 }
2185 keyname, &hProvKey))
2186 {
2187 CRYPT_Free(keyname);
2188 RegCloseKey(hTypeKey);
2190 return FALSE;
2191 }
2192 CRYPT_Free(keyname);
2193
2194 if (RegSetValueExW(hTypeKey, nameW, 0, REG_SZ, (const BYTE *)pszProvName,
2195 (strlenW(pszProvName) + 1)*sizeof(WCHAR)))
2196 {
2197 RegCloseKey(hTypeKey);
2198 RegCloseKey(hProvKey);
2199 return FALSE;
2200 }
2201
2202 RegCloseKey(hProvKey);
2203 }
2204 RegCloseKey(hTypeKey);
2205
2206 return TRUE;
2207}
LONG WINAPI RegDeleteValueW(HKEY hKey, LPCWSTR lpValueName)
Definition: reg.c:2330
#define CRYPT_DELETE_DEFAULT
Definition: wincrypt.h:2282
#define NTE_BAD_PROVIDER
Definition: winerror.h:4266

Referenced by CryptSetProviderExA(), and CryptSetProviderW().

◆ CryptSetProviderW()

BOOL WINAPI CryptSetProviderW ( LPCWSTR  pszProvName,
DWORD  dwProvType 
)

Definition at line 2112 of file crypt.c.

2113{
2114 TRACE("(%s, %d)\n", debugstr_w(pszProvName), dwProvType);
2115 return CryptSetProviderExW(pszProvName, dwProvType, NULL, CRYPT_USER_DEFAULT);
2116}

◆ CryptSetProvParam()

BOOL WINAPI CryptSetProvParam ( HCRYPTPROV  hProv,
DWORD  dwParam,
const BYTE pbData,
DWORD  dwFlags 
)

Definition at line 2244 of file crypt.c.

2245{
2246 PCRYPTPROV prov = (PCRYPTPROV)hProv;
2247
2248 TRACE("(0x%lx, %d, %p, %08x)\n", hProv, dwParam, pbData, dwFlags);
2249
2250 if (!prov)
2251 {
2253 return FALSE;
2254 }
2255 if (prov->dwMagic != MAGIC_CRYPTPROV)
2256 {
2258 return FALSE;
2259 }
2260 if (dwParam == PP_USE_HARDWARE_RNG)
2261 {
2262 FIXME("PP_USE_HARDWARE_RNG: What do I do with this?\n");
2263 FIXME("\tLetting the CSP decide.\n");
2264 }
2265 if (dwFlags & PP_CLIENT_HWND)
2266 {
2267 /* FIXME: Should verify the parameter */
2268 if (pbData /* && IsWindow((HWND)pbData) */)
2269 {
2270 crypt_hWindow = (HWND)(pbData);
2271 return TRUE;
2272 } else {
2274 return FALSE;
2275 }
2276 }
2277 /* All other flags go to the CSP */
2278 return prov->pFuncs->pCPSetProvParam(prov->hPrivate, dwParam, pbData, dwFlags);
2279}
HANDLE HWND
Definition: compat.h:19
#define PP_CLIENT_HWND
Definition: wincrypt.h:2285
#define PP_USE_HARDWARE_RNG
Definition: wincrypt.h:2317

Referenced by CRYPT_AcquirePrivateKeyFromProvInfo(), export_acquire_private_key(), and test_incorrect_api_usage().

◆ CryptSignHashA()

BOOL WINAPI CryptSignHashA ( HCRYPTHASH  hHash,
DWORD  dwKeySpec,
LPCSTR  sDescription,
DWORD  dwFlags,
BYTE pbSignature,
DWORD pdwSigLen 
)

Definition at line 2004 of file crypt.c.

2006{
2007 LPWSTR wsDescription;
2008 BOOL result;
2009
2010 TRACE("(0x%lx, %d, %s, %08x, %p, %p)\n",
2011 hHash, dwKeySpec, debugstr_a(sDescription), dwFlags, pbSignature, pdwSigLen);
2012
2013 CRYPT_ANSIToUnicode(sDescription, &wsDescription, -1);
2014 result = CryptSignHashW(hHash, dwKeySpec, wsDescription, dwFlags, pbSignature, pdwSigLen);
2015 CRYPT_Free(wsDescription);
2016
2017 return result;
2018}
BOOL WINAPI CryptSignHashW(HCRYPTHASH hHash, DWORD dwKeySpec, LPCWSTR sDescription, DWORD dwFlags, BYTE *pbSignature, DWORD *pdwSigLen)
Definition: crypt.c:1973
WCHAR * LPWSTR
Definition: xmlstorage.h:184

Referenced by test_hashes(), and verifySig().

◆ CryptSignHashW()

BOOL WINAPI CryptSignHashW ( HCRYPTHASH  hHash,
DWORD  dwKeySpec,
LPCWSTR  sDescription,
DWORD  dwFlags,
BYTE pbSignature,
DWORD pdwSigLen 
)

Definition at line 1973 of file crypt.c.

1975{
1976 PCRYPTHASH hash = (PCRYPTHASH)hHash;
1977 PCRYPTPROV prov;
1978
1979 TRACE("(0x%lx, %d, %s, %08x, %p, %p)\n",
1980 hHash, dwKeySpec, debugstr_w(sDescription), dwFlags, pbSignature, pdwSigLen);
1981
1982 if (!hash)
1983 {
1985 return FALSE;
1986 }
1987 if (!pdwSigLen || !hash->pProvider || hash->dwMagic != MAGIC_CRYPTHASH ||
1988 hash->pProvider->dwMagic != MAGIC_CRYPTPROV)
1989 {
1991 return FALSE;
1992 }
1993
1994 prov = hash->pProvider;
1995 return prov->pFuncs->pCPSignHash(prov->hPrivate, hash->hPrivate, dwKeySpec, sDescription,
1996 dwFlags, pbSignature, pdwSigLen);
1997}

Referenced by CryptSignCertificate(), CryptSignHashA(), and CSignedMsgData_Sign().

◆ CryptVerifySignatureA()

BOOL WINAPI CryptVerifySignatureA ( HCRYPTHASH  hHash,
const BYTE pbSignature,
DWORD  dwSigLen,
HCRYPTKEY  hPubKey,
LPCSTR  sDescription,
DWORD  dwFlags 
)

Definition at line 2331 of file crypt.c.

2333{
2334 LPWSTR wsDescription;
2335 BOOL result;
2336
2337 TRACE("(0x%lx, %p, %d, 0x%lx, %s, %08x)\n", hHash, pbSignature,
2338 dwSigLen, hPubKey, debugstr_a(sDescription), dwFlags);
2339
2340 CRYPT_ANSIToUnicode(sDescription, &wsDescription, -1);
2341 result = CryptVerifySignatureW(hHash, pbSignature, dwSigLen, hPubKey, wsDescription, dwFlags);
2342 CRYPT_Free(wsDescription);
2343
2344 return result;
2345}
BOOL WINAPI CryptVerifySignatureW(HCRYPTHASH hHash, const BYTE *pbSignature, DWORD dwSigLen, HCRYPTKEY hPubKey, LPCWSTR sDescription, DWORD dwFlags)
Definition: crypt.c:2303

Referenced by test_verify_signature().

◆ CryptVerifySignatureW()

BOOL WINAPI CryptVerifySignatureW ( HCRYPTHASH  hHash,
const BYTE pbSignature,
DWORD  dwSigLen,
HCRYPTKEY  hPubKey,
LPCWSTR  sDescription,
DWORD  dwFlags 
)

Definition at line 2303 of file crypt.c.

2305{
2306 PCRYPTHASH hash = (PCRYPTHASH)hHash;
2307 PCRYPTKEY key = (PCRYPTKEY)hPubKey;
2308 PCRYPTPROV prov;
2309
2310 TRACE("(0x%lx, %p, %d, 0x%lx, %s, %08x)\n", hHash, pbSignature,
2311 dwSigLen, hPubKey, debugstr_w(sDescription), dwFlags);
2312
2313 if (!hash || !key || key->dwMagic != MAGIC_CRYPTKEY || hash->dwMagic != MAGIC_CRYPTHASH ||
2314 !hash->pProvider || hash->pProvider->dwMagic != MAGIC_CRYPTPROV ||
2315 !key->pProvider || key->pProvider->dwMagic != MAGIC_CRYPTPROV)
2316 {
2318 return FALSE;
2319 }
2320
2321 prov = hash->pProvider;
2322 return prov->pFuncs->pCPVerifySignature(prov->hPrivate, hash->hPrivate, pbSignature, dwSigLen,
2323 key->hPrivate, sDescription, dwFlags);
2324}

Referenced by CDecodeSignedMsg_VerifySignatureWithKey(), CRYPT_VerifySignature(), CryptVerifySignatureA(), and test_VerifySignature().

◆ OpenEncryptedFileRawA()

DWORD WINAPI OpenEncryptedFileRawA ( LPCSTR  filename,
ULONG  flags,
PVOID context 
)

Definition at line 2352 of file crypt.c.

2353{
2354 FIXME("(%s, %x, %p): stub\n", debugstr_a(filename), flags, context);
2356}
GLbitfield flags
Definition: glext.h:7161
const char * filename
Definition: ioapi.h:137

◆ OpenEncryptedFileRawW()

DWORD WINAPI OpenEncryptedFileRawW ( LPCWSTR  filename,
ULONG  flags,
PVOID context 
)

Definition at line 2371 of file crypt.c.

2372{
2373 FIXME("(%s, %x, %p): stub\n", debugstr_w(filename), flags, context);
2375}

◆ ReadEncryptedFileRaw()

DWORD WINAPI ReadEncryptedFileRaw ( PFE_EXPORT_FUNC  export,
PVOID  callback,
PVOID  context 
)

Definition at line 2390 of file crypt.c.

2391{
2392 FIXME("(%p, %p, %p): stub\n", export, callback, context);
2394}
static IPrintDialogCallback callback
Definition: printdlg.c:326

◆ SystemFunction030()

BOOL WINAPI SystemFunction030 ( LPCVOID  b1,
LPCVOID  b2 
)

Definition at line 2409 of file crypt.c.

2410{
2411 return !memcmp(b1, b2, 0x10);
2412}
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
Definition: string.c:2802
static CRYPT_DATA_BLOB b2[]
Definition: msg.c:538
static CRYPT_DATA_BLOB b1[]
Definition: msg.c:529

◆ SystemFunction035()

BOOL WINAPI SystemFunction035 ( LPCSTR  lpszDllFilePath)

Definition at line 2423 of file crypt.c.

2424{
2425 FIXME("%s: stub\n", debugstr_a(lpszDllFilePath));
2426 return TRUE;
2427}

◆ SystemFunction036()

BOOLEAN WINAPI SystemFunction036 ( PVOID  pbBuffer,
ULONG  dwLen 
)

Definition at line 2443 of file crypt.c.

2444{
2445 int dev_random;
2446
2447 dev_random = open("/dev/urandom", O_RDONLY);
2448 if (dev_random != -1)
2449 {
2450 if (!IsBadWritePtr( pbBuffer, dwLen ) &&
2451 read(dev_random, pbBuffer, dwLen) == (ssize_t)dwLen)
2452 {
2453 close(dev_random);
2454 return TRUE;
2455 }
2456 close(dev_random);
2457 }
2458 else
2459 FIXME("couldn't open /dev/urandom\n");
2461 return FALSE;
2462}
#define read
Definition: acwin.h:96
#define close
Definition: acwin.h:98
BOOL NTAPI IsBadWritePtr(IN LPVOID lp, IN UINT_PTR ucb)
Definition: except.c:883
#define O_RDONLY
Definition: fcntl.h:34
#define open
Definition: io.h:44
int ssize_t
Definition: rosdhcp.h:52

◆ SystemFunction040()

NTSTATUS WINAPI SystemFunction040 ( PVOID  memory,
ULONG  length,
ULONG  flags 
)

Definition at line 2491 of file crypt.c.

2492{
2493 FIXME("(%p, %x, %x): stub [RtlEncryptMemory]\n", memory, length, flags);
2494 return STATUS_SUCCESS;
2495}
GLuint GLsizei GLsizei * length
Definition: glext.h:6040
static char memory[1024 *256]
Definition: process.c:122
#define STATUS_SUCCESS
Definition: shellext.h:65

◆ SystemFunction041()

NTSTATUS WINAPI SystemFunction041 ( PVOID  memory,
ULONG  length,
ULONG  flags 
)

Definition at line 2519 of file crypt.c.

2520{
2521 FIXME("(%p, %x, %x): stub [RtlDecryptMemory]\n", memory, length, flags);
2522 return STATUS_SUCCESS;
2523}

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( crypt  )

◆ WriteEncryptedFileRaw()

DWORD WINAPI WriteEncryptedFileRaw ( PFE_IMPORT_FUNC  import,
PVOID  callback,
PVOID  context 
)

Definition at line 2539 of file crypt.c.

2540{
2541 FIXME("(%p, %p, %p): stub\n", import, callback, context);
2543}

Variable Documentation

◆ crypt_hWindow

HWND crypt_hWindow
static

Definition at line 59 of file crypt.c.

Referenced by CRYPT_ReturnhWnd(), and CryptSetProvParam().