mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-03 11:35:19 +00:00
virRandomBytes: Use gnutls_rnd whenever possible
While /dev/urandom is not terrible source of random data gnutls_rnd is better. Prefer that one. Also, since nearly every platform we build on already has gnutls (if not all of them) this is going to be used by default. Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
parent
8981c750b1
commit
b87dda7549
@ -330,23 +330,5 @@ int
|
||||
virCryptoGenerateRandom(unsigned char *buf,
|
||||
size_t buflen)
|
||||
{
|
||||
#if WITH_GNUTLS
|
||||
int rv;
|
||||
|
||||
/* Generate the byte stream using gnutls_rnd() if possible */
|
||||
if ((rv = gnutls_rnd(GNUTLS_RND_RANDOM, buf, buflen)) < 0) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("failed to generate byte stream: %s"),
|
||||
gnutls_strerror(rv));
|
||||
return -1;
|
||||
}
|
||||
#else
|
||||
/* If we don't have gnutls_rnd(), we will generate a less cryptographically
|
||||
* strong master buf from /dev/urandom.
|
||||
*/
|
||||
if (virRandomBytes(buf, buflen) < 0)
|
||||
return -1;
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
return virRandomBytes(buf, buflen);
|
||||
}
|
||||
|
@ -29,6 +29,10 @@
|
||||
#include <fcntl.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
#ifdef WITH_GNUTLS
|
||||
# include <gnutls/gnutls.h>
|
||||
# include <gnutls/crypto.h>
|
||||
#endif
|
||||
|
||||
#include "virrandom.h"
|
||||
#include "virthread.h"
|
||||
@ -175,6 +179,19 @@ int
|
||||
virRandomBytes(unsigned char *buf,
|
||||
size_t buflen)
|
||||
{
|
||||
#if WITH_GNUTLS
|
||||
int rv;
|
||||
|
||||
/* Generate the byte stream using gnutls_rnd() if possible */
|
||||
if ((rv = gnutls_rnd(GNUTLS_RND_RANDOM, buf, buflen)) < 0) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("failed to generate byte stream: %s"),
|
||||
gnutls_strerror(rv));
|
||||
return -1;
|
||||
}
|
||||
|
||||
#else /* !WITH_GNUTLS */
|
||||
|
||||
int fd;
|
||||
|
||||
if ((fd = open(RANDOM_SOURCE, O_RDONLY)) < 0) {
|
||||
@ -200,6 +217,7 @@ virRandomBytes(unsigned char *buf,
|
||||
}
|
||||
|
||||
VIR_FORCE_CLOSE(fd);
|
||||
#endif /* !WITH_GNUTLS */
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user