BeRTOS
prng.h
Go to the documentation of this file.
00001 
00038 #ifndef SEC_PRNG_H
00039 #define SEC_PRNG_H
00040 
00041 #include <cfg/compiler.h>
00042 #include <cfg/debug.h>
00043 
00044 typedef struct PRNG
00045 {
00046     void (*reseed)(struct PRNG *ctx, const uint8_t *seed);
00047     void (*generate)(struct PRNG *ctx, uint8_t *data, size_t len);
00048     uint8_t seed_len;
00049     uint8_t seeded;
00050 } PRNG;
00051 
00060 INLINE void prng_reseed(PRNG *ctx, const uint8_t *seed)
00061 {
00062     ASSERT(ctx->reseed);
00063     ctx->reseed(ctx, seed);
00064     ctx->seeded = 1;
00065 }
00066 
00070 INLINE size_t prng_seed_len(PRNG *ctx)
00071 {
00072     return ctx->seed_len;
00073 }
00074 
00079 INLINE void prng_generate(PRNG *ctx, uint8_t *data, size_t len)
00080 {
00081     ASSERT(ctx->generate);
00082     ASSERT(ctx->seeded);
00083     ctx->generate(ctx, data, len);
00084 }
00085 
00086 
00087 #endif /* SEC_PRNG_H */