Enhance otPlatRandomGet API to provide random stream (#471)

* Enhance otPlatRandomGet API to provide random stream
This commit is contained in:
Lu Wang
2016-08-25 23:41:40 -07:00
committed by Jonathan Hui
parent 4d37d0098e
commit 3d04344cc9
3 changed files with 55 additions and 0 deletions
+20
View File
@@ -34,6 +34,9 @@
* This implementation is not a true random number generator and does @em satisfy the Thread requirements.
*/
#include <openthread-types.h>
#include <common/code_utils.hpp>
#include <platform/random.h>
#include "platform-cc2538.h"
@@ -66,3 +69,20 @@ uint32_t otPlatRandomGet(void)
return mlcg;
}
ThreadError otPlatSecureRandomGet(uint16_t aInputLength, uint8_t *aOutput, uint16_t *aOutputLength)
{
ThreadError error = kThreadError_None;
VerifyOrExit(aOutput && aOutputLength, error = kThreadError_InvalidArgs);
for (uint16_t length = 0; length < aInputLength; length++)
{
aOutput[length] = (uint8_t)otPlatRandomGet();
}
*aOutputLength = aInputLength;
exit:
return error;
}
+20
View File
@@ -34,6 +34,9 @@
* This implementation is not a true random number generator and does @em satisfy the Thread requirements.
*/
#include <openthread-types.h>
#include <common/code_utils.hpp>
#include <platform/random.h>
#include "platform-posix.h"
@@ -65,3 +68,20 @@ uint32_t otPlatRandomGet(void)
return mlcg;
}
ThreadError otPlatSecureRandomGet(uint16_t aInputLength, uint8_t *aOutput, uint16_t *aOutputLength)
{
ThreadError error = kThreadError_None;
VerifyOrExit(aOutput && aOutputLength, error = kThreadError_InvalidArgs);
for (uint16_t length = 0; length < aInputLength; length++)
{
aOutput[length] = (uint8_t)otPlatRandomGet();
}
*aOutputLength = aInputLength;
exit:
return error;
}
+15
View File
@@ -52,6 +52,21 @@ extern "C" {
*
*/
/**
* Get random stream.
*
* @param[in] aInputLength The expected size of random values.
* @param[out] aOutput A pointer to the buffer for the generated random stream. The pointer should never be NULL.
* @param[out] aOutputLength A pointer to the generated size of random stream.
* It is supposed to be the same as aInputLength, but maybe less than aInputLength.
* The pointer should never be NULL.
*
* @retval kThreadError_None Generate random successfully.
* @retval kThreadError_Fail Generate random fail.
* @retval kThreadError_InvalidArgs Invalid args.
*/
ThreadError otPlatSecureRandomGet(uint16_t aInputLength, uint8_t *aOutput, uint16_t *aOutputLength);
/**
* Get a 32-bit true random value.
*