*/
# define RANDOMNESS_NEEDED 16
+/* How many times to read the TSC as a randomness source. */
+# define TSC_READ_COUNT 4
+
/* Maximum amount of randomness to hold in RAND_BYTES_BUFFER. */
# define MAX_RANDOMNESS_HELD (4 * RANDOMNESS_NEEDED)
*/
typedef struct rand_bytes_buffer_st {
CRYPTO_RWLOCK *lock;
+ unsigned char *buff;
size_t size;
size_t curr;
- unsigned char *buff;
+ int secure;
} RAND_BYTES_BUFFER;
/*
CRYPTO_RWLOCK *lock;
RAND_DRBG *parent;
int nid; /* the underlying algorithm */
+ int fork_count;
unsigned short flags; /* various external flags */
- unsigned short filled;
+ char filled;
+ char secure;
/*
* This is a fixed-size buffer, but we malloc to make it a little
* harder to find; a classic security/performance trade-off.
extern RAND_METHOD rand_meth;
extern RAND_BYTES_BUFFER rand_bytes;
extern RAND_DRBG rand_drbg;
+extern RAND_DRBG priv_drbg;
+
+/* How often we've forked (only incremented in child). */
+extern int rand_fork_count;
/* Hardware-based seeding functions. */
void rand_read_tsc(RAND_poll_fn cb, void *arg);