text: /**
   * @file aes_xts.h
   * @brief Hardware accelerated AES-XTS implementation.
   * @copyright libnx Authors
   */
  #pragma once
  #include "aes.h"
  
  /// Context for AES-128 XTS.
  typedef struct {
      Aes128Context aes_ctx;
      Aes128Context tweak_ctx;
      u8 tweak[AES_BLOCK_SIZE];
      u8 buffer[AES_BLOCK_SIZE];
      size_t num_buffered;
  } Aes128XtsContext;
  
  /// Context for AES-192 XTS.
  typedef struct {
      Aes192Context aes_ctx;
      Aes192Context tweak_ctx;
      u8 tweak[AES_BLOCK_SIZE];
      u8 buffer[AES_BLOCK_SIZE];
      size_t num_buffered;
  } Aes192XtsContext;
  
  /// Context for AES-256 XTS.
  typedef struct {
      Aes256Context aes_ctx;
      Aes256Context tweak_ctx;
      u8 tweak[AES_BLOCK_SIZE];
      u8 buffer[AES_BLOCK_SIZE];
      size_t num_buffered;
  } Aes256XtsContext;
  
  /// 128-bit XTS API.
  void aes128XtsContextCreate(Aes128XtsContext *out, const void *key0, const void *key1, bool is_encryptor);
  void aes128XtsContextResetTweak(Aes128XtsContext *ctx, const void *tweak);
  void aes128XtsContextResetSector(Aes128XtsContext *ctx, uint64_t sector, bool is_nintendo);
  size_t aes128XtsEncrypt(Aes128XtsContext *ctx, void *dst, const void *src, size_t size);
  size_t aes128XtsDecrypt(Aes128XtsContext *ctx, void *dst, const void *src, size_t size);
  
  /// 192-bit XTS API.
  void aes192XtsContextCreate(Aes192XtsContext *out, const void *key0, const void *key1, bool is_encryptor);
  void aes192XtsContextResetTweak(Aes192XtsContext *ctx, const void *tweak);
  void aes192XtsContextResetSector(Aes192XtsContext *ctx, uint64_t sector, bool is_nintendo);
  size_t aes192XtsEncrypt(Aes192XtsContext *ctx, void *dst, const void *src, size_t size);
  size_t aes192XtsDecrypt(Aes192XtsContext *ctx, void *dst, const void *src, size_t size);
  
  /// 256-bit XTS API.
  void aes256XtsContextCreate(Aes256XtsContext *out, const void *key0, const void *key1, bool is_encryptor);
  void aes256XtsContextResetTweak(Aes256XtsContext *ctx, const void *tweak);
  void aes256XtsContextResetSector(Aes256XtsContext *ctx, uint64_t sector, bool is_nintendo);
  size_t aes256XtsEncrypt(Aes256XtsContext *ctx, void *dst, const void *src, size_t size);
  size_t aes256XtsDecrypt(Aes256XtsContext *ctx, void *dst, const void *src, size_t size);
  