⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ssh.h

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 H
字号:
#include <u.h>#include <libc.h>#include <mp.h>#include <auth.h>#include <libsec.h>enum		/* internal debugging flags */{	DBG=			1<<0,	DBG_CRYPTO=		1<<1,	DBG_PACKET=		1<<2,	DBG_AUTH=		1<<3,	DBG_PROC=		1<<4,	DBG_PROTO=		1<<5,	DBG_IO=			1<<6,	DBG_SCP=		1<<7,};enum		/* protocol packet types */{/* 0 */	SSH_MSG_NONE=0,	SSH_MSG_DISCONNECT,	SSH_SMSG_PUBLIC_KEY,	SSH_CMSG_SESSION_KEY,	SSH_CMSG_USER,	SSH_CMSG_AUTH_RHOSTS,	SSH_CMSG_AUTH_RSA,	SSH_SMSG_AUTH_RSA_CHALLENGE,	SSH_CMSG_AUTH_RSA_RESPONSE,	SSH_CMSG_AUTH_PASSWORD,/* 10 */	SSH_CMSG_REQUEST_PTY,	SSH_CMSG_WINDOW_SIZE,	SSH_CMSG_EXEC_SHELL,	SSH_CMSG_EXEC_CMD,	SSH_SMSG_SUCCESS,	SSH_SMSG_FAILURE,	SSH_CMSG_STDIN_DATA,	SSH_SMSG_STDOUT_DATA,	SSH_SMSG_STDERR_DATA,	SSH_CMSG_EOF,/* 20 */	SSH_SMSG_EXITSTATUS,	SSH_MSG_CHANNEL_OPEN_CONFIRMATION,	SSH_MSG_CHANNEL_OPEN_FAILURE,	SSH_MSG_CHANNEL_DATA,	SSH_MSG_CHANNEL_INPUT_EOF,	SSH_MSG_CHANNEL_OUTPUT_CLOSED,	SSH_MSG_UNIX_DOMAIN_X11_FORWARDING,	/* obsolete */	SSH_SMSG_X11_OPEN,	SSH_CMSG_PORT_FORWARD_REQUEST,	SSH_MSG_PORT_OPEN,/* 30 */	SSH_CMSG_AGENT_REQUEST_FORWARDING,	SSH_SMSG_AGENT_OPEN,	SSH_MSG_IGNORE,	SSH_CMSG_EXIT_CONFIRMATION,	SSH_CMSG_X11_REQUEST_FORWARDING,	SSH_CMSG_AUTH_RHOSTS_RSA,	SSH_MSG_DEBUG,	SSH_CMSG_REQUEST_COMPRESSION,	SSH_CMSG_MAX_PACKET_SIZE,	SSH_CMSG_AUTH_TIS,/* 40 */	SSH_SMSG_AUTH_TIS_CHALLENGE,	SSH_CMSG_AUTH_TIS_RESPONSE,	SSH_CMSG_AUTH_KERBEROS,	SSH_SMSG_AUTH_KERBEROS_RESPONSE,	SSH_CMSG_HAVE_KERBEROS_TGT,};enum		/* protocol flags */{	SSH_PROTOFLAG_SCREEN_NUMBER=1<<0,	SSH_PROTOFLAG_HOST_IN_FWD_OPEN=1<<1,};enum		/* agent protocol packet types */{	SSH_AGENTC_NONE = 0,	SSH_AGENTC_REQUEST_RSA_IDENTITIES,	SSH_AGENT_RSA_IDENTITIES_ANSWER,	SSH_AGENTC_RSA_CHALLENGE,	SSH_AGENT_RSA_RESPONSE,	SSH_AGENT_FAILURE,	SSH_AGENT_SUCCESS,	SSH_AGENTC_ADD_RSA_IDENTITY,	SSH_AGENTC_REMOVE_RSA_IDENTITY,};enum		/* protocol constants */{	SSH_MAX_DATA = 256*1024,	SSH_MAX_MSG = SSH_MAX_DATA+4,	SESSKEYLEN = 32,	SESSIDLEN = 16,		COOKIELEN = 8,};enum		/* crypto ids */{	SSH_CIPHER_NONE = 0,	SSH_CIPHER_IDEA,	SSH_CIPHER_DES,	SSH_CIPHER_3DES,	SSH_CIPHER_TSS,	SSH_CIPHER_RC4,	SSH_CIPHER_BLOWFISH,	SSH_CIPHER_TWIDDLE,		/* for debugging */};enum		/* auth method ids */{	SSH_AUTH_RHOSTS = 1,	SSH_AUTH_RSA = 2,	SSH_AUTH_PASSWORD = 3,	SSH_AUTH_RHOSTS_RSA = 4,	SSH_AUTH_TIS = 5,	SSH_AUTH_USER_RSA = 6,};typedef struct Auth Auth;typedef struct Authsrv Authsrv;typedef struct Cipher Cipher;typedef struct CipherState CipherState;typedef struct Conn Conn;typedef struct Msg Msg;#pragma incomplete CipherStatestruct Auth{	int id;	char *name;	int (*fn)(Conn*);};struct Authsrv{	int id;	char *name;	int firstmsg;	AuthInfo *(*fn)(Conn*, Msg*);};struct Cipher{	int id;	char *name;	CipherState *(*init)(Conn*, int isserver);	void (*encrypt)(CipherState*, uchar*, int);	void (*decrypt)(CipherState*, uchar*, int);};struct Conn{	QLock;	int fd[2];	CipherState *cstate;	uchar cookie[COOKIELEN];	uchar sessid[SESSIDLEN];	uchar sesskey[SESSKEYLEN];	RSApub *serverkey;	RSApub *hostkey;	ulong flags;	ulong ciphermask;	Cipher *cipher;		/* chosen cipher */	Cipher **okcipher;	/* list of acceptable ciphers */	int nokcipher;	ulong authmask;	Auth **okauth;	int nokauth;	char *user;	char *host;	char *aliases;	int interactive;	Msg *unget;	RSApriv *serverpriv;		/* server only */	RSApriv *hostpriv;	Authsrv **okauthsrv;	int nokauthsrv;};struct Msg{	Conn *c;	uchar type;	ulong len;		/* output: #bytes before pos, input: #bytes after pos */	uchar *bp;	/* beginning of allocated space */	uchar *rp;		/* read pointer */	uchar *wp;	/* write pointer */	uchar *ep;	/* end of allocated space */	Msg *link;		/* for sshnet */};#define LONG(p)	(((p)[0]<<24)|((p)[1]<<16)|((p)[2]<<8)|((p)[3]))#define PLONG(p, l) \	(((p)[0]=(l)>>24),((p)[1]=(l)>>16),\	 ((p)[2]=(l)>>8),((p)[3]=(l)))#define SHORT(p) (((p)[0]<<8)|(p)[1])#define PSHORT(p,l) \	(((p)[0]=(l)>>8),((p)[1]=(l)))extern char Edecode[];extern char Eencode[];extern char Ememory[];extern char Ehangup[];extern int doabort;extern int debuglevel;extern Auth authpassword;extern Auth authrsa;extern Auth authtis;extern Authsrv authsrvpassword;extern Authsrv authsrvtis;extern Cipher cipher3des;extern Cipher cipherblowfish;extern Cipher cipherdes;extern Cipher cipherrc4;extern Cipher ciphernone;extern Cipher ciphertwiddle;/* msg.c */Msg*	allocmsg(Conn*, int, int);void		badmsg(Msg*, int);Msg*	recvmsg(Conn*, int);void		unrecvmsg(Conn*, Msg*);int		sendmsg(Msg*);uchar	getbyte(Msg*);ushort	getshort(Msg*);ulong	getlong(Msg*);char*	getstring(Msg*);void*	getbytes(Msg*, int);mpint*	getmpint(Msg*);RSApub*	getRSApub(Msg*);void		putbyte(Msg*, uchar);void		putshort(Msg*, ushort);void		putlong(Msg*, ulong);void		putstring(Msg*, char*);void		putbytes(Msg*, void*, long);void		putmpint(Msg*, mpint*);void		putRSApub(Msg*, RSApub*);mpint*	rsapad(mpint*, int);mpint*	rsaunpad(mpint*);void		mptoberjust(mpint*, uchar*, int);mpint*	rsaencryptbuf(RSApub*, uchar*, int);/* cmsg.c */void		sshclienthandshake(Conn*);void		requestpty(Conn*);int		readgeom(int*, int*, int*, int*);void		sendwindowsize(Conn*, int, int, int, int);int		rawhack;/* smsg.c */void		sshserverhandshake(Conn*);/* pubkey.c */enum{	KeyOk,	KeyWrong,	NoKey,	NoKeyFile,};int		appendkey(char*, char*, RSApub*);int		findkey(char*, char*, RSApub*);int		replacekey(char*, char*, RSApub*);/* agent.c */int		startagent(Conn*);void		handleagentmsg(Msg*);void		handleagentopen(Msg*);void		handleagentieof(Msg*);void		handleagentoclose(Msg*);/* util.c */void		debug(int, char*, ...);void*	emalloc(long);void*	erealloc(void*, long);void		error(char*, ...);RSApriv*	readsecretkey(char*);int		readstrnl(int, char*, int);void		atexitkill(int);void		atexitkiller(void);void		calcsessid(Conn*);void		sshlog(char*, ...);void		setaliases(Conn*, char*);void		privatefactotum(void);#pragma varargck argpos error 1#pragma varargck argpos sshlog 2

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -