40 行
1.5 KiB
C
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
|