init() function not to initialize seed-related memory without risking to
incur into unwanted behaviour.
git-svn-id: https://src.develer.com/svnoss/bertos/trunk@4355
38d2e660-2303-0410-9eaa-
f027e97ec537
*
* \brief Generic interface for cryptographically-secure pseudo-RNG
* \author Giovanni Bajo <rasky@develer.com>
*
* \brief Generic interface for cryptographically-secure pseudo-RNG
* \author Giovanni Bajo <rasky@develer.com>
#include <cfg/debug.h>
typedef struct PRNG
#include <cfg/debug.h>
typedef struct PRNG
void (*reseed)(struct PRNG *ctx, const uint8_t *seed);
void (*generate)(struct PRNG *ctx, uint8_t *data, size_t len);
void (*reseed)(struct PRNG *ctx, const uint8_t *seed);
void (*generate)(struct PRNG *ctx, uint8_t *data, size_t len);
+ uint8_t seed_len;
+ uint8_t seeded;
} PRNG;
/**
* Feed a new seed into the PRNG.
} PRNG;
/**
* Feed a new seed into the PRNG.
* \note: Being a cryptographically-secure PRNG, the seed will be
* mixed to the current state of the generator, so it is NOT possible
* to generate the same sequence simply by using the same seed. If you
* \note: Being a cryptographically-secure PRNG, the seed will be
* mixed to the current state of the generator, so it is NOT possible
* to generate the same sequence simply by using the same seed. If you
{
ASSERT(ctx->reseed);
ctx->reseed(ctx, seed);
{
ASSERT(ctx->reseed);
ctx->reseed(ctx, seed);
INLINE void prng_generate(PRNG *ctx, uint8_t *data, size_t len)
{
ASSERT(ctx->generate);
INLINE void prng_generate(PRNG *ctx, uint8_t *data, size_t len)
{
ASSERT(ctx->generate);
ctx->generate(ctx, data, len);
}
ctx->generate(ctx, data, len);
}
ctx->prng.reseed = isaac_reseed;
ctx->prng.generate = isaac_generate;
ctx->prng.seed_len = sizeof(ctx->randrsl) / 2;
ctx->prng.reseed = isaac_reseed;
ctx->prng.generate = isaac_generate;
ctx->prng.seed_len = sizeof(ctx->randrsl) / 2;
ctx->randcnt = CONFIG_ISAAC_RANDSIZ*4;
memset(ctx->randrsl, 0, sizeof(ctx->randrsl));
ctx->randcnt = CONFIG_ISAAC_RANDSIZ*4;
memset(ctx->randrsl, 0, sizeof(ctx->randrsl));
ctx->rng.reseed = x917_reseed;
ctx->rng.generate = x917_generate;
ctx->rng.seed_len = sizeof(ctx->key) + sizeof(ctx->state);
ctx->rng.reseed = x917_reseed;
ctx->rng.generate = x917_generate;
ctx->rng.seed_len = sizeof(ctx->key) + sizeof(ctx->state);