/*
 * This file is auto-generated. Modifications will be lost.
 *
 * See https://android.googlesource.com/platform/bionic/+/master/libc/kernel/
 * for more information.
 */
#ifndef _UAPI_LINUX_CRYPTOUSER_H
#define _UAPI_LINUX_CRYPTOUSER_H
#include <linux/types.h>
enum {
  CRYPTO_MSG_BASE = 0x10,
  CRYPTO_MSG_NEWALG = 0x10,
  CRYPTO_MSG_DELALG,
  CRYPTO_MSG_UPDATEALG,
  CRYPTO_MSG_GETALG,
  CRYPTO_MSG_DELRNG,
  CRYPTO_MSG_GETSTAT,
  __CRYPTO_MSG_MAX
};
#define CRYPTO_MSG_MAX (__CRYPTO_MSG_MAX - 1)
#define CRYPTO_NR_MSGTYPES (CRYPTO_MSG_MAX + 1 - CRYPTO_MSG_BASE)
#define CRYPTO_MAX_NAME 64
enum crypto_attr_type_t {
  CRYPTOCFGA_UNSPEC,
  CRYPTOCFGA_PRIORITY_VAL,
  CRYPTOCFGA_REPORT_LARVAL,
  CRYPTOCFGA_REPORT_HASH,
  CRYPTOCFGA_REPORT_BLKCIPHER,
  CRYPTOCFGA_REPORT_AEAD,
  CRYPTOCFGA_REPORT_COMPRESS,
  CRYPTOCFGA_REPORT_RNG,
  CRYPTOCFGA_REPORT_CIPHER,
  CRYPTOCFGA_REPORT_AKCIPHER,
  CRYPTOCFGA_REPORT_KPP,
  CRYPTOCFGA_REPORT_ACOMP,
  CRYPTOCFGA_STAT_LARVAL,
  CRYPTOCFGA_STAT_HASH,
  CRYPTOCFGA_STAT_BLKCIPHER,
  CRYPTOCFGA_STAT_AEAD,
  CRYPTOCFGA_STAT_COMPRESS,
  CRYPTOCFGA_STAT_RNG,
  CRYPTOCFGA_STAT_CIPHER,
  CRYPTOCFGA_STAT_AKCIPHER,
  CRYPTOCFGA_STAT_KPP,
  CRYPTOCFGA_STAT_ACOMP,
  __CRYPTOCFGA_MAX
#define CRYPTOCFGA_MAX (__CRYPTOCFGA_MAX - 1)
};
struct crypto_user_alg {
  char cru_name[CRYPTO_MAX_NAME];
  char cru_driver_name[CRYPTO_MAX_NAME];
  char cru_module_name[CRYPTO_MAX_NAME];
  __u32 cru_type;
  __u32 cru_mask;
  __u32 cru_refcnt;
  __u32 cru_flags;
};
struct crypto_stat_aead {
  char type[CRYPTO_MAX_NAME];
  __u64 stat_encrypt_cnt;
  __u64 stat_encrypt_tlen;
  __u64 stat_decrypt_cnt;
  __u64 stat_decrypt_tlen;
  __u64 stat_err_cnt;
};
struct crypto_stat_akcipher {
  char type[CRYPTO_MAX_NAME];
  __u64 stat_encrypt_cnt;
  __u64 stat_encrypt_tlen;
  __u64 stat_decrypt_cnt;
  __u64 stat_decrypt_tlen;
  __u64 stat_verify_cnt;
  __u64 stat_sign_cnt;
  __u64 stat_err_cnt;
};
struct crypto_stat_cipher {
  char type[CRYPTO_MAX_NAME];
  __u64 stat_encrypt_cnt;
  __u64 stat_encrypt_tlen;
  __u64 stat_decrypt_cnt;
  __u64 stat_decrypt_tlen;
  __u64 stat_err_cnt;
};
struct crypto_stat_compress {
  char type[CRYPTO_MAX_NAME];
  __u64 stat_compress_cnt;
  __u64 stat_compress_tlen;
  __u64 stat_decompress_cnt;
  __u64 stat_decompress_tlen;
  __u64 stat_err_cnt;
};
struct crypto_stat_hash {
  char type[CRYPTO_MAX_NAME];
  __u64 stat_hash_cnt;
  __u64 stat_hash_tlen;
  __u64 stat_err_cnt;
};
struct crypto_stat_kpp {
  char type[CRYPTO_MAX_NAME];
  __u64 stat_setsecret_cnt;
  __u64 stat_generate_public_key_cnt;
  __u64 stat_compute_shared_secret_cnt;
  __u64 stat_err_cnt;
};
struct crypto_stat_rng {
  char type[CRYPTO_MAX_NAME];
  __u64 stat_generate_cnt;
  __u64 stat_generate_tlen;
  __u64 stat_seed_cnt;
  __u64 stat_err_cnt;
};
struct crypto_stat_larval {
  char type[CRYPTO_MAX_NAME];
};
struct crypto_report_larval {
  char type[CRYPTO_MAX_NAME];
};
struct crypto_report_hash {
  char type[CRYPTO_MAX_NAME];
  unsigned int blocksize;
  unsigned int digestsize;
};
struct crypto_report_cipher {
  char type[CRYPTO_MAX_NAME];
  unsigned int blocksize;
  unsigned int min_keysize;
  unsigned int max_keysize;
};
struct crypto_report_blkcipher {
  char type[CRYPTO_MAX_NAME];
  char geniv[CRYPTO_MAX_NAME];
  unsigned int blocksize;
  unsigned int min_keysize;
  unsigned int max_keysize;
  unsigned int ivsize;
};
struct crypto_report_aead {
  char type[CRYPTO_MAX_NAME];
  char geniv[CRYPTO_MAX_NAME];
  unsigned int blocksize;
  unsigned int maxauthsize;
  unsigned int ivsize;
};
struct crypto_report_comp {
  char type[CRYPTO_MAX_NAME];
};
struct crypto_report_rng {
  char type[CRYPTO_MAX_NAME];
  unsigned int seedsize;
};
struct crypto_report_akcipher {
  char type[CRYPTO_MAX_NAME];
};
struct crypto_report_kpp {
  char type[CRYPTO_MAX_NAME];
};
struct crypto_report_acomp {
  char type[CRYPTO_MAX_NAME];
};
#define CRYPTO_REPORT_MAXSIZE (sizeof(struct crypto_user_alg) + sizeof(struct crypto_report_blkcipher))
#endif
