文件

41 行
1.4 KiB
C

/* ed25519.h —— Ed25519 (RFC 8032) 签名
*
* Ed25519 是基于 Edwards 曲线 -x^2 + y^2 = 1 + d x^2 y^2 的签名方案,
* 其中 d = -121665/121666 mod p, p = 2^255 - 19。群阶 L = 2^252 + 27742317...
*
* 仅依赖 SHA-512 与内部域算术(fe25519),无外部库。
*
* 约定:
* - 私钥 sk:32 字节随机(由调用方用 paze_random 提供)
* - 公钥 pk:32 字节(点的压缩编码)
* - 签名 sig:64 字节 = R(32) || S(32),均小端
*/
#ifndef PAZE_ED25519_H
#define PAZE_ED25519_H
#include "paze/paze_types.h"
#ifdef __cplusplus
extern "C" {
#endif
/* 由私钥派生公钥:pk = (clamped a) · B,其中 a = SHA-512(sk)[0..32] 经裁剪。 */
int paze_ed25519_publickey(uint8_t pk[32], const uint8_t sk[32]);
/* 生成密钥对:sk 填入 32 字节随机,pk 派生。需传入已初始化的随机源。
* 返回 PAZE_OK 或 PAZE_ERR_PLATFORM(随机失败)。 */
int paze_ed25519_keygen(uint8_t pk[32], uint8_t sk[32]);
/* 签名:sig = Sign(sk, msg)。64 字节签名写入 sig。 */
int paze_ed25519_sign(uint8_t sig[64],
const uint8_t *msg, size_t msglen,
const uint8_t sk[32]);
/* 验签:返回 PAZE_OK 表示签名有效,PAZE_ERR_VERIFY 表示无效。 */
int paze_ed25519_verify(const uint8_t sig[64],
const uint8_t *msg, size_t msglen,
const uint8_t pk[32]);
#ifdef __cplusplus
}
#endif
#endif /* PAZE_ED25519_H */