41 行
1.4 KiB
C
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 */
|