提交 b87dda75 编写于 作者: M Michal Privoznik

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: NMichal Privoznik <mprivozn@redhat.com>
上级 8981c750
......@@ -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;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册