diff options
Diffstat (limited to 'Source/charon/utils/randomizer.c')
-rw-r--r-- | Source/charon/utils/randomizer.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/Source/charon/utils/randomizer.c b/Source/charon/utils/randomizer.c index 90ad95bcb..9af7d5257 100644 --- a/Source/charon/utils/randomizer.c +++ b/Source/charon/utils/randomizer.c @@ -121,6 +121,20 @@ static status_t get_random_bytes(private_randomizer_t *this,size_t bytes, u_int8 { return (this->get_bytes_from_device(this, FALSE, bytes, buffer)); } +/** + * Implements randomizer_t's allocate_random_bytes function. + * See #randomizer_t.allocate_random_bytes for description. + */ +static status_t allocate_random_bytes(private_randomizer_t *this, size_t bytes, chunk_t *chunk) +{ + chunk->len = bytes; + chunk->ptr = allocator_alloc(bytes); + if (chunk->ptr == NULL) + { + return OUT_OF_RES; + } + return (this->get_bytes_from_device(this, FALSE, bytes, chunk->ptr)); +} /** * Implements randomizer_t's get_pseudo_random_bytes function. @@ -131,6 +145,23 @@ static status_t get_pseudo_random_bytes(private_randomizer_t *this,size_t bytes, return (this->get_bytes_from_device(this, TRUE, bytes, buffer)); } + +/** + * Implements randomizer_t's allocate_random_bytes function. + * See #randomizer_t.allocate_random_bytes for description. + */ +static status_t allocate_pseudo_random_bytes(private_randomizer_t *this, size_t bytes, chunk_t *chunk) +{ + chunk->len = bytes; + chunk->ptr = allocator_alloc(bytes); + if (chunk->ptr == NULL) + { + return OUT_OF_RES; + } + return (this->get_bytes_from_device(this, TRUE, bytes, chunk->ptr)); +} + + /** * Implements randomizer_t's destroy function. * See #randomizer_t.destroy for description. @@ -169,7 +200,9 @@ randomizer_t *randomizer_create_on_devices(char * random_dev_name,char * prandom /* public functions */ this->public.get_random_bytes = (status_t (*) (randomizer_t *,size_t, u_int8_t *)) get_random_bytes; + this->public.allocate_random_bytes = (status_t (*) (randomizer_t *,size_t, chunk_t *)) allocate_random_bytes; this->public.get_pseudo_random_bytes = (status_t (*) (randomizer_t *,size_t, u_int8_t *)) get_pseudo_random_bytes; + this->public.allocate_pseudo_random_bytes = (status_t (*) (randomizer_t *,size_t, chunk_t *)) allocate_pseudo_random_bytes; this->public.destroy = (status_t (*) (randomizer_t *))destroy; /* private functions */ |