-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgrain128aead.h
33 lines (27 loc) · 870 Bytes
/
grain128aead.h
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
29
30
31
32
33
#ifndef UTILS_H
#define UTILS_H
#define STREAM_BYTES 16
#define MSG_BYTES 0
enum GRAIN_ROUND {INIT, FP1, NORMAL};
typedef struct {
uint8_t lfsr[128];
uint8_t nfsr[128];
uint8_t auth_acc[64];
uint8_t auth_sr[64];
} grain_state;
// TODO: add struct with output: keystream and optionally macstream and tag
typedef struct {
uint8_t keystream[STREAM_BYTES];
uint8_t macstream[STREAM_BYTES];
uint8_t *message;
} grain_data;
void init_grain(grain_state *grain, uint8_t *key, uint8_t *iv);
uint8_t next_lfsr_fb(grain_state *grain);
uint8_t next_nfsr_fb(grain_state *grain);
uint8_t next_h(grain_state *grain);
uint8_t shift(uint8_t fsr[128], uint8_t fb);
void auth_shift(uint8_t sr[32], uint8_t fb);
uint8_t next_z(grain_state *grain, uint8_t);
void generate_keystream(grain_state *grain, grain_data *data, uint8_t *);
void print_state(grain_state *grain);
#endif