#include "api.h" #include "ascon.h" #include "loadstore.h" #include "permutations.h" #include "printstate.h" void process_data(state_t* s, uint8_t* out, const uint8_t* in, uint64_t len, uint8_t mode) { word_t tmp0; int n = 0; while (len) { /* determine block size */ n = len < ASCON_RATE ? len : ASCON_RATE; /* absorb data */ tmp0 = LOAD(in, n); XOR(s->x0, tmp0); /* extract data */ if (mode != ASCON_AD) STORE(out, s->x0, n); /* insert data */ if (mode == ASCON_DEC) { AND(s->x0, XMASK(n)); XOR(s->x0, tmp0); } /* compute permutation for full blocks */ if (n == ASCON_RATE) PB(s); in += n; out += n; len -= n; } XOR(s->x0, PAD(n % 8)); }