Format random_seed.c with clang-format, with key asm sections excluded.

This commit is contained in:
Eric Haszlakiewicz
2020-04-06 01:52:28 +00:00
parent 9a494081cb
commit 9acc4e9d71

View File

@@ -9,14 +9,13 @@
* *
*/ */
#include "random_seed.h"
#include "config.h"
#include "strerror_override.h" #include "strerror_override.h"
#include <stdio.h> #include <stdio.h>
#include "config.h"
#include "random_seed.h"
#define DEBUG_SEED(s) #define DEBUG_SEED(s)
#if defined ENABLE_RDRAND #if defined ENABLE_RDRAND
/* cpuid */ /* cpuid */
@@ -26,6 +25,7 @@
static void do_cpuid(int regs[], int h) static void do_cpuid(int regs[], int h)
{ {
/* clang-format off */
__asm__ __volatile__( __asm__ __volatile__(
#if defined __x86_64__ #if defined __x86_64__
"pushq %%rbx;\n" "pushq %%rbx;\n"
@@ -40,6 +40,7 @@ static void do_cpuid(int regs[], int h)
#endif #endif
: "=a"(regs[0]), [ebx] "=r"(regs[1]), "=c"(regs[2]), "=d"(regs[3]) : "=a"(regs[0]), [ebx] "=r"(regs[1]), "=c"(regs[2]), "=d"(regs[3])
: "a"(h)); : "a"(h));
/* clang-format on */
} }
#elif defined _MSC_VER #elif defined _MSC_VER
@@ -74,11 +75,13 @@ static int get_rdrand_seed(void)
DEBUG_SEED("get_rdrand_seed"); DEBUG_SEED("get_rdrand_seed");
int _eax; int _eax;
// rdrand eax // rdrand eax
/* clang-format off */
__asm__ __volatile__("1: .byte 0x0F\n" __asm__ __volatile__("1: .byte 0x0F\n"
" .byte 0xC7\n" " .byte 0xC7\n"
" .byte 0xF0\n" " .byte 0xF0\n"
" jnc 1b;\n" " jnc 1b;\n"
: "=a" (_eax)); : "=a" (_eax));
/* clang-format on */
return _eax; return _eax;
} }
@@ -95,7 +98,8 @@ static int get_rdrand_seed(void)
{ {
DEBUG_SEED("get_rdrand_seed"); DEBUG_SEED("get_rdrand_seed");
int r; int r;
while (_rdrand32_step(&r) == 0); while (_rdrand32_step(&r) == 0)
;
return r; return r;
} }
@@ -104,6 +108,7 @@ static int get_rdrand_seed(void)
/* get_rdrand_seed - Visual Studio 2010 and below - x86 only */ /* get_rdrand_seed - Visual Studio 2010 and below - x86 only */
/* clang-format off */
static int get_rdrand_seed(void) static int get_rdrand_seed(void)
{ {
DEBUG_SEED("get_rdrand_seed"); DEBUG_SEED("get_rdrand_seed");
@@ -115,21 +120,21 @@ retry:
__asm mov _eax, eax __asm mov _eax, eax
return _eax; return _eax;
} }
/* clang-format on */
#endif #endif
#endif #endif
#endif /* defined ENABLE_RDRAND */ #endif /* defined ENABLE_RDRAND */
/* has_dev_urandom */ /* has_dev_urandom */
#if defined (__APPLE__) || defined(__unix__) || defined(__linux__) #if defined(__APPLE__) || defined(__unix__) || defined(__linux__)
#include <string.h>
#include <fcntl.h> #include <fcntl.h>
#include <string.h>
#if HAVE_UNISTD_H #if HAVE_UNISTD_H
# include <unistd.h> #include <unistd.h>
#endif /* HAVE_UNISTD_H */ #endif /* HAVE_UNISTD_H */
#include <stdlib.h> #include <stdlib.h>
#include <sys/stat.h> #include <sys/stat.h>
@@ -141,13 +146,13 @@ static const char *dev_random_file = "/dev/urandom";
static int has_dev_urandom(void) static int has_dev_urandom(void)
{ {
struct stat buf; struct stat buf;
if (stat(dev_random_file, &buf)) { if (stat(dev_random_file, &buf))
{
return 0; return 0;
} }
return ((buf.st_mode & S_IFCHR) != 0); return ((buf.st_mode & S_IFCHR) != 0);
} }
/* get_dev_random_seed */ /* get_dev_random_seed */
static int get_dev_random_seed(void) static int get_dev_random_seed(void)
@@ -155,14 +160,16 @@ static int get_dev_random_seed(void)
DEBUG_SEED("get_dev_random_seed"); DEBUG_SEED("get_dev_random_seed");
int fd = open(dev_random_file, O_RDONLY); int fd = open(dev_random_file, O_RDONLY);
if (fd < 0) { if (fd < 0)
{
fprintf(stderr, "error opening %s: %s", dev_random_file, strerror(errno)); fprintf(stderr, "error opening %s: %s", dev_random_file, strerror(errno));
exit(1); exit(1);
} }
int r; int r;
ssize_t nread = read(fd, &r, sizeof(r)); ssize_t nread = read(fd, &r, sizeof(r));
if (nread != sizeof(r)) { if (nread != sizeof(r))
{
fprintf(stderr, "error short read %s: %s", dev_random_file, strerror(errno)); fprintf(stderr, "error short read %s: %s", dev_random_file, strerror(errno));
exit(1); exit(1);
} }
@@ -173,15 +180,14 @@ static int get_dev_random_seed(void)
#endif #endif
/* get_cryptgenrandom_seed */ /* get_cryptgenrandom_seed */
#ifdef WIN32 #ifdef WIN32
#define HAVE_CRYPTGENRANDOM 1 #define HAVE_CRYPTGENRANDOM 1
#include <windows.h>
#include <wincrypt.h> #include <wincrypt.h>
#include <windows.h>
#ifndef __GNUC__ #ifndef __GNUC__
#pragma comment(lib, "advapi32.lib") #pragma comment(lib, "advapi32.lib")
#endif #endif
@@ -193,12 +199,15 @@ static int get_cryptgenrandom_seed(void)
DEBUG_SEED("get_cryptgenrandom_seed"); DEBUG_SEED("get_cryptgenrandom_seed");
if (!CryptAcquireContextW(&hProvider, 0, 0, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT | CRYPT_SILENT)) { if (!CryptAcquireContextW(&hProvider, 0, 0, PROV_RSA_FULL,
CRYPT_VERIFYCONTEXT | CRYPT_SILENT))
{
fprintf(stderr, "error CryptAcquireContextW"); fprintf(stderr, "error CryptAcquireContextW");
exit(1); exit(1);
} }
if (!CryptGenRandom(hProvider, sizeof(r), (BYTE*)&r)) { if (!CryptGenRandom(hProvider, sizeof(r), (BYTE *)&r))
{
fprintf(stderr, "error CryptGenRandom"); fprintf(stderr, "error CryptGenRandom");
exit(1); exit(1);
} }
@@ -210,7 +219,6 @@ static int get_cryptgenrandom_seed(void)
#endif #endif
/* get_time_seed */ /* get_time_seed */
#include <time.h> #include <time.h>
@@ -222,16 +230,17 @@ static int get_time_seed(void)
return (int)time(NULL) * 433494437; return (int)time(NULL) * 433494437;
} }
/* json_c_get_random_seed */ /* json_c_get_random_seed */
int json_c_get_random_seed(void) int json_c_get_random_seed(void)
{ {
#if defined HAVE_RDRAND && HAVE_RDRAND #if defined HAVE_RDRAND && HAVE_RDRAND
if (has_rdrand()) return get_rdrand_seed(); if (has_rdrand())
return get_rdrand_seed();
#endif #endif
#if defined HAVE_DEV_RANDOM && HAVE_DEV_RANDOM #if defined HAVE_DEV_RANDOM && HAVE_DEV_RANDOM
if (has_dev_urandom()) return get_dev_random_seed(); if (has_dev_urandom())
return get_dev_random_seed();
#endif #endif
#if defined HAVE_CRYPTGENRANDOM && HAVE_CRYPTGENRANDOM #if defined HAVE_CRYPTGENRANDOM && HAVE_CRYPTGENRANDOM
return get_cryptgenrandom_seed(); return get_cryptgenrandom_seed();