Build mono runtime under none desktop Windows API family, adjustments and cleanup.
[mono.git] / mono / utils / mono-rand-windows-uwp.c
1 /*
2  * mono-rand-windows-uwp.c: UWP rand support for Mono.
3  *
4  * Copyright 2016 Microsoft
5  * Licensed under the MIT license. See LICENSE file in the project root for full license information.
6 */
7 #include <config.h>
8 #include <glib.h>
9 #include "mono/utils/mono-compiler.h"
10
11 #if G_HAVE_API_SUPPORT(HAVE_UWP_WINAPI_SUPPORT)
12 #include <windows.h>
13 #include "mono/utils/mono-rand-windows-internals.h"
14
15 MONO_WIN32_CRYPT_PROVIDER_HANDLE
16 mono_rand_win_open_provider (void)
17 {
18         MONO_WIN32_CRYPT_PROVIDER_HANDLE provider = 0;
19
20         if (!BCRYPT_SUCCESS (BCryptOpenAlgorithmProvider (&provider, BCRYPT_RNG_ALGORITHM, NULL, 0)))
21                 provider = 0;
22
23         return provider;
24 }
25
26 gboolean
27 mono_rand_win_gen (MONO_WIN32_CRYPT_PROVIDER_HANDLE provider, guchar *buffer, size_t buffer_size)
28 {
29         g_assert (provider != 0 && buffer != 0);
30         return (BCRYPT_SUCCESS (BCryptGenRandom (provider, buffer, (ULONG) buffer_size, 0))) ? TRUE : FALSE;
31 }
32
33 gboolean
34 mono_rand_win_seed (MONO_WIN32_CRYPT_PROVIDER_HANDLE provider, guchar *seed, size_t seed_size)
35 {
36         g_assert (provider != 0 && seed != 0);
37         return (BCRYPT_SUCCESS (BCryptGenRandom (provider, seed, (ULONG) seed_size, BCRYPT_RNG_USE_ENTROPY_IN_BUFFER))) ? TRUE : FALSE;
38 }
39
40 void
41 mono_rand_win_close_provider (MONO_WIN32_CRYPT_PROVIDER_HANDLE provider)
42 {
43         g_assert (provider != 0);
44         BCryptCloseAlgorithmProvider (provider, 0);
45 }
46
47 #else /* G_HAVE_API_SUPPORT(HAVE_UWP_WINAPI_SUPPORT) */
48
49 MONO_EMPTY_SOURCE_FILE (mono_rand_windows_uwp);
50 #endif /* G_HAVE_API_SUPPORT(HAVE_UWP_WINAPI_SUPPORT) */