#ifndef WORD_H_ #define WORD_H_ #include #define WORDTOU64 #define U64TOWORD typedef uint64_t word_t; /* get byte from Ascon 64-bit word */ #define GETBYTE(x, i) ((uint8_t)((uint64_t)(x) >> (56 - 8 * (i)))) /* set byte in Ascon 64-bit word */ #define SETBYTE(b, i) ((uint64_t)(b) << (56 - 8 * (i))) /* set padding byte in Ascon 64-bit word */ #define PAD(i) SETBYTE(0x80, i) 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; } static inline void STOREBYTES(uint8_t* bytes, uint64_t x, int n) { for (int i = 0; i < n; ++i) bytes[i] = GETBYTE(x, i); } 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_ */