文件

40 行
1.5 KiB
C

#ifndef PAZE_AES_H
#define PAZE_AES_H
#include "paze/paze_types.h"
#ifdef __cplusplus
extern "C" {
#endif
/* AES 单块(16 字节)上下文。支持 128/192/256 位密钥。 */
typedef struct {
uint32_t rk[60]; /* 最大 14 轮 + 1 = 60 字 */
int nr; /* 轮数 10/12/14 */
} paze_aes_ctx_t;
/* 密钥扩展:bits 必须是 128/192/256 */
paze_status_t paze_aes_init(paze_aes_ctx_t *c, const uint8_t *key, int bits);
/* 单块加解密(16 字节) */
void paze_aes_encrypt(const paze_aes_ctx_t *c, const uint8_t in[16], uint8_t out[16]);
void paze_aes_decrypt(const paze_aes_ctx_t *c, const uint8_t in[16], uint8_t out[16]);
/* ---- 模式 ---- */
/* ECB 多块(块数 = len/16) */
void paze_aes_ecb_encrypt(const paze_aes_ctx_t *c, const uint8_t *in, uint8_t *out, size_t len);
void paze_aes_ecb_decrypt(const paze_aes_ctx_t *c, const uint8_t *in, uint8_t *out, size_t len);
/* CBC:iv 16 字节,len 须为 16 倍数 */
void paze_aes_cbc_encrypt(const paze_aes_ctx_t *c, const uint8_t iv[16],
const uint8_t *in, uint8_t *out, size_t len);
paze_status_t paze_aes_cbc_decrypt(const paze_aes_ctx_t *c, const uint8_t iv[16],
const uint8_t *in, uint8_t *out, size_t len);
/* CTR:counter 16 字节(初始计数器,自增按大端整块 +1),len 任意 */
void paze_aes_ctr(const paze_aes_ctx_t *c, uint8_t counter[16],
const uint8_t *in, uint8_t *out, size_t len);
#ifdef __cplusplus
}
#endif
#endif