44 行
2.0 KiB
C
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
|