From 8ab61a3fc84bc21726008bf15700c3ae546b8f08 Mon Sep 17 00:00:00 2001 From: couturier Date: Mon, 20 Jun 2022 14:29:17 +0200 Subject: [PATCH 1/1] new --- Grain-128AEAD-sw-ref/grain128aead.h | 33 +++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 Grain-128AEAD-sw-ref/grain128aead.h diff --git a/Grain-128AEAD-sw-ref/grain128aead.h b/Grain-128AEAD-sw-ref/grain128aead.h new file mode 100644 index 0000000..095871e --- /dev/null +++ b/Grain-128AEAD-sw-ref/grain128aead.h @@ -0,0 +1,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 -- 2.39.5