/*
 * Copyright (c) 2024 Nordic Semiconductor ASA
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Bottom/Linux side of the pseudo-random entropy generator for
 * ARCH_POSIX architecture
 */

#undef _XOPEN_SOURCE
#define _XOPEN_SOURCE 700

#include <stdbool.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/random.h>
#include "nsi_tracing.h"

void entropy_native_seed(unsigned int seed, bool seed_random)
{
	if (seed_random == false) {
		srandom(seed);
	} else {
		unsigned int buf;
		int err = getrandom(&buf, sizeof(buf), 0);

		if (err != sizeof(buf)) {
			nsi_print_error_and_exit("Could not get random number (%i, %s)\n",
						 err, strerror(errno));
		}
		srandom(buf);

		/* Let's print the seed so users can still reproduce the run if they need to */
		nsi_print_trace("Random generator seeded with 0x%X\n", buf);
	}
}
