文件

59 行
2.3 KiB
C

/* ssh_keys.h —— SSH 私钥管理公共 API
*
* 提供:私钥解析/生成/序列化/签名,供 paze-keygen / paze-add /
* paze-agent / paze-ssh 等工具复用。
*
* 私钥格式:
* - OpenSSH 新格式 "openssh-key-v1" (二进制或其 PEM 包装,无密码加密)
* - PEM: "RSA PRIVATE KEY" (PKCS#1), "EC PRIVATE KEY" (RFC 5915)
*
* 支持算法: ssh-ed25519, rsa-sha2-256, ecdsa-sha2-nistp256
*/
#ifndef PAZE_SSH_KEYS_H
#define PAZE_SSH_KEYS_H
#include "paze/paze_types.h"
#ifdef __cplusplus
extern "C" {
#endif
/* 不透明私钥句柄 */
typedef struct ssh_privkey ssh_privkey_t;
/* 解析私钥文件内容(openssh-key-v1 / PEM)。成功返回 0,填充 *out。 */
int ssh_privkey_parse(const uint8_t *data, size_t len, ssh_privkey_t **out);
void ssh_privkey_free(ssh_privkey_t *k);
/* 生成密钥对。type: "ed25519" | "rsa" | "ecdsa"。
* bits 仅对 rsa 有意义(默认 3072),ed25519/ecdsa 忽略。 */
int ssh_privkey_generate(const char *type, int bits, ssh_privkey_t **out);
/* 查询 */
const char *ssh_privkey_alg(const ssh_privkey_t *k); /* "ssh-ed25519"... */
const uint8_t *ssh_privkey_pubblob(const ssh_privkey_t *k, size_t *len);
/* 序列化为 openssh-key-v1 二进制(未加密),malloc 输出 */
int ssh_privkey_serialize(const ssh_privkey_t *k,
uint8_t **out, size_t *outlen);
/* 序列化为 PEM 文本("OPENSSH PRIVATE KEY",malloc,调用者 free) */
char *ssh_privkey_to_pem(const ssh_privkey_t *k);
/* SSH_AGENTC_ADD_IDENTITY 载荷(keytype + key 字段 + comment),malloc 输出 */
int ssh_privkey_identity_payload(const ssh_privkey_t *k, const char *comment,
uint8_t **out, size_t *outlen);
/* 解析 agent identity 载荷;comment 非 NULL 时 malloc 出注释 */
int ssh_privkey_parse_identity(const uint8_t *payload, size_t len,
ssh_privkey_t **out, char **comment);
/* 签名。rsa_alg: 0=ssh-rsa, 2=rsa-sha2-256, 4=rsa-sha2-512(仅对 rsa 生效)。
* 输出 SSH 签名 blob = string(alg) || string(sig),malloc。 */
int ssh_privkey_sign(const ssh_privkey_t *k, int rsa_alg,
const uint8_t *data, size_t len,
uint8_t **sig, size_t *siglen);
#ifdef __cplusplus
}
#endif
#endif /* PAZE_SSH_KEYS_H */