1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

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
This commit is contained in:
nobu 2018-08-31 09:56:24 +00:00
parent 070d731bdd
commit 68f9d7b444
2 changed files with 28 additions and 0 deletions

View file

@ -3309,6 +3309,14 @@ AS_CASE(["$target_os"],
],
[darwin*], [
RUBY_APPEND_OPTION(CFLAGS, -pipe)
AC_COMPILE_IFELSE([
AC_LANG_BOOL_COMPILE_TRY([@%:@include <AvailabilityMacros.h>],
[MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_7])],
[dnl
RUBY_APPEND_OPTION(XLDFLAGS, [-framework Security])
RUBY_APPEND_OPTION(LIBRUBYARG_STATIC, [-framework Security])
]dnl
)
RUBY_APPEND_OPTION(XLDFLAGS, [-framework Foundation])
RUBY_APPEND_OPTION(LIBRUBYARG_STATIC, [-framework Foundation])
],

View file

@ -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 <Security/Security.h>
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)