#include "evercrypt_targetconfig.h"
#include "libintvector.h"
#include "kremlin/internal/types.h"
#include "kremlin/lowstar_endianness.h"
#include <string.h>
#include "kremlin/internal/target.h"
#ifndef __EverCrypt_AEAD_H
#define __EverCrypt_AEAD_H
#include "Hacl_Kremlib.h"
#include "EverCrypt_Chacha20Poly1305.h"
#include "Vale.h"
#include "EverCrypt_AutoConfig2.h"
#include "EverCrypt_Error.h"
#include "Hacl_Spec.h"
typedef struct EverCrypt_AEAD_state_s_s EverCrypt_AEAD_state_s;
bool EverCrypt_AEAD_uu___is_Ek(Spec_Agile_AEAD_alg a, EverCrypt_AEAD_state_s projectee);
Spec_Cipher_Expansion_impl
EverCrypt_AEAD___proj__Ek__item__impl(Spec_Agile_AEAD_alg a, EverCrypt_AEAD_state_s projectee);
uint8_t
*EverCrypt_AEAD___proj__Ek__item__ek(Spec_Agile_AEAD_alg a, EverCrypt_AEAD_state_s projectee);
Spec_Agile_AEAD_alg EverCrypt_AEAD_alg_of_state(EverCrypt_AEAD_state_s *s);
EverCrypt_Error_error_code
EverCrypt_AEAD_create_in(Spec_Agile_AEAD_alg a, EverCrypt_AEAD_state_s **dst, uint8_t *k1);
EverCrypt_Error_error_code
EverCrypt_AEAD_encrypt(
EverCrypt_AEAD_state_s *s,
uint8_t *iv,
uint32_t iv_len,
uint8_t *ad,
uint32_t ad_len,
uint8_t *plain,
uint32_t plain_len,
uint8_t *cipher,
uint8_t *tag
);
EverCrypt_Error_error_code
EverCrypt_AEAD_decrypt(
EverCrypt_AEAD_state_s *s,
uint8_t *iv,
uint32_t iv_len,
uint8_t *ad,
uint32_t ad_len,
uint8_t *cipher,
uint32_t cipher_len,
uint8_t *tag,
uint8_t *dst
);
void EverCrypt_AEAD_free(EverCrypt_AEAD_state_s *s);
#define __EverCrypt_AEAD_H_DEFINED
#endif