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>
This commit is contained in:
Geert Martin Ijewski
2017-04-26 00:15:01 +02:00
committed by Daniel P. Berrange
parent e4a3507e86
commit a37278169d
5 changed files with 57 additions and 8 deletions

View File

@@ -41,3 +41,6 @@ int qcrypto_random_bytes(uint8_t *buf,
return 0;
}
int qcrypto_random_init(Error **errp G_GNUC_UNUSED) { return 0; }