rand.c

/*
 * example of a randoim number generator
 * the data comes from a random source (hardware)
 *
 * Matt Bishop, ECS 36A
 * -- May 22, 2024 	original program
 * -- May 28, 2024	modified to show *bytes* and add some checking
 */
#include <stdio.h>
#include <sys/random.h>

/*
 * and we're off!
 */
int main(void)
{
	int i;			/* counter in a for loop */
	int rv;			/* number of random bytes generated */
	unsigned int rn;	/* holds randomly generated *BITS* */

	/*
	 * print the first 20 pseudo-random numbers
	 */

	printf("       number   byte 1\tbyte 2\tbyte 3\tbyte 4\n");
	for(i = 0; i < 20; i++){
		/*
		 * generate some random bytes
		 * if there aren't enough random bytes in the source,
		 * just return the number of bytes put in
		 */
		rn = 0;
		if ((rv = getrandom(&rn, sizeof(unsigned int), GRND_NONBLOCK)) == 1){
			perror("getrandom");
			continue;
		}
		/*
		 * print it out as both a hex number and as bytes
		 */
		printf("%3d. 0x%08x ", i+1, rn);
		while(rv-- > 0)
			printf(" 0x%02x\t", (rn>>(rv*8))&0xff);
		putchar('\n');
	}
	
	/* au revoir! */
	return(0);
}
	


UC Davis sigil
Matt Bishop
Office: 2209 Watershed Sciences
Phone: +1 (530) 752-8060
Email: [email protected]
ECS 36A, Programming & Problem Solving
Version of April 2, 2024 at 12:13PM

You can get the raw source code here.

Valid HTML 4.01 Transitional Built with BBEdit Built on a Macintosh