文件
PazeSSH/include/paze/ssh_agent.h
T

75 行
2.7 KiB
C

/* ssh_agent.h —— SSH Agent 协议 (OpenSSH 兼容)
*
* 传输层:
* - Windows: 命名管道 \\.\pipe\openssh-ssh-agent
* - POSIX: unix socket $SSH_AUTH_SOCK (缺省 /tmp/paze-agent.sock)
*
* 消息格式: u32 BE 长度 || packet (packet 首字节为消息类型)
*/
#ifndef PAZE_SSH_AGENT_H
#define PAZE_SSH_AGENT_H
#include "paze/paze_types.h"
#ifdef __cplusplus
extern "C" {
#endif
/* 消息类型 */
#define SSH_AGENT_FAILURE 5
#define SSH_AGENT_SUCCESS 6
#define SSH2_AGENTC_REQUEST_IDENTITIES 11
#define SSH2_AGENT_IDENTITIES_ANSWER 12
#define SSH2_AGENTC_SIGN_REQUEST 13
#define SSH2_AGENT_SIGN_RESPONSE 14
#define SSH_AGENTC_ADD_IDENTITY 17
#define SSH_AGENTC_REMOVE_IDENTITY 18
#define SSH_AGENTC_REMOVE_ALL_IDENTITIES 19
#define SSH_AGENTC_ADD_SMARTCARD_KEY 20
#define SSH_AGENTC_REMOVE_SMARTCARD_KEY 21
#define SSH_AGENTC_LOCK 22
#define SSH_AGENTC_UNLOCK 23
#define SSH_AGENTC_ADD_SMARTCARD_KEY_CONSTRAINED 25
#define SSH_AGENTC_EXTENSION 27
#define SSH_AGENT_EXTENSION_FAILURE 28
/* SIGN_REQUEST flags */
#define SSH_AGENT_OLD_SIGNATURE 1
#define SSH_AGENT_RSA_SHA2_256 2
#define SSH_AGENT_RSA_SHA2_512 4
typedef struct ssh_agent ssh_agent_t;
/* ---- client ---- */
int ssh_agent_connect(ssh_agent_t **out);
void ssh_agent_close(ssh_agent_t *a);
/* 列出身份。返回 malloc 的数组,*blobs[i] 为 pubblob,*blens[i] 为长度,
* *comments[i] 为注释。用 ssh_agent_list_free 释放。成功返回 0,count 为身份数。 */
int ssh_agent_list(ssh_agent_t *a, uint8_t ***blobs, size_t **blens,
char ***comments, int *count);
void ssh_agent_list_free(uint8_t **blobs, size_t *blens,
char **comments, int count);
/* 请求 agent 对 data 签名。flags 含 SSH_AGENT_RSA_SHA2_256/512。
* 输出 SSH 签名 blob(string alg || string sig),malloc。 */
int ssh_agent_sign(ssh_agent_t *a,
const uint8_t *pubblob, size_t blen,
const uint8_t *data, size_t dlen, int flags,
uint8_t **sig, size_t *siglen);
/* 添加/删除身份。payload 为 SSH_AGENTC_ADD_IDENTITY 的键部分
* (由 ssh_privkey_identity_payload 生成)。0=成功。 */
int ssh_agent_add_identity(ssh_agent_t *a, const uint8_t *payload, size_t len);
int ssh_agent_remove_identity(ssh_agent_t *a, const uint8_t *pubblob, size_t blen);
int ssh_agent_remove_all(ssh_agent_t *a);
/* ---- server ---- */
/* 守护进程主循环,阻塞运行(ctrl-c 退出)。 */
int ssh_agent_daemon(void);
#ifdef __cplusplus
}
#endif
#endif /* PAZE_SSH_AGENT_H */