#include <crypto/algapi.h>
#include <crypto/internal/aead.h>
#include <crypto/internal/skcipher.h>
#include <crypto/scatterwalk.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/scatterlist.h>
#define AEGIS256_NONCE_SIZE 32
#define AEGIS256_STATE_BLOCKS 6
#define AEGIS256_KEY_SIZE 32
#define AEGIS256_MIN_AUTH_SIZE 8
#define AEGIS256_MAX_AUTH_SIZE 16
union aegis_block blocks[AEGIS256_STATE_BLOCKS];
union aegis_block key[AEGIS256_KEY_SIZE / AEGIS_BLOCK_SIZE];
int (*skcipher_walk_init)(struct skcipher_walk *walk,
struct aead_request *req, bool atomic);
void (*crypt_chunk)(struct aegis_state *state, u8 *dst,
const u8 *src, unsigned int size);
static void crypto_aegis256_update(struct aegis_state *state)
tmp = state->blocks[AEGIS256_STATE_BLOCKS - 1];
for (i = AEGIS256_STATE_BLOCKS - 1; i > 0; i--)
crypto_aegis_aesenc(&state->blocks[i], &state->blocks[i - 1],
crypto_aegis_aesenc(&state->blocks[0], &tmp, &state->blocks[0]);
static void crypto_aegis256_update_a(struct aegis_state *state,
const union aegis_block *msg)
crypto_aegis256_update(state);
crypto_aegis_block_xor(&state->blocks[0], msg);
static void crypto_aegis256_update_u(struct aegis_state *state, const void *msg)