BeRTOS
|
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 */