#include "api.h"#include "ascon.h"#include "loadstore.h"#include "permutations.h"#include "printstate.h"voidprocess_data(state_t*s,uint8_t*out,constuint8_t*in,uint64_tlen,uint8_tmode){word_ttmp0;intn=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));}