75 行
2.7 KiB
C
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 */
|