File: random.c

package info (click to toggle)
vdo 8.3.1.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,536 kB
  • sloc: ansic: 21,023; sh: 349; makefile: 314; perl: 242
file content (28 lines) | stat: -rw-r--r-- 575 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// SPDX-License-Identifier: GPL-2.0-only
/*
 * Copyright 2023 Red Hat
 */

#include <linux/random.h>
#include <linux/types.h>

#include "random.h"

void get_random_bytes(void *buffer, size_t byte_count)
{
	uint64_t rand_num = 0;
	uint64_t rand_mask = 0;
	const uint64_t multiplier = (uint64_t) RAND_MAX + 1;
	u8 *data = buffer;
	size_t i;

	for (i = 0; i < byte_count; i++) {
		if (rand_mask < 0xff) {
			rand_num = rand_num * multiplier + random();
			rand_mask = rand_mask * multiplier + RAND_MAX;
		}
		data[i] = rand_num & 0xff;
		rand_num >>= 8;
		rand_mask >>= 8;
	}
}