/* * 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 #include /* * 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); }