Strophe 0.14
XMPP client library
rand.c File Reference

Pseudo-random number generator. More...

Data Structures

struct  Hash_DRBG_CTX
struct  xmpp_rand_t

Macros

#define outlen   SHA1_DIGEST_SIZE
#define seedlen   (440 / 8)
#define reseed_interval   0x7fffffff
#define GENERATE_MAX   (outlen * 10)
#define ENTROPY_MAX   128
#define NONCE_MAX   8
#define RESEED_NEEDED   (-1)
#define round_up(x, y)
#define div_round_up(x, y)
#define ENTROPY_ACCUMULATE(ptr, last, type, arg)

Functions

static void arr_add (uint8_t *arr1, size_t arr1_len, uint8_t *arr2, size_t arr2_len)
static void store_be32 (uint32_t val, uint8_t be[4])
static void Hash_df (uint8_t *input_string, size_t input_string_len, uint8_t *output_string, size_t no_of_bytes_to_return)
static void Hash_DRBG_Instantiate (Hash_DRBG_CTX *ctx, uint8_t *entropy_input, size_t entropy_input_len, uint8_t *nonce, size_t nonce_len)
static void Hash_DRBG_Reseed (Hash_DRBG_CTX *ctx, uint8_t *entropy_input, size_t entropy_input_len)
static void Hashgen (uint8_t *V, uint8_t *output, size_t requested_number_of_bytes)
static int Hash_DRBG_Generate (Hash_DRBG_CTX *ctx, uint8_t *output, size_t requested_number_of_bytes)
static void xmpp_rand_reseed (xmpp_rand_t *rand)
xmpp_rand_t * xmpp_rand_new (xmpp_ctx_t *ctx)
 Create new xmpp_rand_t object.
void xmpp_rand_free (xmpp_ctx_t *ctx, xmpp_rand_t *rand)
 Destroy an xmpp_rand_t object.
void xmpp_rand_bytes (xmpp_rand_t *rand, unsigned char *output, size_t len)
 Generate random bytes.
int xmpp_rand (xmpp_rand_t *rand)
 Generate random integer.
static void rand_byte2hex (unsigned char byte, char *hex)
void xmpp_rand_nonce (xmpp_rand_t *rand, char *output, size_t len)
 Generate a nonce that is printable randomized string.

Detailed Description

Pseudo-random number generator.

Implemented Hash_DRBG mechanism according to NIST SP 800-90A. Hash function is SHA1.

Macro Definition Documentation

◆ outlen

#define outlen   SHA1_DIGEST_SIZE

◆ seedlen

#define seedlen   (440 / 8)

◆ reseed_interval

#define reseed_interval   0x7fffffff

◆ GENERATE_MAX

#define GENERATE_MAX   (outlen * 10)

◆ ENTROPY_MAX

#define ENTROPY_MAX   128

◆ NONCE_MAX

#define NONCE_MAX   8

◆ RESEED_NEEDED

#define RESEED_NEEDED   (-1)

◆ round_up

#define round_up ( x,
y )
Value:
(((x) + (y)-1) / (y) * (y))

◆ div_round_up

#define div_round_up ( x,
y )
Value:
(((x) + (y)-1) / (y))

◆ ENTROPY_ACCUMULATE

#define ENTROPY_ACCUMULATE ( ptr,
last,
type,
arg )
Value:
do { \
type __arg = (type)(arg); \
if ((char *)ptr + sizeof(__arg) < (char *)last) { \
*(type *)ptr = __arg; \
ptr = (void *)((char *)ptr + sizeof(__arg)); \
} \
} while (0)

Function Documentation

◆ arr_add()

void arr_add ( uint8_t * arr1,
size_t arr1_len,
uint8_t * arr2,
size_t arr2_len )
static

◆ store_be32()

void store_be32 ( uint32_t val,
uint8_t be[4] )
static

◆ Hash_df()

void Hash_df ( uint8_t * input_string,
size_t input_string_len,
uint8_t * output_string,
size_t no_of_bytes_to_return )
static

◆ Hash_DRBG_Instantiate()

void Hash_DRBG_Instantiate ( Hash_DRBG_CTX * ctx,
uint8_t * entropy_input,
size_t entropy_input_len,
uint8_t * nonce,
size_t nonce_len )
static

◆ Hash_DRBG_Reseed()

void Hash_DRBG_Reseed ( Hash_DRBG_CTX * ctx,
uint8_t * entropy_input,
size_t entropy_input_len )
static

◆ Hashgen()

void Hashgen ( uint8_t * V,
uint8_t * output,
size_t requested_number_of_bytes )
static

◆ Hash_DRBG_Generate()

int Hash_DRBG_Generate ( Hash_DRBG_CTX * ctx,
uint8_t * output,
size_t requested_number_of_bytes )
static

◆ xmpp_rand_reseed()

void xmpp_rand_reseed ( xmpp_rand_t * rand)
static

◆ rand_byte2hex()

void rand_byte2hex ( unsigned char byte,
char * hex )
static