mirror of
https://github.com/HamletDuFromage/sigpatches-updater.git
synced 2024-11-29 23:32:29 +00:00
82 lines
3 KiB
C
82 lines
3 KiB
C
/*
|
|
---------------------------------------------------------------------------
|
|
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
|