/** * @file randomizer.h * * @brief Interface of randomizer_t. * */ /* * Copyright (C) 2005 Jan Hutter, Martin Willi * Hochschule fuer Technik Rapperswil * * 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 (at your * option) any later version. See . * * 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. */ #ifndef RANDOMIZER_H_ #define RANDOMIZER_H_ #include /** * Default random device used when no device is given. */ #define DEFAULT_RANDOM_DEVICE "/dev/random" /** * Pseudo random device used when no device is given. */ #define DEFAULT_PSEUDO_RANDOM_DEVICE "/dev/urandom" typedef struct randomizer_t randomizer_t; /** * @brief Class used to get random and pseudo random values. * * This class is thread save as file system read calls are thread save. * * @b Constructors: * - randomizer_create() * - randomizer_create_on_devices() * * @ingroup utils */ struct randomizer_t { /** * @brief Reads a specific number of bytes from random device. * * @param this calling randomizer_t object * @param bytes number of bytes to read * @param[out] buffer pointer to buffer where to write the data in. * Size of buffer has to be at least bytes. */ void (*get_random_bytes) (randomizer_t *this,size_t bytes, u_int8_t *buffer); /** * @brief Allocates space and writes in random bytes. * * @param this calling randomizer_t object * @param bytes number of bytes to allocate * @param[out] chunk chunk which will hold the allocated random bytes */ void (*allocate_random_bytes) (randomizer_t *this, size_t bytes, chunk_t *chunk); /** * @brief Reads a specific number of bytes from pseudo random device. * * @param this calling randomizer_t object * @param bytes number of bytes to read * @param[out] buffer pointer to buffer where to write the data in. * size of buffer has to be at least bytes. */ void (*get_pseudo_random_bytes) (randomizer_t *this,size_t bytes, u_int8_t *buffer); /** * @brief Allocates space and writes in pseudo random bytes. * * @param this calling randomizer_t object * @param bytes number of bytes to allocate * @param[out] chunk chunk which will hold the allocated random bytes */ void (*allocate_pseudo_random_bytes) (randomizer_t *this, size_t bytes, chunk_t *chunk); /** * @brief Destroys a randomizer_t object. * * @param this randomizer_t object to destroy */ void (*destroy) (randomizer_t *this); }; /** * @brief Creates a randomizer_t object * * @return * - created randomizer_t, or * - NULL if failed * * @ingroup utils */ randomizer_t *randomizer_create(); /** * @brief Creates an randomizer_t object with specific random device names. * * @param random_dev_name device name for random values, etc /dev/random * @param prandom_dev_name device name for pseudo random values, etc /dev/urandom * @return randomizer_t object * * @ingroup utils */ randomizer_t *randomizer_create_on_devices(char * random_dev_name,char * prandom_dev_name); #endif /*RANDOMIZER_H_*/