1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- /* Random kit 1.3 */
- /*
- * Copyright (c) 2003-2005, Jean-Sebastien Roy ([email protected])
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
- * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
- /*
- * Typical use:
- *
- * {
- * rk_state state;
- * unsigned long seed = 1, random_value;
- *
- * rk_seed(seed, &state); // Initialize the RNG
- * ...
- * random_value = rk_random(&state); // Generate random values in [0..RK_MAX]
- * }
- *
- * Instead of rk_seed, you can use rk_randomseed which will get a random seed
- * from /dev/urandom (or the clock, if /dev/urandom is unavailable):
- *
- * {
- * rk_state state;
- * unsigned long random_value;
- *
- * rk_randomseed(&state); // Initialize the RNG with a random seed
- * ...
- * random_value = rk_random(&state); // Generate random values in [0..RK_MAX]
- * }
- */
- /*
- * Useful macro:
- * RK_DEV_RANDOM: the device used for random seeding.
- * defaults to "/dev/urandom"
- */
- #pragma once
- #include <stddef.h>
- #define RK_STATE_LEN 624
- typedef struct rk_state_
- {
- unsigned long key[RK_STATE_LEN];
- int pos;
- }
- rk_state;
- /* Maximum generated random value */
- #define RK_MAX 0xFFFFFFFFUL
- #ifdef __cplusplus
- extern "C" {
- #endif
- /*
- * Initialize the RNG state using the given seed.
- */
- extern void rk_seed(unsigned long seed, rk_state *state);
- /*
- * Returns a random unsigned long between 0 and RK_MAX inclusive
- */
- extern unsigned long rk_random(rk_state *state);
- /*
- * Returns a random unsigned long between 0 and max inclusive.
- */
- extern unsigned long rk_interval(unsigned long max, rk_state *state);
- #ifdef __cplusplus
- }
- #endif
|