#ifndef WORD_H_ #define WORD_H_ #include #define WORDTOU64 #define U64TOWORD typedef uint64_t word_t; /* get byte from 64-bit Ascon word */ #define GETBYTE(x, i) ((uint8_t)((uint64_t)(x) >> (56 - 8 * (i)))) /* set byte in 64-bit Ascon word */ #define SETBYTE(b, i) ((uint64_t)(b) << (56 - 8 * (i))) /* set padding byte in 64-bit Ascon word */ #define PAD(i) SETBYTE(0x80, i) /* load bytes into 64-bit Ascon word */ static inline uint64_t LOADBYTES(const uint8_t* bytes, int n) { uint64_t x = 0; for (int i = 0; i < n; ++i) x |= SETBYTE(bytes[i], i); return x; } /* store bytes from 64-bit Ascon word */ static inline void STOREBYTES(uint8_t* bytes, uint64_t x, int n) { for (int i = 0; i < n; ++i) bytes[i] = GETBYTE(x, i); } /* clear bytes in 64-bit Ascon word */ static inline uint64_t CLEARBYTES(uint64_t x, int n) { for (int i = 0; i < n; ++i) x &= ~SETBYTE(0xff, i); return x; } #endif /* WORD_H_ */