Apache Portable Runtime
Data Structures | Typedefs | Functions

Data Structures

struct  apr_crypto_hash_t
 

Typedefs

typedef struct apr_crypto_hash_t apr_crypto_hash_t
 
typedef void apr_crypto_hash_init_t(apr_crypto_hash_t *hash)
 
typedef void apr_crypto_hash_add_t(apr_crypto_hash_t *hash, const void *data, apr_size_t bytes)
 
typedef void apr_crypto_hash_finish_t(apr_crypto_hash_t *hash, unsigned char *result)
 
typedef struct apr_random_t apr_random_t
 

Functions

apr_status_t apr_generate_random_bytes (unsigned char *buf, apr_size_t length)
 
apr_crypto_hash_tapr_crypto_sha256_new (apr_pool_t *p)
 
void apr_random_init (apr_random_t *g, apr_pool_t *p, apr_crypto_hash_t *pool_hash, apr_crypto_hash_t *key_hash, apr_crypto_hash_t *prng_hash)
 
apr_random_tapr_random_standard_new (apr_pool_t *p)
 
void apr_random_add_entropy (apr_random_t *g, const void *entropy_, apr_size_t bytes)
 
apr_status_t apr_random_insecure_bytes (apr_random_t *g, void *random, apr_size_t bytes)
 
apr_status_t apr_random_secure_bytes (apr_random_t *g, void *random, apr_size_t bytes)
 
void apr_random_barrier (apr_random_t *g)
 
apr_status_t apr_random_secure_ready (apr_random_t *r)
 
apr_status_t apr_random_insecure_ready (apr_random_t *r)
 
void apr_random_after_fork (apr_proc_t *proc)
 

Detailed Description

Typedef Documentation

typedef struct apr_random_t apr_random_t

Opaque PRNG structure.

Function Documentation

apr_crypto_hash_t* apr_crypto_sha256_new ( apr_pool_t p)

Allocate and initialize the SHA-256 context

Parameters
pThe pool to allocate from
apr_status_t apr_generate_random_bytes ( unsigned char *  buf,
apr_size_t  length 
)

Generate random bytes.

Parameters
bufBuffer to fill with random bytes
lengthLength of buffer in bytes
void apr_random_add_entropy ( apr_random_t g,
const void *  entropy_,
apr_size_t  bytes 
)

Mix the randomness pools.

Parameters
gThe PRNG state
entropy_Entropy buffer
bytesLength of entropy_ in bytes
void apr_random_after_fork ( apr_proc_t proc)

Mix the randomness pools after forking.

Parameters
procThe resulting process handle from apr_proc_fork()
Remarks
Call this in the child after forking to mix the randomness pools. Note that its generally a bad idea to fork a process with a real PRNG in it - better to have the PRNG externally and get the randomness from there. However, if you really must do it, then you should supply all your entropy to all the PRNGs - don't worry, they won't produce the same output.
Note that apr_proc_fork() calls this for you, so only weird applications need ever call it themselves.
void apr_random_barrier ( apr_random_t g)

Ensures that E bits of conditional entropy are mixed into the PRNG before any further randomness is extracted.

Parameters
gThe RNG state
void apr_random_init ( apr_random_t g,
apr_pool_t p,
apr_crypto_hash_t pool_hash,
apr_crypto_hash_t key_hash,
apr_crypto_hash_t prng_hash 
)

Initialize a PRNG state

Parameters
gThe PRNG state
pThe pool to allocate from
pool_hashPool hash functions
key_hashKey hash functions
prng_hashPRNG hash functions
apr_status_t apr_random_insecure_bytes ( apr_random_t g,
void *  random,
apr_size_t  bytes 
)

Generate cryptographically insecure random bytes.

Parameters
gThe RNG state
randomBuffer to fill with random bytes
bytesLength of buffer in bytes
apr_status_t apr_random_insecure_ready ( apr_random_t r)

Return APR_SUCCESS if the PRNG has been seeded with enough data, APR_ENOTENOUGHENTROPY otherwise.

Parameters
rThe PRNG state
apr_status_t apr_random_secure_bytes ( apr_random_t g,
void *  random,
apr_size_t  bytes 
)

Generate cryptographically secure random bytes.

Parameters
gThe RNG state
randomBuffer to fill with random bytes
bytesLength of buffer in bytes
apr_status_t apr_random_secure_ready ( apr_random_t r)

Return APR_SUCCESS if the cryptographic PRNG has been seeded with enough data, APR_ENOTENOUGHENTROPY otherwise.

Parameters
rThe RNG state
apr_random_t* apr_random_standard_new ( apr_pool_t p)

Allocate and initialize (apr_crypto_sha256_new) a new PRNG state.

Parameters
pThe pool to allocate from