文件

32 行
978 B
C

#ifndef PAZE_HMAC_H
#define PAZE_HMAC_H
#include "paze/paze_types.h"
#include "paze/hash.h"
#ifdef __cplusplus
extern "C" {
#endif
/* 通用 HMAC,任意 hash 算法描述符 */
paze_status_t paze_hmac(const paze_hash_alg_t *alg,
const uint8_t *key, size_t keylen,
const uint8_t *msg, size_t msglen,
uint8_t *out /* alg->digest_len */);
/* 流式 HMAC 上下文(分配大小为 alg->ctx_size*2 + block_len,栈上即可) */
typedef struct {
const paze_hash_alg_t *alg;
uint8_t opad[128]; /* 最大 block_len=128(SHA-512) */
uint8_t ictx_buf[256];
uint8_t octx_buf[256];
} paze_hmac_ctx_t;
void paze_hmac_init(paze_hmac_ctx_t *c, const paze_hash_alg_t *alg,
const uint8_t *key, size_t keylen);
void paze_hmac_update(paze_hmac_ctx_t *c, const uint8_t *msg, size_t len);
void paze_hmac_final(paze_hmac_ctx_t *c, uint8_t *out);
#ifdef __cplusplus
}
#endif
#endif