#ifndef LOADSTORE_H_ #define LOADSTORE_H_ #include <stdint.h> /* 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 MASK(int n) { uint64_t x = 0; for (int i = 0; i < n; ++i) x |= SETBYTE(0xff, i); return x; } static inline uint64_t LOAD(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 STORE(uint8_t* bytes, uint64_t x, int n) { for (int i = 0; i < n; ++i) bytes[i] = GETBYTE(x, i); } #endif /* LOADSTORE_H_ */