{
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.
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.
/* 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 */
status_t (*get_random_bytes) (randomizer_t *this,size_t bytes, u_int8_t *buffer);
/**
+ * @brief Allocates space and writes in random bytes
+ *
+ * @param this calling randomizer_t object
+ * @param bytes Number of bytes to allocate
+ * @param[out] chunk chunk which will hold the allocated random bytes
+ * @return
+ * - SUCCESS
+ * - OUT_OF_RES
+ * - FAILED
+ */
+ status_t (*allocate_random_bytes) (randomizer_t *this, size_t bytes, chunk_t *chunk);
+
+ /**
* @brief Reads a specific number of bytes from pseudo random device.
*
* @param this calling randomizer_t object
* - FAILED
*/
status_t (*get_pseudo_random_bytes) (randomizer_t *this,size_t bytes, u_int8_t *buffer);
-
+
+ /**
+ * @brief Allocates space and writes in pseudo random bytes
+ *
+ * @param this calling randomizer_t object
+ * @param bytes Number of bytes to allocate
+ * @param[out] chunk chunk which will hold the allocated random bytes
+ * @return
+ * - SUCCESS
+ * - OUT_OF_RES
+ * - FAILED
+ */
+ status_t (*allocate_pseudo_random_bytes) (randomizer_t *this, size_t bytes, chunk_t *chunk);
/**
* @brief Destroys a randomizer_t object.