12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- /*
- * Copyright (c) 2009 Joshua Oreman <oremanj@rwcr.net>.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
- FILE_LICENCE ( GPL2_OR_LATER );
-
- /** @file
- *
- * Cryptographically strong random number generator
- *
- * Currently the cryptographic part is not implemented, and this just
- * uses random().
- */
-
- #include <gpxe/crypto.h>
- #include <stdlib.h>
-
- /**
- * Get cryptographically strong random bytes
- *
- * @v buf Buffer in which to store random bytes
- * @v len Number of random bytes to generate
- *
- * @b WARNING: This function is currently underimplemented, and does
- * not give numbers any stronger than random()!
- */
- void get_random_bytes ( void *buf, size_t len )
- {
- u8 *bufp = buf;
-
- /*
- * Somewhat arbitrarily, choose the 0x00FF0000-masked byte
- * returned by random() as having good entropy. PRNGs often
- * don't provide good entropy in lower bits, and the top byte
- * might show a pattern because of sign issues.
- */
-
- while ( len-- ) {
- *bufp++ = ( random() >> 16 ) & 0xFF;
- }
- }
|