diff --git a/CMakeLists.txt b/CMakeLists.txt index f8f6ad25..eeb85775 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -94,6 +94,16 @@ if(CMAKE_SYSTEM_NAME MATCHES "CYGWIN") list(APPEND LTC_C_FLAGS -no-undefined) endif() +if(MSVC) + cmake_push_check_state() + check_symbol_exists(BCryptGenRandom bcrypt.h BCRYPT_AVAILABLE) + cmake_pop_check_state() + if (BCRYPT_AVAILABLE) + target_link_libraries(${PROJECT_NAME} PRIVATE Bcrypt) + list(APPEND LTC_C_FLAGS -DLTC_WIN32_BCRYPT) + endif() +endif() + # If the user set the environment variables at generate-time, append them # in order to allow overriding our defaults. # ${LTC_CFLAGS} means the user passed it via sth like: diff --git a/helper.pl b/helper.pl index d91ab167..7262f068 100755 --- a/helper.pl +++ b/helper.pl @@ -71,6 +71,7 @@ sub check_source { my $n = $1; push @{$troubles->{invalid_macro_name}}, "$lineno($n)" unless ($file eq 'src/headers/tomcrypt_cfg.h' && $n eq '__has_builtin') || + ($file eq 'src/headers/tomcrypt_cfg.h' && $n eq '_WIN32_WINNT') || ($file eq 'src/prngs/rng_get_bytes.c' && $n eq '_WIN32_WINNT'); } $lineno++; diff --git a/src/headers/tomcrypt_cfg.h b/src/headers/tomcrypt_cfg.h index 2a024aa4..87c1bf09 100644 --- a/src/headers/tomcrypt_cfg.h +++ b/src/headers/tomcrypt_cfg.h @@ -300,6 +300,21 @@ typedef unsigned long ltc_mp_digit; #define LTC_ALIGN(n) #endif +/* Choose Windows Vista as minimum Version if we're compiling with at least VS2019 + * This is done in order to test the bcrypt RNG and can still be overridden by the user. */ +#if defined(_MSC_VER) && _MSC_VER >= 1920 +# ifndef _WIN32_WINNT +# define _WIN32_WINNT 0x0600 +# endif +# ifndef WINVER +# define WINVER 0x0600 +# endif +#endif + +#if defined(_MSC_VER) && defined(_WIN32_WINNT) && _WIN32_WINNT >= 0x0600 && !defined(LTC_WIN32_BCRYPT) +# define LTC_WIN32_BCRYPT +#endif + /* Define `LTC_NO_NULL_TERMINATION_CHECK` in the user code * before including `tomcrypt.h` to disable this functionality. */ diff --git a/src/headers/tomcrypt_custom.h b/src/headers/tomcrypt_custom.h index e533c8ad..4f3977ac 100644 --- a/src/headers/tomcrypt_custom.h +++ b/src/headers/tomcrypt_custom.h @@ -333,11 +333,14 @@ /* Greg's SOBER128 stream cipher based PRNG */ #define LTC_SOBER128 +#if !defined(_WIN32) && !defined(_WIN32_WCE) /* the *nix style /dev/random device */ #define LTC_DEVRANDOM /* try /dev/urandom before trying /dev/random * are you sure you want to disable this? http://www.2uo.de/myths-about-urandom/ */ #define LTC_TRY_URANDOM_FIRST +#endif /* not Windows */ + /* rng_get_bytes() */ #define LTC_RNG_GET_BYTES /* rng_make_prng() */ diff --git a/src/misc/crypt/crypt.c b/src/misc/crypt/crypt.c index 460cd59d..f91ae06f 100644 --- a/src/misc/crypt/crypt.c +++ b/src/misc/crypt/crypt.c @@ -324,6 +324,9 @@ const char *crypt_build_settings = #if defined(LTC_SOBER128) " SOBER128\n" #endif +#if defined(LTC_WIN32_BCRYPT) + " WIN32_BCRYPT\n" +#endif "\nPK Crypto:\n" #if defined(LTC_MRSA)