diff options
Diffstat (limited to 'source/core/StarSecureRandom_windows.cpp')
-rw-r--r-- | source/core/StarSecureRandom_windows.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/source/core/StarSecureRandom_windows.cpp b/source/core/StarSecureRandom_windows.cpp new file mode 100644 index 0000000..e118991 --- /dev/null +++ b/source/core/StarSecureRandom_windows.cpp @@ -0,0 +1,21 @@ +#include "StarSecureRandom.hpp" +#include <windows.h> +#include <wincrypt.h> + +namespace Star { + +ByteArray secureRandomBytes(size_t size) { + HCRYPTPROV context = 0; + auto res = ByteArray(size, '\0'); + + CryptAcquireContext(&context, 0, MS_DEF_PROV, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT); + auto success = CryptGenRandom(context, size, (PBYTE)res.ptr()); + CryptReleaseContext(context, 0); + + if (!success) + throw StarException("Could not read random bytes from source."); + + return res; +} + +} |