aboutsummaryrefslogtreecommitdiff
path: root/crypto/init.c
diff options
context:
space:
mode:
authorGeert Martin Ijewski <gm.ijewski@web.de>2017-04-26 00:15:01 +0200
committerDaniel P. Berrange <berrange@redhat.com>2017-05-09 14:41:47 +0100
commita37278169d0d7d33270c6817f4a2e4f7345e1098 (patch)
treee3f7866ae58d6dad3b84240cca0fe7852124e04b /crypto/init.c
parente4a3507e86a1ef1453d603031bca27d5ac4cff3c (diff)
crypto: qcrypto_random_bytes() now works on windows w/o any other crypto libs
If no crypto library is included in the build, QEMU uses qcrypto_random_bytes() to generate random data. That function tried to open /dev/urandom or /dev/random and if opening both files failed it errored out. Those files obviously do not exist on windows, so there the code uses CryptGenRandom(). Furthermore there was some refactoring and a new function qcrypto_random_init() was introduced. If a proper crypto library (gnutls or libgcrypt) is included in the build, this function does nothing. If neither is included it initializes the (platform specific) handles that are used by qcrypto_random_bytes(). Either: * a handle to /dev/urandom | /dev/random on unix like systems * a handle to a cryptographic service provider on windows Signed-off-by: Geert Martin Ijewski <gm.ijewski@web.de> Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Diffstat (limited to 'crypto/init.c')
-rw-r--r--crypto/init.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/crypto/init.c b/crypto/init.c
index f65207e57d..f131c42306 100644
--- a/crypto/init.c
+++ b/crypto/init.c
@@ -32,6 +32,8 @@
#include <gcrypt.h>
#endif
+#include "crypto/random.h"
+
/* #define DEBUG_GNUTLS */
/*
@@ -146,5 +148,9 @@ int qcrypto_init(Error **errp)
gcry_control(GCRYCTL_INITIALIZATION_FINISHED, 0);
#endif
+ if (qcrypto_random_init(errp) < 0) {
+ return -1;
+ }
+
return 0;
}