文件

44 行
2.0 KiB
C

#ifndef PAZE_AEAD_H
#define PAZE_AEAD_H
#include "paze/paze_types.h"
#include "paze/aes.h"
#ifdef __cplusplus
extern "C" {
#endif
/* ---- AES-GCM (NIST SP 800-38D) ----
* 单次 AEAD:nonce 12 字节,输出 tag 16 字节。
* ciphertext 写入 out(与 plaintext 等长),tag 写入 tag[16]。
* 解密时若 tag 校验失败返回 PAZE_ERR_VERIFY 且不输出明文。 */
paze_status_t paze_aesgcm_encrypt(const paze_aes_ctx_t *c,
const uint8_t *iv, size_t ivlen,
const uint8_t *aad, size_t aadlen,
const uint8_t *pt, size_t ptlen,
uint8_t *ct, uint8_t tag[16]);
paze_status_t paze_aesgcm_decrypt(const paze_aes_ctx_t *c,
const uint8_t *iv, size_t ivlen,
const uint8_t *aad, size_t aadlen,
const uint8_t *ct, size_t ctlen,
const uint8_t tag[16],
uint8_t *pt);
/* ---- ChaCha20-Poly1305 AEAD (RFC 8439) ----
* 256 位密钥,12 字节 nonce。详见 chacha20.h/poly1305.h。 */
paze_status_t paze_chacha20poly1305_encrypt(const uint8_t key[32],
const uint8_t nonce[12],
const uint8_t *aad, size_t aadlen,
const uint8_t *pt, size_t ptlen,
uint8_t *ct, uint8_t tag[16]);
paze_status_t paze_chacha20poly1305_decrypt(const uint8_t key[32],
const uint8_t nonce[12],
const uint8_t *aad, size_t aadlen,
const uint8_t *ct, size_t ctlen,
const uint8_t tag[16],
uint8_t *pt);
#ifdef __cplusplus
}
#endif
#endif