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;
+}