Skip to content

Commit 75a3e8b

Browse files
authored
Windows 7 support (#2940)
### Issues: Addresses #1997 ### Description of changes: `ProcessPrng` (from `bcryptprimitives.dll`) is only available on Windows 8+. So the current code fails at runtime on Windows 7 because `GetProcAddress` returns `NULL` and causes an `abort()`. This change defines `AWSLC_WINDOWS_7_COMPAT` when `_WIN32_WINNT <= _WIN32_WINNT_WIN7`. Then uses the existing `BCryptGenRandom` logic when it's is defined. * Related: aws/aws-lc-rs#1000 By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license and the ISC license.
1 parent 0b6fb3e commit 75a3e8b

File tree

1 file changed

+13
-6
lines changed

1 file changed

+13
-6
lines changed

crypto/rand_extra/windows.c

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,23 @@ OPENSSL_MSVC_PRAGMA(warning(push, 3))
2626

2727
#include <windows.h>
2828

29-
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) && \
30-
!WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
29+
// ProcessPrng (from `bcryptprimitives.dll`) is only available on Windows 8+.
30+
#if !defined(__MINGW32__) && defined(_WIN32_WINNT) && _WIN32_WINNT <= _WIN32_WINNT_WIN7
31+
#define AWSLC_WINDOWS_7_COMPAT
32+
#endif
33+
34+
#if defined(AWSLC_WINDOWS_7_COMPAT) || \
35+
(WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) && \
36+
!WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP))
3137
#include <bcrypt.h>
3238
OPENSSL_MSVC_PRAGMA(comment(lib, "bcrypt.lib"))
33-
#endif // WINAPI_PARTITION_APP && !WINAPI_PARTITION_DESKTOP
39+
#endif // AWSLC_WINDOWS_7_COMPAT || (WINAPI_PARTITION_APP && !WINAPI_PARTITION_DESKTOP)
3440

3541
OPENSSL_MSVC_PRAGMA(warning(pop))
3642

37-
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) && \
38-
!WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
43+
#if defined(AWSLC_WINDOWS_7_COMPAT) || \
44+
(WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) && \
45+
!WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP))
3946

4047
void CRYPTO_sysrand(uint8_t *out, size_t requested) {
4148
while (requested > 0) {
@@ -83,5 +90,5 @@ void CRYPTO_sysrand(uint8_t *out, size_t requested) {
8390
}
8491
}
8592

86-
#endif // WINAPI_PARTITION_APP && !WINAPI_PARTITION_DESKTOP
93+
#endif // AWSLC_WINDOWS_7_COMPAT || (WINAPI_PARTITION_APP && !WINAPI_PARTITION_DESKTOP)
8794
#endif // OPENSSL_RAND_WINDOWS

0 commit comments

Comments
 (0)