#ifndef _CORECRYPTO_CCMODE_IMPL_H_
#define _CORECRYPTO_CCMODE_IMPL_H_
#include <corecrypto/cc.h>
cc_aligned_struct(16) ccecb_ctx;
struct ccmode_ecb {
size_t size;
size_t block_size;
int (*init)(const struct ccmode_ecb *ecb, ccecb_ctx *ctx,
size_t key_nbytes, const void *key);
int (*ecb)(const ccecb_ctx *ctx, size_t nblocks, const void *in,
void *out);
};
cc_aligned_struct(16) cccbc_ctx;
cc_aligned_struct(16) cccbc_iv;
struct ccmode_cbc {
size_t size;
size_t block_size;
int (*init)(const struct ccmode_cbc *cbc, cccbc_ctx *ctx,
size_t key_len, const void *key);
int (*cbc)(const cccbc_ctx *ctx, cccbc_iv *iv,
size_t nblocks, const void *in, void *out);
const void *custom;
};
cc_aligned_struct(16) cccfb_ctx;
struct ccmode_cfb {
size_t size;
size_t block_size;
int (*init)(const struct ccmode_cfb *cfb, cccfb_ctx *ctx,
size_t key_len, const void *key, const void *iv);
int (*cfb)(cccfb_ctx *ctx, size_t nbytes, const void *in, void *out);
const void *custom;
};
cc_aligned_struct(16) cccfb8_ctx;
struct ccmode_cfb8 {
size_t size;
size_t block_size;
int (*init)(const struct ccmode_cfb8 *cfb8, cccfb8_ctx *ctx,
size_t key_len, const void *key, const void *iv);
int (*cfb8)(cccfb8_ctx *ctx, size_t nbytes, const void *in, void *out);
const void *custom;
};
cc_aligned_struct(16) ccctr_ctx;
struct ccmode_ctr {
size_t size;
size_t block_size;
size_t ecb_block_size;
int (*init)(const struct ccmode_ctr *mode, ccctr_ctx *ctx,
size_t key_len, const void *key, const void *iv);
int (*setctr)(const struct ccmode_ctr *mode, ccctr_ctx *ctx, const void *ctr);
int (*ctr)(ccctr_ctx *ctx, size_t nbytes, const void *in, void *out);
const void *custom;
};
cc_aligned_struct(16) ccofb_ctx;
struct ccmode_ofb {
size_t size;
size_t block_size;
int (*init)(const struct ccmode_ofb *ofb, ccofb_ctx *ctx,
size_t key_len, const void *key, const void *iv);
int (*ofb)(ccofb_ctx *ctx, size_t nbytes, const void *in, void *out);
const void *custom;
};
cc_aligned_struct(16) ccxts_ctx;
cc_aligned_struct(16) ccxts_tweak;
struct ccmode_xts {
size_t size;
size_t tweak_size;
size_t block_size;
int (*init)(const struct ccmode_xts *xts, ccxts_ctx *ctx,
size_t key_nbytes, const void *data_key, const void *tweak_key);
void (*key_sched)(const struct ccmode_xts *xts, ccxts_ctx *ctx,
size_t key_nbytes, const void *data_key, const void *tweak_key);
int (*set_tweak)(const ccxts_ctx *ctx, ccxts_tweak *tweak, const void *iv);
void *(*xts)(const ccxts_ctx *ctx, ccxts_tweak *tweak,
size_t nblocks, const void *in, void *out);
const void *custom;
const void *custom1;
};
cc_aligned_struct(16) ccgcm_ctx;
#define CCMODE_GCM_DECRYPTOR 78647
#define CCMODE_GCM_ENCRYPTOR 4073947
struct ccmode_gcm {
size_t size;
int encdec; size_t block_size;
int (*init)(const struct ccmode_gcm *gcm, ccgcm_ctx *ctx,
size_t key_nbytes, const void *key);
int (*set_iv)(ccgcm_ctx *ctx, size_t iv_nbytes, const void *iv);
int (*gmac)(ccgcm_ctx *ctx, size_t nbytes, const void *in); int (*gcm)(ccgcm_ctx *ctx, size_t nbytes, const void *in, void *out);
int (*finalize)(ccgcm_ctx *key, size_t tag_nbytes, void *tag);
int (*reset)(ccgcm_ctx *ctx);
const void *custom;
};
cc_aligned_struct(16) ccccm_ctx;
cc_aligned_struct(16) ccccm_nonce;
struct ccmode_ccm {
size_t size;
size_t nonce_size;
size_t block_size;
int (*init)(const struct ccmode_ccm *ccm, ccccm_ctx *ctx,
size_t key_len, const void *key);
int (*set_iv)(ccccm_ctx *ctx, ccccm_nonce *nonce_ctx, size_t nonce_len, const void *nonce,
size_t mac_size, size_t auth_len, size_t data_len);
int (*cbcmac)(ccccm_ctx *ctx, ccccm_nonce *nonce_ctx, size_t nbytes, const void *in); int (*ccm)(ccccm_ctx *ctx, ccccm_nonce *nonce_ctx, size_t nbytes, const void *in, void *out);
int (*finalize)(ccccm_ctx *key, ccccm_nonce *nonce_ctx, void *mac);
int (*reset)(ccccm_ctx *key, ccccm_nonce *nonce_ctx);
const void *custom;
};
cc_aligned_struct(16) ccomac_ctx;
struct ccmode_omac {
size_t size;
size_t block_size;
int (*init)(const struct ccmode_omac *omac, ccomac_ctx *ctx,
size_t tweak_len, size_t key_len, const void *key);
int (*omac)(ccomac_ctx *ctx, size_t nblocks,
const void *tweak, const void *in, void *out);
const void *custom;
};
#endif