Develop and Download Open Source Software

Browse Subversion Repository

Annotation of /branches/ssh_chacha20poly1305/ttssh2/ttxssh/ssh.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 6968 - (hide annotations) (download) (as text)
Thu Nov 2 11:37:37 2017 UTC (6 years, 5 months ago) by doda
Original Path: trunk/ttssh2/ttxssh/ssh.h
File MIME type: text/x-chdr
File size: 30809 byte(s)
共通部分が殆どないので、関数を SSH1 用と SSH2 用に分割。
1 maya 3227 /*
2 doda 6841 * Copyright (c) 1998-2001, Robert O'Callahan
3     * (C) 2004-2017 TeraTerm Project
4     * All rights reserved.
5     *
6     * Redistribution and use in source and binary forms, with or without
7     * modification, are permitted provided that the following conditions
8     * are met:
9     *
10     * 1. Redistributions of source code must retain the above copyright
11     * notice, this list of conditions and the following disclaimer.
12     * 2. Redistributions in binary form must reproduce the above copyright
13     * notice, this list of conditions and the following disclaimer in the
14     * documentation and/or other materials provided with the distribution.
15     * 3. The name of the author may not be used to endorse or promote products
16     * derived from this software without specific prior written permission.
17     *
18     * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
19     * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20     * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21     * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
22     * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23     * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24     * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25     * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26     * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27     * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28     */
29 maya 3227
30     /*
31     This code is copyright (C) 1998-1999 Robert O'Callahan.
32     See LICENSE.TXT for the license.
33     */
34    
35     #ifndef __SSH_H
36     #define __SSH_H
37    
38     #include "zlib.h"
39     #include <openssl/evp.h>
40    
41     #include "buffer.h"
42 doda 4433 #include "config.h"
43 yutakapon 4926 #include <sys/types.h>
44     #include <sys/stat.h>
45 maya 3227
46     #define DEBUG_PRINT_TO_FILE(base, msg, len) { \
47     static int count = 0; \
48     debug_print(count + base, msg, len); \
49     count++; \
50     }
51    
52     // from OpenSSH
53     extern const EVP_CIPHER *evp_aes_128_ctr(void);
54 doda 3850 extern const EVP_CIPHER *evp_des3_ctr(void);
55     extern const EVP_CIPHER *evp_bf_ctr(void);
56     extern const EVP_CIPHER *evp_cast5_ctr(void);
57 doda 4433 extern const EVP_CIPHER *evp_camellia_128_ctr(void);
58 maya 3227
59     /* Some of this code has been adapted from Ian Goldberg's Pilot SSH */
60    
61     typedef enum {
62     SSH_MSG_NONE, SSH_MSG_DISCONNECT, SSH_SMSG_PUBLIC_KEY, //2
63     SSH_CMSG_SESSION_KEY, SSH_CMSG_USER, SSH_CMSG_AUTH_RHOSTS, // 5
64     SSH_CMSG_AUTH_RSA, SSH_SMSG_AUTH_RSA_CHALLENGE,
65     SSH_CMSG_AUTH_RSA_RESPONSE, SSH_CMSG_AUTH_PASSWORD,
66     SSH_CMSG_REQUEST_PTY, // 10
67     SSH_CMSG_WINDOW_SIZE, SSH_CMSG_EXEC_SHELL,
68     SSH_CMSG_EXEC_CMD, SSH_SMSG_SUCCESS, SSH_SMSG_FAILURE,
69     SSH_CMSG_STDIN_DATA, SSH_SMSG_STDOUT_DATA, SSH_SMSG_STDERR_DATA,
70     SSH_CMSG_EOF, SSH_SMSG_EXITSTATUS,
71     SSH_MSG_CHANNEL_OPEN_CONFIRMATION, SSH_MSG_CHANNEL_OPEN_FAILURE,
72     SSH_MSG_CHANNEL_DATA, SSH_MSG_CHANNEL_INPUT_EOF,
73     SSH_MSG_CHANNEL_OUTPUT_CLOSED, SSH_MSG_OBSOLETED0,
74     SSH_SMSG_X11_OPEN, SSH_CMSG_PORT_FORWARD_REQUEST, SSH_MSG_PORT_OPEN,
75     SSH_CMSG_AGENT_REQUEST_FORWARDING, SSH_SMSG_AGENT_OPEN,
76     SSH_MSG_IGNORE, SSH_CMSG_EXIT_CONFIRMATION,
77     SSH_CMSG_X11_REQUEST_FORWARDING, SSH_CMSG_AUTH_RHOSTS_RSA,
78     SSH_MSG_DEBUG, SSH_CMSG_REQUEST_COMPRESSION,
79     SSH_CMSG_MAX_PACKET_SIZE, SSH_CMSG_AUTH_TIS,
80     SSH_SMSG_AUTH_TIS_CHALLENGE, SSH_CMSG_AUTH_TIS_RESPONSE,
81     SSH_CMSG_AUTH_KERBEROS, SSH_SMSG_AUTH_KERBEROS_RESPONSE
82     } SSHMessage;
83    
84     typedef enum {
85 doda 6716 // SSH1
86 maya 3227 SSH_CIPHER_NONE, SSH_CIPHER_IDEA, SSH_CIPHER_DES, SSH_CIPHER_3DES,
87     SSH_CIPHER_TSS, SSH_CIPHER_RC4, SSH_CIPHER_BLOWFISH,
88 doda 6716 // SSH2
89 maya 3227 SSH2_CIPHER_3DES_CBC, SSH2_CIPHER_AES128_CBC,
90     SSH2_CIPHER_AES192_CBC, SSH2_CIPHER_AES256_CBC,
91     SSH2_CIPHER_BLOWFISH_CBC, SSH2_CIPHER_AES128_CTR,
92     SSH2_CIPHER_AES192_CTR, SSH2_CIPHER_AES256_CTR,
93     SSH2_CIPHER_ARCFOUR, SSH2_CIPHER_ARCFOUR128, SSH2_CIPHER_ARCFOUR256,
94     SSH2_CIPHER_CAST128_CBC,
95 doda 3850 SSH2_CIPHER_3DES_CTR, SSH2_CIPHER_BLOWFISH_CTR, SSH2_CIPHER_CAST128_CTR,
96 doda 4433 SSH2_CIPHER_CAMELLIA128_CBC, SSH2_CIPHER_CAMELLIA192_CBC, SSH2_CIPHER_CAMELLIA256_CBC,
97     SSH2_CIPHER_CAMELLIA128_CTR, SSH2_CIPHER_CAMELLIA192_CTR, SSH2_CIPHER_CAMELLIA256_CTR,
98     SSH_CIPHER_MAX = SSH2_CIPHER_CAMELLIA256_CTR,
99 maya 3227 } SSHCipher;
100    
101     typedef enum {
102     SSH_AUTH_NONE, SSH_AUTH_RHOSTS, SSH_AUTH_RSA, SSH_AUTH_PASSWORD,
103     SSH_AUTH_RHOSTS_RSA, SSH_AUTH_TIS, SSH_AUTH_KERBEROS,
104     SSH_AUTH_PAGEANT = 16,
105 maya 4378 SSH_AUTH_MAX = SSH_AUTH_PAGEANT,
106 maya 3227 } SSHAuthMethod;
107    
108     typedef enum {
109     SSH_GENERIC_AUTHENTICATION, SSH_TIS_AUTHENTICATION
110     } SSHAuthMode;
111    
112     #define SSH_PROTOFLAG_SCREEN_NUMBER 1
113     #define SSH_PROTOFLAG_HOST_IN_FWD_OPEN 2
114    
115     enum channel_type {
116 doda 6717 TYPE_SHELL, TYPE_PORTFWD, TYPE_SCP, TYPE_SFTP, TYPE_AGENT, TYPE_SUBSYSTEM_GEN,
117 maya 3227 };
118    
119     // for SSH1
120     #define SSH_MAX_SEND_PACKET_SIZE 250000
121    
122     // for SSH2
123     /* default window/packet sizes for tcp/x11-fwd-channel */
124     // changed CHAN_SES_WINDOW_DEFAULT from 32KB to 128KB. (2007.10.29 maya)
125     #define CHAN_SES_PACKET_DEFAULT (32*1024)
126     #define CHAN_SES_WINDOW_DEFAULT (4*CHAN_SES_PACKET_DEFAULT)
127     #define CHAN_TCP_PACKET_DEFAULT (32*1024)
128     #define CHAN_TCP_WINDOW_DEFAULT (4*CHAN_TCP_PACKET_DEFAULT)
129     #if 0 // unused
130     #define CHAN_X11_PACKET_DEFAULT (16*1024)
131     #define CHAN_X11_WINDOW_DEFAULT (4*CHAN_X11_PACKET_DEFAULT)
132     #endif
133    
134    
135     /* SSH2 constants */
136    
137     /* SSH2 messages */
138 doda 6950 typedef enum {
139     // Transport layer protocol
140     // 1..19 Transport layer generic (RFC 4253)
141     SSH2_MSG_DISCONNECT = 1,
142     SSH2_MSG_IGNORE = 2,
143     SSH2_MSG_UNIMPLEMENTED = 3,
144     SSH2_MSG_DEBUG = 4,
145     SSH2_MSG_SERVICE_REQUEST = 5,
146     SSH2_MSG_SERVICE_ACCEPT = 6,
147 maya 3227
148 doda 6950 // 20..29 Algorithm negotiation (RFC 4253)
149     SSH2_MSG_KEXINIT = 20,
150     SSH2_MSG_NEWKEYS = 21,
151 maya 3227
152 doda 6950 // 30..49 Key excahnge method specific
153     // Diffie-Hellman Key Exchange (RFC 4253)
154     SSH2_MSG_KEXDH_INIT = 30,
155     SSH2_MSG_KEXDH_REPLY = 31,
156 maya 3227
157 doda 6950 // RFC 4419 - Diffie-Hellman Group Exchange for the Secure Shell (SSH) Transport Layer Protocol
158     SSH2_MSG_KEX_DH_GEX_GROUP = 31,
159     SSH2_MSG_KEX_DH_GEX_INIT = 32,
160     SSH2_MSG_KEX_DH_GEX_REPLY = 33,
161     SSH2_MSG_KEX_DH_GEX_REQUEST = 34,
162 maya 3227
163 doda 6950 // RFC 5656 - Elliptic Curve Algorithm Integration in the Secure Shell Transport Layer
164     SSH2_MSG_KEX_ECDH_INIT = 30,
165     SSH2_MSG_KEX_ECDH_REPLY = 31,
166 maya 4314
167 doda 6950 // User authentication protocol
168     // 50..59 User authentication generic (RFC 4252)
169     SSH2_MSG_USERAUTH_REQUEST = 50,
170     SSH2_MSG_USERAUTH_FAILURE = 51,
171     SSH2_MSG_USERAUTH_SUCCESS = 52,
172     SSH2_MSG_USERAUTH_BANNER = 53,
173 maya 3227
174 doda 6950 // Public key authentication (RFC 4252)
175     SSH2_MSG_USERAUTH_PK_OK = 60,
176 maya 3227
177 doda 6950 // Password authentication (RFC 4252)
178     SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ = 60,
179 maya 3227
180 doda 6950 // RFC 4256 - Generic Message Exchange Authentication for the Secure Shell Protocol (SSH)
181     // Keyboard-interactive authentication
182     SSH2_MSG_USERAUTH_INFO_REQUEST = 60,
183     SSH2_MSG_USERAUTH_INFO_RESPONSE = 61,
184    
185     // Connection protocol
186     // 80..89 Connection protocol generic (RFC 4254)
187     SSH2_MSG_GLOBAL_REQUEST = 80,
188     SSH2_MSG_REQUEST_SUCCESS = 81,
189     SSH2_MSG_REQUEST_FAILURE = 82,
190    
191     // 90..127 Channel related messages (RFC 4254)
192     SSH2_MSG_CHANNEL_OPEN = 90,
193     SSH2_MSG_CHANNEL_OPEN_CONFIRMATION = 91,
194     SSH2_MSG_CHANNEL_OPEN_FAILURE = 92,
195     SSH2_MSG_CHANNEL_WINDOW_ADJUST = 93,
196     SSH2_MSG_CHANNEL_DATA = 94,
197     SSH2_MSG_CHANNEL_EXTENDED_DATA = 95,
198     SSH2_MSG_CHANNEL_EOF = 96,
199     SSH2_MSG_CHANNEL_CLOSE = 97,
200     SSH2_MSG_CHANNEL_REQUEST = 98,
201     SSH2_MSG_CHANNEL_SUCCESS = 99,
202     SSH2_MSG_CHANNEL_FAILURE = 100
203    
204     // Reserved for client protocols
205     // 128..191 Reserved
206    
207     // Local extensions:
208     // 192..255 Local extensions
209    
210     } SSH2Message;
211    
212 maya 3227 /* SSH2 miscellaneous constants */
213 doda 6950 typedef enum {
214     SSH2_DISCONNECT_HOST_NOT_ALLOWED_TO_CONNECT = 1,
215     SSH2_DISCONNECT_PROTOCOL_ERROR,
216     SSH2_DISCONNECT_KEY_EXCHANGE_FAILED,
217     SSH2_DISCONNECT_HOST_AUTHENTICATION_FAILED,
218     SSH2_DISCONNECT_MAC_ERROR,
219     SSH2_DISCONNECT_COMPRESSION_ERROR,
220     SSH2_DISCONNECT_SERVICE_NOT_AVAILABLE,
221     SSH2_DISCONNECT_PROTOCOL_VERSION_NOT_SUPPORTED,
222     SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE,
223     SSH2_DISCONNECT_CONNECTION_LOST,
224     SSH2_DISCONNECT_BY_APPLICATION,
225     SSH2_DISCONNECT_TOO_MANY_CONNECTIONS,
226     SSH2_DISCONNECT_AUTH_CANCELLED_BY_USER,
227     SSH2_DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLE,
228     SSH2_DISCONNECT_ILLEGAL_USER_NAME
229     } SSH2DisconnectMessage;
230 maya 3227
231 doda 6950 typedef enum {
232     SSH2_OPEN_ADMINISTRATIVELY_PROHIBITED = 1,
233     SSH2_OPEN_CONNECT_FAILED,
234     SSH2_OPEN_UNKNOWN_CHANNEL_TYPE,
235     SSH2_OPEN_RESOURCE_SHORTAGE
236     } SSH2ChannelFailReason;
237 maya 3227
238 doda 5587 // Terminal Modes
239 doda 6950 typedef enum {
240     SSH2_TTY_OP_END = 0,
241     SSH2_TTY_KEY_VINTR = 1,
242     SSH2_TTY_KEY_VQUIT = 2,
243     SSH2_TTY_KEY_VERASE = 3,
244     SSH2_TTY_KEY_VKILL = 4,
245     SSH2_TTY_KEY_VEOF = 5,
246     SSH2_TTY_KEY_VEOL = 6,
247     SSH2_TTY_KEY_VEOL2 = 7,
248     SSH2_TTY_KEY_VSTART = 8,
249     SSH2_TTY_KEY_VSTOP = 9,
250     SSH2_TTY_KEY_VSUSP = 10,
251     SSH2_TTY_KEY_VDSUSP = 11,
252     SSH2_TTY_KEY_VREPRINT = 12,
253     SSH2_TTY_KEY_VWERASE = 13,
254     SSH2_TTY_KEY_VLNEXT = 14,
255     SSH2_TTY_KEY_VFLUSH = 15,
256     SSH2_TTY_KEY_VSWTCH = 16,
257     SSH2_TTY_KEY_VSTATUS = 17,
258     SSH2_TTY_KEY_VDISCARD = 18,
259     SSH2_TTY_OP_IGNPAR = 30,
260     SSH2_TTY_OP_PARMRK = 31,
261     SSH2_TTY_OP_INPCK = 32,
262     SSH2_TTY_OP_ISTRIP = 33,
263     SSH2_TTY_OP_INLCR = 34,
264     SSH2_TTY_OP_IGNCR = 35,
265     SSH2_TTY_OP_ICRNL = 36,
266     SSH2_TTY_OP_IUCLC = 37,
267     SSH2_TTY_OP_IXON = 38,
268     SSH2_TTY_OP_IXANY = 39,
269     SSH2_TTY_OP_IXOFF = 40,
270     SSH2_TTY_OP_IMAXBEL = 41,
271     SSH2_TTY_OP_ISIG = 50,
272     SSH2_TTY_OP_ICANON = 51,
273     SSH2_TTY_OP_XCASE = 52,
274     SSH2_TTY_OP_ECHO = 53,
275     SSH2_TTY_OP_ECHOE = 54,
276     SSH2_TTY_OP_ECHOK = 55,
277     SSH2_TTY_OP_ECHONL = 56,
278     SSH2_TTY_OP_NOFLSH = 57,
279     SSH2_TTY_OP_TOSTOP = 58,
280     SSH2_TTY_OP_IEXTEN = 59,
281     SSH2_TTY_OP_ECHOCTL = 60,
282     SSH2_TTY_OP_ECHOKE = 61,
283     SSH2_TTY_OP_PENDIN = 62,
284     SSH2_TTY_OP_OPOST = 70,
285     SSH2_TTY_OP_OLCUC = 71,
286     SSH2_TTY_OP_ONLCR = 72,
287     SSH2_TTY_OP_OCRNL = 73,
288     SSH2_TTY_OP_ONOCR = 74,
289     SSH2_TTY_OP_ONLRET = 75,
290     SSH2_TTY_OP_CS7 = 90,
291     SSH2_TTY_OP_CS8 = 91,
292     SSH2_TTY_OP_PARENB = 92,
293     SSH2_TTY_OP_PARODD = 93,
294     SSH2_TTY_OP_ISPEED = 128,
295     SSH2_TTY_OP_OSPEED = 129
296     } SSH2TTYMode;
297 maya 3227
298 doda 5587
299 maya 4378 // �N���C�A���g�����T�[�o������������
300 maya 3227 enum kex_init_proposals {
301     PROPOSAL_KEX_ALGS,
302     PROPOSAL_SERVER_HOST_KEY_ALGS,
303     PROPOSAL_ENC_ALGS_CTOS,
304     PROPOSAL_ENC_ALGS_STOC,
305     PROPOSAL_MAC_ALGS_CTOS,
306     PROPOSAL_MAC_ALGS_STOC,
307     PROPOSAL_COMP_ALGS_CTOS,
308     PROPOSAL_COMP_ALGS_STOC,
309     PROPOSAL_LANG_CTOS,
310     PROPOSAL_LANG_STOC,
311     PROPOSAL_MAX
312     };
313    
314 maya 4378 #define KEX_DEFAULT_KEX ""
315     #define KEX_DEFAULT_PK_ALG ""
316     #define KEX_DEFAULT_ENCRYPT ""
317     #define KEX_DEFAULT_MAC ""
318     #define KEX_DEFAULT_COMP ""
319     #define KEX_DEFAULT_LANG ""
320 maya 3227
321     static char *myproposal[PROPOSAL_MAX] = {
322     KEX_DEFAULT_KEX,
323     KEX_DEFAULT_PK_ALG,
324     KEX_DEFAULT_ENCRYPT,
325     KEX_DEFAULT_ENCRYPT,
326     KEX_DEFAULT_MAC,
327     KEX_DEFAULT_MAC,
328     KEX_DEFAULT_COMP,
329     KEX_DEFAULT_COMP,
330     KEX_DEFAULT_LANG,
331     KEX_DEFAULT_LANG,
332     };
333    
334    
335 maya 4378 typedef enum {
336     KEY_NONE,
337     KEY_RSA1,
338     KEY_RSA,
339     KEY_DSA,
340     KEY_ECDSA256,
341     KEY_ECDSA384,
342     KEY_ECDSA521,
343 yutakapon 5545 KEY_ED25519,
344 maya 4378 KEY_UNSPEC,
345     KEY_MAX = KEY_UNSPEC,
346     } ssh_keytype;
347 yutakapon 5545 #define isFixedLengthKey(type) ((type) >= KEY_DSA && (type) <= KEY_ED25519)
348 maya 4378
349     typedef struct ssh2_host_key {
350     ssh_keytype type;
351     char *name;
352     } ssh2_host_key_t;
353    
354     static ssh2_host_key_t ssh2_host_key[] = {
355 maya 4592 {KEY_RSA1, "ssh-rsa1"}, // for SSH1 only
356     {KEY_RSA, "ssh-rsa"}, // RFC4253
357     {KEY_DSA, "ssh-dss"}, // RFC4253
358     {KEY_ECDSA256, "ecdsa-sha2-nistp256"}, // RFC5656
359     {KEY_ECDSA384, "ecdsa-sha2-nistp384"}, // RFC5656
360     {KEY_ECDSA521, "ecdsa-sha2-nistp521"}, // RFC5656
361 maya 6270 {KEY_ED25519, "ssh-ed25519"}, // draft-bjh21-ssh-ed25519-02
362 maya 4378 {KEY_UNSPEC, "ssh-unknown"},
363     {KEY_NONE, NULL},
364     };
365    
366     /* Minimum modulus size (n) for RSA keys. */
367     #define SSH_RSA_MINIMUM_MODULUS_SIZE 768
368    
369     #define SSH_KEYGEN_DEFAULT_BITS 2048
370     #define SSH_RSA_MINIMUM_KEY_SIZE 768
371     #define SSH_DSA_MINIMUM_KEY_SIZE 1024
372    
373 maya 5765 #define SSH_KEYGEN_MINIMUM_ROUNDS 1
374     #define SSH_KEYGEN_MAXIMUM_ROUNDS INT_MAX
375 maya 4378
376 maya 5765
377 maya 3227 typedef struct ssh2_cipher {
378     SSHCipher cipher;
379     char *name;
380     int block_size;
381     int key_len;
382     int discard_len;
383     const EVP_CIPHER *(*func)(void);
384     } ssh2_cipher_t;
385    
386     static ssh2_cipher_t ssh2_ciphers[] = {
387 maya 4592 {SSH2_CIPHER_3DES_CBC, "3des-cbc", 8, 24, 0, EVP_des_ede3_cbc}, // RFC4253
388     {SSH2_CIPHER_AES128_CBC, "aes128-cbc", 16, 16, 0, EVP_aes_128_cbc}, // RFC4253
389     {SSH2_CIPHER_AES192_CBC, "aes192-cbc", 16, 24, 0, EVP_aes_192_cbc}, // RFC4253
390     {SSH2_CIPHER_AES256_CBC, "aes256-cbc", 16, 32, 0, EVP_aes_256_cbc}, // RFC4253
391     {SSH2_CIPHER_BLOWFISH_CBC, "blowfish-cbc", 8, 16, 0, EVP_bf_cbc}, // RFC4253
392     {SSH2_CIPHER_AES128_CTR, "aes128-ctr", 16, 16, 0, evp_aes_128_ctr}, // RFC4344
393     {SSH2_CIPHER_AES192_CTR, "aes192-ctr", 16, 24, 0, evp_aes_128_ctr}, // RFC4344
394     {SSH2_CIPHER_AES256_CTR, "aes256-ctr", 16, 32, 0, evp_aes_128_ctr}, // RFC4344
395     {SSH2_CIPHER_ARCFOUR, "arcfour", 8, 16, 0, EVP_rc4}, // RFC4253
396     {SSH2_CIPHER_ARCFOUR128, "arcfour128", 8, 16, 1536, EVP_rc4}, // RFC4345
397     {SSH2_CIPHER_ARCFOUR256, "arcfour256", 8, 32, 1536, EVP_rc4}, // RFC4345
398     {SSH2_CIPHER_CAST128_CBC, "cast128-cbc", 8, 16, 0, EVP_cast5_cbc}, // RFC4253
399     {SSH2_CIPHER_3DES_CTR, "3des-ctr", 8, 24, 0, evp_des3_ctr}, // RFC4344
400 doda 6371 {SSH2_CIPHER_BLOWFISH_CTR, "blowfish-ctr", 8, 32, 0, evp_bf_ctr}, // RFC4344
401 maya 4592 {SSH2_CIPHER_CAST128_CTR, "cast128-ctr", 8, 16, 0, evp_cast5_ctr}, // RFC4344
402     {SSH2_CIPHER_CAMELLIA128_CBC, "camellia128-cbc", 16, 16, 0, EVP_camellia_128_cbc}, // draft-kanno-secsh-camellia-02
403     {SSH2_CIPHER_CAMELLIA192_CBC, "camellia192-cbc", 16, 24, 0, EVP_camellia_192_cbc}, // draft-kanno-secsh-camellia-02
404     {SSH2_CIPHER_CAMELLIA256_CBC, "camellia256-cbc", 16, 32, 0, EVP_camellia_256_cbc}, // draft-kanno-secsh-camellia-02
405     {SSH2_CIPHER_CAMELLIA128_CTR, "camellia128-ctr", 16, 16, 0, evp_camellia_128_ctr}, // draft-kanno-secsh-camellia-02
406     {SSH2_CIPHER_CAMELLIA192_CTR, "camellia192-ctr", 16, 24, 0, evp_camellia_128_ctr}, // draft-kanno-secsh-camellia-02
407     {SSH2_CIPHER_CAMELLIA256_CTR, "camellia256-ctr", 16, 32, 0, evp_camellia_128_ctr}, // draft-kanno-secsh-camellia-02
408 doda 4433 #ifdef WITH_CAMELLIA_PRIVATE
409     {SSH2_CIPHER_CAMELLIA128_CBC, "camellia128-cbc@openssh.org", 16, 16, 0, EVP_camellia_128_cbc},
410     {SSH2_CIPHER_CAMELLIA192_CBC, "camellia192-cbc@openssh.org", 16, 24, 0, EVP_camellia_192_cbc},
411     {SSH2_CIPHER_CAMELLIA256_CBC, "camellia256-cbc@openssh.org", 16, 32, 0, EVP_camellia_256_cbc},
412     {SSH2_CIPHER_CAMELLIA128_CTR, "camellia128-ctr@openssh.org", 16, 16, 0, evp_camellia_128_ctr},
413     {SSH2_CIPHER_CAMELLIA192_CTR, "camellia192-ctr@openssh.org", 16, 24, 0, evp_camellia_128_ctr},
414     {SSH2_CIPHER_CAMELLIA256_CTR, "camellia256-ctr@openssh.org", 16, 32, 0, evp_camellia_128_ctr},
415     #endif // WITH_CAMELLIA_PRIVATE
416 maya 4301 {SSH_CIPHER_NONE, NULL, 0, 0, 0, NULL},
417 maya 3227 };
418    
419    
420 maya 4378 typedef enum {
421 yutakapon 4367 KEX_DH_NONE, /* disabled line */
422 maya 4301 KEX_DH_GRP1_SHA1,
423     KEX_DH_GRP14_SHA1,
424     KEX_DH_GEX_SHA1,
425     KEX_DH_GEX_SHA256,
426 maya 4314 KEX_ECDH_SHA2_256,
427     KEX_ECDH_SHA2_384,
428     KEX_ECDH_SHA2_521,
429 doda 6263 KEX_DH_GRP14_SHA256,
430 doda 6310 KEX_DH_GRP16_SHA512,
431     KEX_DH_GRP18_SHA512,
432 maya 4301 KEX_DH_UNKNOWN,
433 yutakapon 4367 KEX_DH_MAX = KEX_DH_UNKNOWN,
434 maya 4378 } kex_algorithm;
435 maya 4301
436     typedef struct ssh2_kex_algorithm {
437 maya 4378 kex_algorithm kextype;
438 maya 4301 char *name;
439     const EVP_MD *(*evp_md)(void);
440     } ssh2_kex_algorithm_t;
441    
442     static ssh2_kex_algorithm_t ssh2_kex_algorithms[] = {
443 maya 4592 {KEX_DH_GRP1_SHA1, "diffie-hellman-group1-sha1", EVP_sha1}, // RFC4253
444     {KEX_DH_GRP14_SHA1, "diffie-hellman-group14-sha1", EVP_sha1}, // RFC4253
445     {KEX_DH_GEX_SHA1, "diffie-hellman-group-exchange-sha1", EVP_sha1}, // RFC4419
446     {KEX_DH_GEX_SHA256, "diffie-hellman-group-exchange-sha256", EVP_sha256}, // RFC4419
447     {KEX_ECDH_SHA2_256, "ecdh-sha2-nistp256", EVP_sha256}, // RFC5656
448     {KEX_ECDH_SHA2_384, "ecdh-sha2-nistp384", EVP_sha384}, // RFC5656
449     {KEX_ECDH_SHA2_521, "ecdh-sha2-nistp521", EVP_sha512}, // RFC5656
450 doda 6310 {KEX_DH_GRP14_SHA256, "diffie-hellman-group14-sha256", EVP_sha256}, // draft-baushke-ssh-dh-group-sha2-04
451     {KEX_DH_GRP16_SHA512, "diffie-hellman-group16-sha512", EVP_sha512}, // draft-baushke-ssh-dh-group-sha2-04
452     {KEX_DH_GRP18_SHA512, "diffie-hellman-group18-sha512", EVP_sha512}, // draft-baushke-ssh-dh-group-sha2-04
453 maya 4378 {KEX_DH_NONE , NULL, NULL},
454 maya 4301 };
455    
456    
457 maya 4378 typedef enum {
458     HMAC_NONE, /* disabled line */
459 maya 4301 HMAC_SHA1,
460     HMAC_MD5,
461 doda 4422 HMAC_SHA1_96,
462     HMAC_MD5_96,
463 doda 4423 HMAC_RIPEMD160,
464 doda 4425 HMAC_SHA2_256,
465     HMAC_SHA2_256_96,
466     HMAC_SHA2_512,
467     HMAC_SHA2_512_96,
468 yutakapon 4367 HMAC_UNKNOWN,
469     HMAC_MAX = HMAC_UNKNOWN,
470 maya 4378 } hmac_type;
471 maya 4301
472 maya 3227 typedef struct ssh2_mac {
473 maya 4378 hmac_type type;
474 maya 3227 char *name;
475 maya 4378 const EVP_MD *(*evp_md)(void);
476 maya 3227 int truncatebits;
477     } ssh2_mac_t;
478    
479     static ssh2_mac_t ssh2_macs[] = {
480 maya 4592 {HMAC_SHA1, "hmac-sha1", EVP_sha1, 0}, // RFC4253
481     {HMAC_MD5, "hmac-md5", EVP_md5, 0}, // RFC4253
482     {HMAC_SHA1_96, "hmac-sha1-96", EVP_sha1, 96}, // RFC4253
483     {HMAC_MD5_96, "hmac-md5-96", EVP_md5, 96}, // RFC4253
484 doda 4425 {HMAC_RIPEMD160, "hmac-ripemd160@openssh.com", EVP_ripemd160, 0},
485 maya 4980 {HMAC_SHA2_256, "hmac-sha2-256", EVP_sha256, 0}, // RFC6668
486 doda 5016 // {HMAC_SHA2_256_96, "hmac-sha2-256-96", EVP_sha256, 96}, // draft-dbider-sha2-mac-for-ssh-05, deleted at 06
487 maya 4980 {HMAC_SHA2_512, "hmac-sha2-512", EVP_sha512, 0}, // RFC6668
488 doda 5016 // {HMAC_SHA2_512_96, "hmac-sha2-512-96", EVP_sha512, 96}, // draft-dbider-sha2-mac-for-ssh-05, deleted at 06
489 doda 4425 {HMAC_NONE, NULL, NULL, 0},
490 maya 3227 };
491    
492 maya 4301
493 maya 4378 typedef enum {
494     COMP_NONE, /* disabled line */
495     COMP_NOCOMP,
496 maya 4301 COMP_ZLIB,
497     COMP_DELAYED,
498 yutakapon 4367 COMP_UNKNOWN,
499     COMP_MAX = COMP_UNKNOWN,
500 maya 4378 } compression_type;
501 maya 3227
502 maya 4378 typedef struct ssh2_comp {
503     compression_type type;
504 maya 4301 char *name;
505 maya 4378 } ssh2_comp_t;
506 maya 3227
507 maya 4378 static ssh2_comp_t ssh2_comps[] = {
508 maya 4592 {COMP_NOCOMP, "none"}, // RFC4253
509     {COMP_ZLIB, "zlib"}, // RFC4253
510 maya 4301 {COMP_DELAYED, "zlib@openssh.com"},
511 maya 4378 {COMP_NONE, NULL},
512 maya 4301 };
513    
514    
515 maya 3227 struct Enc {
516     u_char *key;
517     u_char *iv;
518     unsigned int key_len;
519     unsigned int block_size;
520     };
521    
522     struct Mac {
523     char *name;
524     int enabled;
525     const EVP_MD *md;
526     int mac_len;
527     u_char *key;
528     int key_len;
529     };
530    
531     struct Comp {
532     int type;
533     int enabled;
534     char *name;
535     };
536    
537     typedef struct {
538     struct Enc enc;
539     struct Mac mac;
540     struct Comp comp;
541     } Newkeys;
542    
543     #define roundup(x, y) ((((x)+((y)-1))/(y))*(y))
544    
545     enum kex_modes {
546     MODE_IN,
547     MODE_OUT,
548     MODE_MAX
549     };
550    
551    
552     // �z�X�g�L�[(SSH1, SSH2����)���f�[�^�\�� (2006.3.21 yutaka)
553     typedef struct Key {
554     // host key type
555 maya 4378 ssh_keytype type;
556 maya 3227 // SSH2 RSA
557     RSA *rsa;
558     // SSH2 DSA
559     DSA *dsa;
560 maya 4321 // SSH2 ECDSA
561     EC_KEY *ecdsa;
562 maya 3227 // SSH1 RSA
563     int bits;
564     unsigned char *exp;
565     unsigned char *mod;
566 yutakapon 5545 // SSH2 ED25519
567     unsigned char *ed25519_sk;
568     unsigned char *ed25519_pk;
569     int bcrypt_kdf;
570 maya 3227 } Key;
571    
572     // fingerprint������
573     enum fp_rep {
574 maya 6118 SSH_FP_DEFAULT = 0,
575 maya 3227 SSH_FP_HEX,
576 maya 6118 SSH_FP_BASE64,
577 maya 3227 SSH_FP_BUBBLEBABBLE,
578     SSH_FP_RANDOMART
579     };
580 maya 6120 /*
581 doda 4531 enum fp_type {
582 doda 4539 SSH_FP_MD5,
583 doda 4531 SSH_FP_SHA1,
584 doda 4539 SSH_FP_SHA256
585 doda 4531 };
586 maya 6120 */
587     typedef enum {
588     SSH_DIGEST_MD5,
589     SSH_DIGEST_RIPEMD160,
590     SSH_DIGEST_SHA1,
591     SSH_DIGEST_SHA256,
592     SSH_DIGEST_SHA384,
593     SSH_DIGEST_SHA512,
594     SSH_DIGEST_MAX,
595     } digest_algorithm;
596 doda 4531
597 maya 6120 typedef struct ssh_digest {
598     digest_algorithm id;
599 maya 6157 char *name;
600 maya 6120 } ssh_digest_t;
601    
602     /* NB. Indexed directly by algorithm number */
603     static ssh_digest_t ssh_digests[] = {
604 maya 6157 { SSH_DIGEST_MD5, "MD5" },
605     { SSH_DIGEST_RIPEMD160, "RIPEMD160" },
606     { SSH_DIGEST_SHA1, "SHA1" },
607     { SSH_DIGEST_SHA256, "SHA256" },
608     { SSH_DIGEST_SHA384, "SHA384" },
609     { SSH_DIGEST_SHA512, "SHA512" },
610     { SSH_DIGEST_MAX, NULL },
611 maya 6120 };
612    
613 maya 3227 enum scp_dir {
614 r850 3375 TOREMOTE, FROMREMOTE,
615 maya 3227 };
616    
617     /* The packet handler returns TRUE to keep the handler in place,
618     FALSE to remove the handler. */
619     typedef BOOL (* SSHPacketHandler)(PTInstVar pvar);
620    
621     typedef struct _SSHPacketHandlerItem SSHPacketHandlerItem;
622     struct _SSHPacketHandlerItem {
623     SSHPacketHandler handler;
624     /* Circular list of handlers for given message */
625 doda 6801 SSHPacketHandlerItem *next_for_message;
626     SSHPacketHandlerItem *last_for_message;
627 maya 3227 /* Circular list of handlers in set */
628 doda 6801 SSHPacketHandlerItem *next_in_set;
629 maya 3227 int active_for_message;
630     };
631    
632     typedef struct {
633 doda 6801 char *hostname;
634 maya 3227
635     int server_protocol_flags;
636 doda 6801 char *server_ID;
637 maya 3227
638     /* This buffer is used to hold the outgoing data, and encrypted in-place
639     here if necessary. */
640 doda 6801 unsigned char *outbuf;
641 maya 3227 long outbuflen;
642     /* This buffer is used by the SSH protocol processing to store uncompressed
643     packet data for compression. User data is never streamed through here;
644     it is compressed directly from the user's buffer. */
645 doda 6801 unsigned char *precompress_outbuf;
646 maya 3227 long precompress_outbuflen;
647     /* this is the length of the packet data, including the type header */
648     long outgoing_packet_len;
649    
650     /* This buffer is used by the SSH protocol processing to store decompressed
651     packet data. User data is never streamed through here; it is decompressed
652     directly to the user's buffer. */
653 doda 6801 unsigned char *postdecompress_inbuf;
654 maya 3227 long postdecompress_inbuflen;
655    
656 doda 6801 unsigned char *payload;
657 maya 3227 long payload_grabbed;
658     long payloadlen;
659     long payload_datastart;
660     long payload_datalen;
661    
662     uint32 receiver_sequence_number;
663     uint32 sender_sequence_number;
664    
665     z_stream compress_stream;
666     z_stream decompress_stream;
667     BOOL compressing;
668     BOOL decompressing;
669     int compression_level;
670    
671 doda 6801 SSHPacketHandlerItem *packet_handlers[256];
672 maya 3227 int status_flags;
673    
674     int win_cols;
675     int win_rows;
676    
677     unsigned short tcpport;
678     } SSHState;
679    
680     #define STATUS_DONT_SEND_USER_NAME 0x01
681     #define STATUS_EXPECTING_COMPRESSION_RESPONSE 0x02
682     #define STATUS_DONT_SEND_CREDENTIALS 0x04
683     #define STATUS_HOST_OK 0x08
684     #define STATUS_INTERACTIVE 0x10
685     #define STATUS_IN_PARTIAL_ID_STRING 0x20
686    
687     void SSH_init(PTInstVar pvar);
688     void SSH_open(PTInstVar pvar);
689 doda 6801 void SSH_notify_disconnecting(PTInstVar pvar, char *reason);
690 maya 3227 /* SSH_handle_server_ID returns TRUE iff a valid ID string has been
691     received. If it returns FALSE, we need to keep looking for another
692     ID string. */
693 doda 6801 BOOL SSH_handle_server_ID(PTInstVar pvar, char *ID, int ID_len);
694 maya 3227 /* SSH_handle_packet requires NO PAYLOAD on entry.
695     'len' is the size of the packet: payload + padding (+ CRC for SSHv1)
696     'padding' is the size of the padding.
697     'data' points to the start of the packet data (the length field)
698     */
699 doda 6968 void SSH_handle_packet1(PTInstVar pvar, char *data, int len, int padding);
700     void SSH_handle_packet2(PTInstVar pvar, char *data, int len, int padding);
701 maya 3227 void SSH_notify_win_size(PTInstVar pvar, int cols, int rows);
702     void SSH_notify_user_name(PTInstVar pvar);
703     void SSH_notify_cred(PTInstVar pvar);
704     void SSH_notify_host_OK(PTInstVar pvar);
705 doda 6801 void SSH_send(PTInstVar pvar, unsigned char const *buf, unsigned int buflen);
706 maya 3227 /* SSH_extract_payload returns number of bytes extracted */
707 doda 6801 int SSH_extract_payload(PTInstVar pvar, unsigned char *dest, int len);
708 maya 3227 void SSH_end(PTInstVar pvar);
709    
710 doda 6801 void SSH_get_server_ID_info(PTInstVar pvar, char *dest, int len);
711     void SSH_get_protocol_version_info(PTInstVar pvar, char *dest, int len);
712     void SSH_get_compression_info(PTInstVar pvar, char *dest, int len);
713     void SSH_get_mac_info(PTInstVar pvar, char *dest, int len);
714 maya 3227
715     /* len must be <= SSH_MAX_SEND_PACKET_SIZE */
716     void SSH_channel_send(PTInstVar pvar, int channel_num,
717     uint32 remote_channel_num,
718 doda 6801 unsigned char *buf, int len, int retry);
719 maya 3227 void SSH_fail_channel_open(PTInstVar pvar, uint32 remote_channel_num);
720     void SSH_confirm_channel_open(PTInstVar pvar, uint32 remote_channel_num, uint32 local_channel_num);
721     void SSH_channel_output_eof(PTInstVar pvar, uint32 remote_channel_num);
722     void SSH_channel_input_eof(PTInstVar pvar, uint32 remote_channel_num, uint32 local_channel_num);
723 doda 6801 void SSH_request_forwarding(PTInstVar pvar, char *bind_address, int from_server_port,
724     char *to_local_host, int to_local_port);
725     void SSH_cancel_request_forwarding(PTInstVar pvar, char *bind_address, int from_server_port, int reply);
726 maya 3227 void SSH_request_X11_forwarding(PTInstVar pvar,
727 doda 6801 char *auth_protocol, unsigned char *auth_data, int auth_data_len, int screen_num);
728 maya 3227 void SSH_open_channel(PTInstVar pvar, uint32 local_channel_num,
729 doda 6801 char *to_remote_host, int to_remote_port,
730     char *originator, unsigned short originator_port);
731 maya 3227
732     int SSH_start_scp(PTInstVar pvar, char *sendfile, char *dstfile);
733     int SSH_start_scp_receive(PTInstVar pvar, char *filename);
734     int SSH_scp_transaction(PTInstVar pvar, char *sendfile, char *dstfile, enum scp_dir direction);
735     int SSH_sftp_transaction(PTInstVar pvar);
736    
737     /* auxiliary SSH2 interfaces for pkt.c */
738     int SSH_get_min_packet_size(PTInstVar pvar);
739     /* data is guaranteed to be at least SSH_get_min_packet_size bytes long
740     at least 5 bytes must be decrypted */
741 doda 6801 void SSH_predecrpyt_packet(PTInstVar pvar, char *data);
742 maya 3227 int SSH_get_clear_MAC_size(PTInstVar pvar);
743    
744     #define SSH_is_any_payload(pvar) ((pvar)->ssh_state.payload_datalen > 0)
745     #define SSH_get_host_name(pvar) ((pvar)->ssh_state.hostname)
746     #define SSH_get_compression_level(pvar) ((pvar)->ssh_state.compressing ? (pvar)->ts_SSH_CompressionLevel : 0)
747    
748     void SSH2_send_kexinit(PTInstVar pvar);
749     BOOL do_SSH2_userauth(PTInstVar pvar);
750     BOOL do_SSH2_authrequest(PTInstVar pvar);
751     void debug_print(int no, char *msg, int len);
752     int get_cipher_block_size(SSHCipher cipher);
753     int get_cipher_key_len(SSHCipher cipher);
754 yutakapon 5545 SSHCipher get_cipher_by_name(char *name);
755 maya 4378 char* get_kex_algorithm_name(kex_algorithm kextype);
756 maya 3227 const EVP_CIPHER* get_cipher_EVP_CIPHER(SSHCipher cipher);
757 maya 4378 const EVP_MD* get_kex_algorithm_EVP_MD(kex_algorithm kextype);
758     char* get_ssh2_mac_name(hmac_type type);
759     const EVP_MD* get_ssh2_mac_EVP_MD(hmac_type type);
760     int get_ssh2_mac_truncatebits(hmac_type type);
761     char* get_ssh2_comp_name(compression_type type);
762     char* get_ssh_keytype_name(ssh_keytype type);
763 maya 6120 char* get_digest_algorithm_name(digest_algorithm id);
764 maya 3227 int get_cipher_discard_len(SSHCipher cipher);
765     void ssh_heartbeat_lock_initialize(void);
766     void ssh_heartbeat_lock_finalize(void);
767     void ssh_heartbeat_lock(void);
768     void ssh_heartbeat_unlock(void);
769     void halt_ssh_heartbeat_thread(PTInstVar pvar);
770     void ssh2_channel_free(void);
771 doda 6657 BOOL handle_SSH2_userauth_msg60(PTInstVar pvar);
772 maya 3227 BOOL handle_SSH2_userauth_inforeq(PTInstVar pvar);
773 doda 6657 BOOL handle_SSH2_userauth_pkok(PTInstVar pvar);
774 yutakapon 4152 BOOL handle_SSH2_userauth_passwd_changereq(PTInstVar pvar);
775 maya 3227 void SSH2_update_compression_myproposal(PTInstVar pvar);
776     void SSH2_update_cipher_myproposal(PTInstVar pvar);
777 yutakapon 4367 void SSH2_update_kex_myproposal(PTInstVar pvar);
778     void SSH2_update_host_key_myproposal(PTInstVar pvar);
779     void SSH2_update_hmac_myproposal(PTInstVar pvar);
780 yutakapon 4106 int SSH_notify_break_signal(PTInstVar pvar);
781 maya 3227
782 yutakapon 4926 ///
783     enum scp_state {
784     SCP_INIT, SCP_TIMESTAMP, SCP_FILEINFO, SCP_DATA, SCP_CLOSING,
785     };
786    
787     typedef struct bufchain {
788     buffer_t *msg;
789     struct bufchain *next;
790     } bufchain_t;
791    
792 yutakapon 6528 typedef struct PacketList {
793     char *buf;
794     unsigned int buflen;
795     struct PacketList *next;
796     } PacketList_t;
797    
798 yutakapon 4926 typedef struct scp {
799     enum scp_dir dir; // transfer direction
800     enum scp_state state; // SCP state
801     char localfile[MAX_PATH]; // local filename
802     char localfilefull[MAX_PATH]; // local filename fullpath
803     char remotefile[MAX_PATH]; // remote filename
804     FILE *localfp; // file pointer for local file
805     struct __stat64 filestat; // file status information
806     HWND progress_window;
807     HANDLE thread;
808     unsigned int thread_id;
809     PTInstVar pvar;
810     // for receiving file
811     long long filetotalsize;
812     long long filercvsize;
813 maya 5607 DWORD filemtime;
814     DWORD fileatime;
815 yutakapon 6528 PacketList_t *pktlist_head;
816     PacketList_t *pktlist_tail;
817 yutakapon 4926 } scp_t;
818    
819     enum sftp_state {
820 yutakapon 4930 SFTP_INIT, SFTP_CONNECTED, SFTP_REALPATH,
821 yutakapon 4926 };
822    
823     typedef struct sftp {
824     enum sftp_state state;
825 yutakapon 4930 HWND console_window;
826 yutakapon 4929 unsigned int transfer_buflen;
827     unsigned int num_requests;
828     unsigned int version;
829     unsigned int msg_id;
830     #define SFTP_EXT_POSIX_RENAME 0x00000001
831     #define SFTP_EXT_STATVFS 0x00000002
832     #define SFTP_EXT_FSTATVFS 0x00000004
833     #define SFTP_EXT_HARDLINK 0x00000008
834     unsigned int exts;
835     unsigned long long limit_kbps;
836     //struct bwlimit bwlimit_in, bwlimit_out;
837 yutakapon 4930 char path[1024];
838 yutakapon 4926 } sftp_t;
839    
840     typedef struct channel {
841     int used;
842     int self_id;
843     int remote_id;
844     unsigned int local_window;
845     unsigned int local_window_max;
846     unsigned int local_consumed;
847     unsigned int local_maxpacket;
848     unsigned int remote_window;
849     unsigned int remote_maxpacket;
850     enum channel_type type;
851     int local_num;
852     bufchain_t *bufchain;
853     scp_t scp;
854     buffer_t *agent_msg;
855     int agent_request_len;
856     sftp_t sftp;
857 maya 5422 #define SSH_CHANNEL_STATE_CLOSE_SENT 0x00000001
858     unsigned int state;
859 yutakapon 4926 } Channel_t;
860    
861 doda 6801 unsigned char *begin_send_packet(PTInstVar pvar, int type, int len);
862 yutakapon 4926 void finish_send_packet_special(PTInstVar pvar, int skip_compress);
863 doda 6801 void SSH2_send_channel_data(PTInstVar pvar, Channel_t *c, unsigned char *buf, unsigned int buflen, int retry);
864 yutakapon 4926
865     #define finish_send_packet(pvar) finish_send_packet_special((pvar), 0)
866     #define get_payload_uint32(pvar, offset) get_uint32_MSBfirst((pvar)->ssh_state.payload + (offset))
867     #define get_uint32(buf) get_uint32_MSBfirst((buf))
868     #define set_uint32(buf, v) set_uint32_MSBfirst((buf), (v))
869     #define get_mpint_len(pvar, offset) ((get_ushort16_MSBfirst((pvar)->ssh_state.payload + (offset)) + 7) >> 3)
870     #define get_ushort16(buf) get_ushort16_MSBfirst((buf))
871     ///
872    
873 doda 5916 /* Global request confirmation callbacks */
874     typedef void global_confirm_cb(PTInstVar pvar, int type, unsigned int seq, void *ctx);
875     void client_register_global_confirm(global_confirm_cb *cb, void *ctx);
876    
877     /* Global request success/failure callbacks */
878     struct global_confirm {
879     global_confirm_cb *cb;
880     void *ctx;
881     int ref_count;
882 yutakapon 5850 };
883    
884 maya 3227 #endif

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26