Add support for reading random data from "bcrypt" on Windows
This fixes #577 Patch inspired by the same, but simplified after reading the docs. Signed-off-by: Steffen Jaeckel <s@jaeckel.eu>
This commit is contained in:
parent
c3a9a04c1b
commit
29d29ca170
@ -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:
|
||||
|
@ -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++;
|
||||
|
@ -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.
|
||||
*/
|
||||
|
@ -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() */
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user