Added stubs for CryptGenRandom(), CryptReleaseContext().
diff --git a/dlls/advapi32/advapi32.spec b/dlls/advapi32/advapi32.spec index 97e0fb9..a2ef252 100644 --- a/dlls/advapi32/advapi32.spec +++ b/dlls/advapi32/advapi32.spec
@@ -54,14 +54,14 @@ @ stub CryptGetKeyParam @ stub CryptGetHashParam @ stub CryptGetProvParam -@ stub CryptGenRandom +@ stdcall CryptGenRandom(long long ptr) CryptGenRandom @ stub CryptGetDefaultProviderA @ stub CryptGetDefaultProviderW @ stub CryptGetUserKey @ stub CryptHashData @ stub CryptHashSessionKey @ stub CryptImportKey -@ stub CryptReleaseContext +@ stdcall CryptReleaseContext(long long) CryptReleaseContext @ stub CryptSetHashParam @ stdcall CryptSetKeyParam(long long ptr long) CryptSetKeyParam @ stub CryptSetProvParam
diff --git a/dlls/advapi32/crypt.c b/dlls/advapi32/crypt.c index 00290f3..7438f2e 100644 --- a/dlls/advapi32/crypt.c +++ b/dlls/advapi32/crypt.c
@@ -1,12 +1,15 @@ /* * dlls/advapi32/crypt.c */ +#include <time.h> +#include <stdlib.h> + #include "windef.h" #include "winerror.h" #include "wincrypt.h" #include "debugtools.h" -DEFAULT_DEBUG_CHANNEL(advapi) +DEFAULT_DEBUG_CHANNEL(advapi); /****************************************************************************** * CryptAcquireContextA @@ -41,3 +44,51 @@ return FALSE; } + +/****************************************************************************** + * CryptGenRandom + */ +BOOL WINAPI +CryptGenRandom (HCRYPTPROV hProv, DWORD dwLen, BYTE *pbBuffer) +{ + DWORD i; + + FIXME("(0x%lx, %ld, %p): stub!\n", hProv, dwLen, pbBuffer); + /* + FIXME: Currently this function is just a stub, it is missing functionality in + the following (major) ways: + (1) It makes no use of the passed in HCRYPTPROV handle. (ie. it doesn't + use a cryptographic service provider (CSP) + (2) It doesn't use the values in the passed in pbBuffer to further randomize + its internal seed. + (3) MSDN mentions that this function produces "cryptographically random" + data, which is "... far more random than the data generated by the typical + random number generator such as the one shipped with your C compiler". + We are currently using the C runtime rand() function. ^_^ + + See MSDN documentation for CryptGenRandom for more information. + */ + + if (dwLen <= 0) + return FALSE; + + srand(time(NULL)); + for (i=0; i<dwLen; i++) + { + *pbBuffer = (BYTE)(rand() % 256); + pbBuffer++; + } + + return TRUE; +} + + +/****************************************************************************** + * CryptReleaseContext + */ +BOOL WINAPI +CryptReleaseContext (HCRYPTPROV hProv, DWORD dwFlags) +{ + FIXME("(0x%lx, 0x%lx): stub!\n", hProv, dwFlags); + return FALSE; +}