#ifndef _CRYPTO_AES_AES_IMPL_H
#define _CRYPTO_AES_AES_IMPL_H
#include <sys/types.h>
struct aesenc;
struct aesdec;
struct aes_impl {
const char *ai_name;
int (*ai_probe)(void);
void (*ai_setenckey)(struct aesenc *, const uint8_t *, uint32_t);
void (*ai_setdeckey)(struct aesdec *, const uint8_t *, uint32_t);
void (*ai_enc)(const struct aesenc *, const uint8_t[static 16],
uint8_t[static 16], uint32_t);
void (*ai_dec)(const struct aesdec *, const uint8_t[static 16],
uint8_t[static 16], uint32_t);
void (*ai_cbc_enc)(const struct aesenc *, const uint8_t[static 16],
uint8_t[static 16], size_t, uint8_t[static 16], uint32_t);
void (*ai_cbc_dec)(const struct aesdec *, const uint8_t[static 16],
uint8_t[static 16], size_t, uint8_t[static 16], uint32_t);
void (*ai_xts_enc)(const struct aesenc *, const uint8_t[static 16],
uint8_t[static 16], size_t, uint8_t[static 16], uint32_t);
void (*ai_xts_dec)(const struct aesdec *, const uint8_t[static 16],
uint8_t[static 16], size_t, uint8_t[static 16], uint32_t);
void (*ai_cbcmac_update1)(const struct aesenc *,
const uint8_t[static 16], size_t, uint8_t[static 16],
uint32_t);
void (*ai_ccm_enc1)(const struct aesenc *,
const uint8_t[static 16], uint8_t[static 16],
size_t, uint8_t[static 32], uint32_t);
void (*ai_ccm_dec1)(const struct aesenc *,
const uint8_t[static 16], uint8_t[static 16],
size_t, uint8_t[static 32], uint32_t);
};
void aes_md_init(const struct aes_impl *);
int aes_selftest(const struct aes_impl *);
void aes_cbcmac_update1(const struct aesenc *, const uint8_t[static 16],
size_t, uint8_t[static 16], uint32_t);
void aes_ccm_enc1(const struct aesenc *, const uint8_t[static 16],
uint8_t[static 16], size_t, uint8_t[static 32], uint32_t);
void aes_ccm_dec1(const struct aesenc *, const uint8_t[static 16],
uint8_t[static 16], size_t, uint8_t[static 32], uint32_t);
#endif