12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- /*
- ---------------------------------------------------------------------------
- Copyright (c) 2002, Dr Brian Gladman < >, Worcester, UK.
- All rights reserved.
- LICENSE TERMS
- The free distribution and use of this software in both source and binary
- form is allowed (with or without changes) provided that:
- 1. distributions of this source code include the above copyright
- notice, this list of conditions and the following disclaimer;
- 2. distributions in binary form include the above copyright
- notice, this list of conditions and the following disclaimer
- in the documentation and/or other associated materials;
- 3. the copyright holder's name is not used to endorse products
- built using this software without specific written permission.
- ALTERNATIVELY, provided that this notice is retained in full, this product
- may be distributed under the terms of the GNU General Public License (GPL),
- in which case the provisions of the GPL apply INSTEAD OF those given above.
- DISCLAIMER
- This software is provided 'as is' with no explicit or implied warranties
- in respect of its properties, including, but not limited to, correctness
- and/or fitness for purpose.
- ---------------------------------------------------------------------------
- Issue Date: 24/01/2003
- This is the header file for an implementation of a random data pool based on
- the use of an external entropy function (inspired by Peter Gutmann's work).
- */
- #ifndef _PRNG_H
- #define _PRNG_H
- #include "sha1.h"
- #define PRNG_POOL_LEN 256 /* minimum random pool size */
- #define PRNG_MIN_MIX 20 /* min initial pool mixing iterations */
- /* ensure that pool length is a multiple of the SHA1 digest size */
- #define PRNG_POOL_SIZE (SHA1_DIGEST_SIZE * (1 + (PRNG_POOL_LEN - 1) / SHA1_DIGEST_SIZE))
- #if defined(__cplusplus)
- extern "C"
- {
- #endif
- /* A function for providing entropy is a parameter in the prng_init() */
- /* call. This function has the following form and returns a maximum */
- /* of 'len' bytes of pseudo random data in the buffer 'buf'. It can */
- /* return less than 'len' bytes but will be repeatedly called for more */
- /* data in this case. */
- typedef int (*prng_entropy_fn)(unsigned char buf[], unsigned int len);
- typedef struct
- { unsigned char rbuf[PRNG_POOL_SIZE]; /* the random pool */
- unsigned char obuf[PRNG_POOL_SIZE]; /* pool output buffer */
- unsigned int pos; /* output buffer position */
- prng_entropy_fn entropy; /* entropy function pointer */
- } prng_ctx;
- /* initialise the random stream generator */
- void prng_init(prng_entropy_fn fun, prng_ctx ctx[1]);
- /* obtain random bytes from the generator */
- void prng_rand(unsigned char data[], unsigned int data_len, prng_ctx ctx[1]);
- /* close the random stream generator */
- void prng_end(prng_ctx ctx[1]);
- #if defined(__cplusplus)
- }
- #endif
- #endif
|