Wrapper functions added to generate non-zero random bytes
This commit is contained in:
committed by
Martin Willi
parent
392a9b1109
commit
5668a99a12
@@ -1,4 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2012 Tobias Brunner
|
||||
* Copyright (C) 2008 Martin Willi
|
||||
* Hochschule fuer Technik Rapperswil
|
||||
*
|
||||
@@ -20,3 +21,43 @@ ENUM(rng_quality_names, RNG_WEAK, RNG_TRUE,
|
||||
"RNG_STRONG",
|
||||
"RNG_TRUE",
|
||||
);
|
||||
|
||||
/*
|
||||
* Described in header.
|
||||
*/
|
||||
bool rng_get_bytes_not_zero(rng_t *rng, size_t len, u_int8_t *buffer, bool all)
|
||||
{
|
||||
u_int8_t *pos = buffer, *check = buffer + (all ? len : min(1, len));
|
||||
|
||||
if (!rng->get_bytes(rng, len, pos))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
for (; pos < check; pos++)
|
||||
{
|
||||
while (*pos == 0)
|
||||
{
|
||||
if (!rng->get_bytes(rng, 1, pos))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/*
|
||||
* Described in header.
|
||||
*/
|
||||
bool rng_allocate_bytes_not_zero(rng_t *rng, size_t len, chunk_t *chunk,
|
||||
bool all)
|
||||
{
|
||||
*chunk = chunk_alloc(len);
|
||||
if (!rng_get_bytes_not_zero(rng, len, chunk->ptr, all))
|
||||
{
|
||||
chunk_clear(chunk);
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -75,4 +75,31 @@ struct rng_t {
|
||||
void (*destroy) (rng_t *this);
|
||||
};
|
||||
|
||||
/**
|
||||
* Wrapper around rng_t.get_bytes() ensuring that either all bytes or at least
|
||||
* the first byte is not zero.
|
||||
*
|
||||
* @param rng rng_t object
|
||||
* @param len number of bytes to get
|
||||
* @param buffer pointer where the generated bytes will be written
|
||||
* @param all TRUE if all bytes have to be non-zero
|
||||
* @return TRUE if bytes successfully written
|
||||
*/
|
||||
bool rng_get_bytes_not_zero(rng_t *rng, size_t len, u_int8_t *buffer, bool all);
|
||||
|
||||
/**
|
||||
* Wrapper around rng_t.allocate_bytes() ensuring that either all bytes or at
|
||||
* least the first byte is not zero.
|
||||
*
|
||||
* @param rng rng_t object
|
||||
* @param len number of bytes to get
|
||||
* @param buffer pointer where the generated bytes will be written
|
||||
* @param all TRUE if all bytes have to be non-zero
|
||||
* @return TRUE if bytes successfully written
|
||||
*/
|
||||
bool rng_allocate_bytes_not_zero(rng_t *rng, size_t len, chunk_t *chunk,
|
||||
bool all);
|
||||
|
||||
|
||||
|
||||
#endif /** RNG_H_ @}*/
|
||||
|
||||
Reference in New Issue
Block a user