#pragma once

#include <cstdint>
#include <cstdlib>
#include <memory>

namespace athena {

class IAES {
public:
  virtual ~IAES() {}
  virtual void encrypt(const uint8_t* iv, const uint8_t* inbuf, uint8_t* outbuf, uint64_t len) = 0;
  virtual void decrypt(const uint8_t* iv, const uint8_t* inbuf, uint8_t* outbuf, uint64_t len) = 0;
  virtual void setKey(const uint8_t* key) = 0;
};

std::unique_ptr<IAES> NewAES();

} // namespace athena