From 8b472324e4ce32c4df84bbc7d6eb0866d38ccac7 Mon Sep 17 00:00:00 2001 From: Sui Date: Mon, 15 Dec 2014 15:57:57 +0800 Subject: [PATCH] fix issue of SystemFunction036 not found at advapi32 when build libsodium . --- .../randombytes/salsa20/randombytes_salsa20_random.c | 8 ++++++++ .../randombytes/sysrandom/randombytes_sysrandom.c | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/libsodium/src/libsodium/randombytes/salsa20/randombytes_salsa20_random.c b/libsodium/src/libsodium/randombytes/salsa20/randombytes_salsa20_random.c index cb7f9e2f..ab44553f 100644 --- a/libsodium/src/libsodium/randombytes/salsa20/randombytes_salsa20_random.c +++ b/libsodium/src/libsodium/randombytes/salsa20/randombytes_salsa20_random.c @@ -30,9 +30,13 @@ # if defined(__cplusplus) extern "C" # endif +#if defined(__MINGW32__) +BOOLEAN (APIENTRY *RtlGenRandom)(PVOID, ULONG); +#else BOOLEAN NTAPI RtlGenRandom(PVOID RandomBuffer, ULONG RandomBufferLength); # pragma comment(lib, "advapi32.lib") #endif +#endif #define SALSA20_RANDOM_BLOCK_SIZE crypto_core_salsa20_OUTPUTBYTES #define SHA512_BLOCK_SIZE 128U @@ -189,6 +193,10 @@ randombytes_salsa20_random_stir(void) abort(); /* LCOV_EXCL_LINE */ } #else /* _WIN32 */ +#if defined (__MINGW32__) + HMODULE lib = LoadLibraryW (L"advapi32.dll"); + RtlGenRandom = (BOOLEAN(APIENTRY*)(PVOID,ULONG))GetProcAddress (lib,"SystemFunction036"); +#endif if (! RtlGenRandom((PVOID) m0, (ULONG) sizeof m0)) { abort(); /* LCOV_EXCL_LINE */ } diff --git a/libsodium/src/libsodium/randombytes/sysrandom/randombytes_sysrandom.c b/libsodium/src/libsodium/randombytes/sysrandom/randombytes_sysrandom.c index 79e910df..af3eb735 100644 --- a/libsodium/src/libsodium/randombytes/sysrandom/randombytes_sysrandom.c +++ b/libsodium/src/libsodium/randombytes/sysrandom/randombytes_sysrandom.c @@ -26,9 +26,13 @@ # if defined(__cplusplus) extern "C" # endif +#if defined(__MINGW32__) +BOOLEAN (APIENTRY *RtlGenRandom)(PVOID, ULONG); +#else BOOLEAN NTAPI RtlGenRandom(PVOID RandomBuffer, ULONG RandomBufferLength); # pragma comment(lib, "advapi32.lib") #endif +#endif #ifdef __OpenBSD__ @@ -211,6 +215,10 @@ randombytes_sysrandom_buf(void * const buf, const size_t size) if (size > (size_t) 0xffffffff) { abort(); /* LCOV_EXCL_LINE */ } +#if defined (__MINGW32__) + HMODULE lib = LoadLibraryW (L"advapi32.dll"); + RtlGenRandom = (BOOLEAN(APIENTRY*)(PVOID,ULONG))GetProcAddress (lib,"SystemFunction036"); +#endif if (! RtlGenRandom((PVOID) buf, (ULONG) size)) { abort(); /* LCOV_EXCL_LINE */ }