From 7f0ea220a3de96081d4b1489a83173556aa49b05 Mon Sep 17 00:00:00 2001 From: nobu Date: Fri, 31 Aug 2018 09:56:24 +0000 Subject: random.c: SecRandomCopyBytes * random.c (fill_random_bytes_syscall): use SecRandomCopyBytes in Security framework on macOS 10.7 or later. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64596 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- random.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'random.c') diff --git a/random.c b/random.c index 0b0038cac8..4add8868fb 100644 --- a/random.c +++ b/random.c @@ -470,6 +470,26 @@ fill_random_bytes_urandom(void *seed, size_t size) #endif #if 0 +#elif defined __APPLE__ && MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_7 +#include + +static int +fill_random_bytes_syscall(void *seed, size_t size, int unused) +{ + int status = SecRandomCopyBytes(kSecRandomDefault, size, seed); + + if (status != errSecSuccess) { +# if 0 + CFStringRef s = SecCopyErrorMessageString(status, NULL); + const char *m = s ? CFStringGetCStringPtr(s, kCFStringEncodingUTF8) : NULL; + fprintf(stderr, "SecRandomCopyBytes failed: %d: %s\n", status, + m ? m : "unknown"); + if (s) CFRelease(s); +# endif + return -1; + } + return 0; +} #elif defined(HAVE_ARC4RANDOM_BUF) static int fill_random_bytes_syscall(void *buf, size_t size, int unused) -- cgit v1.2.3