aboutsummaryrefslogtreecommitdiffhomepage
path: root/pyecsca/codegen/prng/prng.c
blob: 38ec615a7747b679cf5b81d5854958aad77d18a3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include "KeccakPRG.h"
#include "KeccakP-200-compact.c"
#include "KeccakDuplexWidth200.c"
#include "KeccakPRGWidth200.c"
#include "prng.h"
#include <tommath.h>


static KeccakWidth200_SpongePRG_Instance keccak;

mp_err prng_mp_rand(void *out, size_t size) {
    return (prng_get(out, size) == 0) ? MP_OKAY : MP_ERR;
}

void prng_init(void) {
    KeccakWidth200_SpongePRG_Initialize(&keccak, 70);
    mp_rand_source(&prng_mp_rand);
}

int prng_get(uint8_t *out, size_t size) {
    return KeccakWidth200_SpongePRG_Fetch(&keccak, out, size);
}

void prng_seed(const uint8_t *seed, size_t size) {
    KeccakWidth200_SpongePRG_Feed(&keccak, seed, size);
    KeccakWidth200_SpongePRG_Forget(&keccak);
}