Wrapper functions added to generate non-zero random bytes

This commit is contained in:
Tobias Brunner
2012-07-16 14:53:35 +02:00
committed by Martin Willi
parent 392a9b1109
commit 5668a99a12
2 changed files with 68 additions and 0 deletions
+41
View File
@@ -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;
}
+27
View File
@@ -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_ @}*/