Open-Source-Software-Entwicklung und Downloads

Browse Subversion Repository

Diff of /trunk/ttssh2/ttxssh/ssh.h

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 3226 by maya, Tue Mar 24 09:37:20 2009 UTC revision 3227 by maya, Tue Mar 24 15:10:33 2009 UTC
# Line 1  Line 1 
1  /*  /*
2  Copyright (c) 1998-2001, Robert O'Callahan  Copyright (c) 1998-2001, Robert O'Callahan
3  All rights reserved.  All rights reserved.
4    
5  Redistribution and use in source and binary forms, with or without modification,  Redistribution and use in source and binary forms, with or without modification,
6  are permitted provided that the following conditions are met:  are permitted provided that the following conditions are met:
7    
8  Redistributions of source code must retain the above copyright notice, this list of  Redistributions of source code must retain the above copyright notice, this list of
9  conditions and the following disclaimer.  conditions and the following disclaimer.
10    
11  Redistributions in binary form must reproduce the above copyright notice, this list  Redistributions in binary form must reproduce the above copyright notice, this list
12  of conditions and the following disclaimer in the documentation and/or other materials  of conditions and the following disclaimer in the documentation and/or other materials
13  provided with the distribution.  provided with the distribution.
14    
15  The name of Robert O'Callahan may not be used to endorse or promote products derived from  The name of Robert O'Callahan may not be used to endorse or promote products derived from
16  this software without specific prior written permission.  this software without specific prior written permission.
17    
18  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND
19  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
21  THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
25  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  */  */
28    
29  /*  /*
30  This code is copyright (C) 1998-1999 Robert O'Callahan.  This code is copyright (C) 1998-1999 Robert O'Callahan.
31  See LICENSE.TXT for the license.  See LICENSE.TXT for the license.
32  */  */
33    
34  #ifndef __SSH_H  #ifndef __SSH_H
35  #define __SSH_H  #define __SSH_H
36    
37  #include "zlib.h"  #include "zlib.h"
38  #include <openssl/evp.h>  #include <openssl/evp.h>
39    
40  #include "buffer.h"  #include "buffer.h"
41    
42  #define DEBUG_PRINT_TO_FILE(base, msg, len) { \  #define DEBUG_PRINT_TO_FILE(base, msg, len) { \
43          static int count = 0; \          static int count = 0; \
44          debug_print(count + base, msg, len); \          debug_print(count + base, msg, len); \
45          count++; \          count++; \
46  }  }
47    
48  // from OpenSSH  // from OpenSSH
49  extern const EVP_CIPHER *evp_aes_128_ctr(void);  extern const EVP_CIPHER *evp_aes_128_ctr(void);
50    
51  // yutaka  // yutaka
52  #define SSH2_USE  #define SSH2_USE
53    
54    
55  /* Some of this code has been adapted from Ian Goldberg's Pilot SSH */  /* Some of this code has been adapted from Ian Goldberg's Pilot SSH */
56    
57  typedef enum {  typedef enum {
58          SSH_MSG_NONE, SSH_MSG_DISCONNECT, SSH_SMSG_PUBLIC_KEY, //2          SSH_MSG_NONE, SSH_MSG_DISCONNECT, SSH_SMSG_PUBLIC_KEY, //2
59          SSH_CMSG_SESSION_KEY, SSH_CMSG_USER, SSH_CMSG_AUTH_RHOSTS, // 5          SSH_CMSG_SESSION_KEY, SSH_CMSG_USER, SSH_CMSG_AUTH_RHOSTS, // 5
60          SSH_CMSG_AUTH_RSA, SSH_SMSG_AUTH_RSA_CHALLENGE,          SSH_CMSG_AUTH_RSA, SSH_SMSG_AUTH_RSA_CHALLENGE,
61          SSH_CMSG_AUTH_RSA_RESPONSE, SSH_CMSG_AUTH_PASSWORD,          SSH_CMSG_AUTH_RSA_RESPONSE, SSH_CMSG_AUTH_PASSWORD,
62          SSH_CMSG_REQUEST_PTY, // 10          SSH_CMSG_REQUEST_PTY, // 10
63          SSH_CMSG_WINDOW_SIZE, SSH_CMSG_EXEC_SHELL,          SSH_CMSG_WINDOW_SIZE, SSH_CMSG_EXEC_SHELL,
64          SSH_CMSG_EXEC_CMD, SSH_SMSG_SUCCESS, SSH_SMSG_FAILURE,          SSH_CMSG_EXEC_CMD, SSH_SMSG_SUCCESS, SSH_SMSG_FAILURE,
65          SSH_CMSG_STDIN_DATA, SSH_SMSG_STDOUT_DATA, SSH_SMSG_STDERR_DATA,          SSH_CMSG_STDIN_DATA, SSH_SMSG_STDOUT_DATA, SSH_SMSG_STDERR_DATA,
66          SSH_CMSG_EOF, SSH_SMSG_EXITSTATUS,          SSH_CMSG_EOF, SSH_SMSG_EXITSTATUS,
67          SSH_MSG_CHANNEL_OPEN_CONFIRMATION, SSH_MSG_CHANNEL_OPEN_FAILURE,          SSH_MSG_CHANNEL_OPEN_CONFIRMATION, SSH_MSG_CHANNEL_OPEN_FAILURE,
68          SSH_MSG_CHANNEL_DATA, SSH_MSG_CHANNEL_INPUT_EOF,          SSH_MSG_CHANNEL_DATA, SSH_MSG_CHANNEL_INPUT_EOF,
69          SSH_MSG_CHANNEL_OUTPUT_CLOSED, SSH_MSG_OBSOLETED0,          SSH_MSG_CHANNEL_OUTPUT_CLOSED, SSH_MSG_OBSOLETED0,
70          SSH_SMSG_X11_OPEN, SSH_CMSG_PORT_FORWARD_REQUEST, SSH_MSG_PORT_OPEN,          SSH_SMSG_X11_OPEN, SSH_CMSG_PORT_FORWARD_REQUEST, SSH_MSG_PORT_OPEN,
71          SSH_CMSG_AGENT_REQUEST_FORWARDING, SSH_SMSG_AGENT_OPEN,          SSH_CMSG_AGENT_REQUEST_FORWARDING, SSH_SMSG_AGENT_OPEN,
72          SSH_MSG_IGNORE, SSH_CMSG_EXIT_CONFIRMATION,          SSH_MSG_IGNORE, SSH_CMSG_EXIT_CONFIRMATION,
73          SSH_CMSG_X11_REQUEST_FORWARDING, SSH_CMSG_AUTH_RHOSTS_RSA,          SSH_CMSG_X11_REQUEST_FORWARDING, SSH_CMSG_AUTH_RHOSTS_RSA,
74          SSH_MSG_DEBUG, SSH_CMSG_REQUEST_COMPRESSION,          SSH_MSG_DEBUG, SSH_CMSG_REQUEST_COMPRESSION,
75          SSH_CMSG_MAX_PACKET_SIZE, SSH_CMSG_AUTH_TIS,          SSH_CMSG_MAX_PACKET_SIZE, SSH_CMSG_AUTH_TIS,
76          SSH_SMSG_AUTH_TIS_CHALLENGE, SSH_CMSG_AUTH_TIS_RESPONSE,          SSH_SMSG_AUTH_TIS_CHALLENGE, SSH_CMSG_AUTH_TIS_RESPONSE,
77          SSH_CMSG_AUTH_KERBEROS, SSH_SMSG_AUTH_KERBEROS_RESPONSE          SSH_CMSG_AUTH_KERBEROS, SSH_SMSG_AUTH_KERBEROS_RESPONSE
78  } SSHMessage;  } SSHMessage;
79    
80  typedef enum {  typedef enum {
81          SSH_CIPHER_NONE, SSH_CIPHER_IDEA, SSH_CIPHER_DES, SSH_CIPHER_3DES,          SSH_CIPHER_NONE, SSH_CIPHER_IDEA, SSH_CIPHER_DES, SSH_CIPHER_3DES,
82          SSH_CIPHER_TSS, SSH_CIPHER_RC4, SSH_CIPHER_BLOWFISH,          SSH_CIPHER_TSS, SSH_CIPHER_RC4, SSH_CIPHER_BLOWFISH,
83          // for SSH2          // for SSH2
84          SSH2_CIPHER_3DES_CBC, SSH2_CIPHER_AES128_CBC,          SSH2_CIPHER_3DES_CBC, SSH2_CIPHER_AES128_CBC,
85          SSH2_CIPHER_AES192_CBC, SSH2_CIPHER_AES256_CBC,          SSH2_CIPHER_AES192_CBC, SSH2_CIPHER_AES256_CBC,
86          SSH2_CIPHER_BLOWFISH_CBC, SSH2_CIPHER_AES128_CTR,          SSH2_CIPHER_BLOWFISH_CBC, SSH2_CIPHER_AES128_CTR,
87          SSH2_CIPHER_AES192_CTR, SSH2_CIPHER_AES256_CTR,          SSH2_CIPHER_AES192_CTR, SSH2_CIPHER_AES256_CTR,
88          SSH2_CIPHER_ARCFOUR, SSH2_CIPHER_ARCFOUR128, SSH2_CIPHER_ARCFOUR256,          SSH2_CIPHER_ARCFOUR, SSH2_CIPHER_ARCFOUR128, SSH2_CIPHER_ARCFOUR256,
89          SSH2_CIPHER_CAST128_CBC,          SSH2_CIPHER_CAST128_CBC,
90  } SSHCipher;  } SSHCipher;
91    
92  #define SSH_CIPHER_MAX SSH2_CIPHER_CAST128_CBC  #define SSH_CIPHER_MAX SSH2_CIPHER_CAST128_CBC
93    
94  typedef enum {  typedef enum {
95          SSH_AUTH_NONE, SSH_AUTH_RHOSTS, SSH_AUTH_RSA, SSH_AUTH_PASSWORD,          SSH_AUTH_NONE, SSH_AUTH_RHOSTS, SSH_AUTH_RSA, SSH_AUTH_PASSWORD,
96          SSH_AUTH_RHOSTS_RSA, SSH_AUTH_TIS, SSH_AUTH_KERBEROS,          SSH_AUTH_RHOSTS_RSA, SSH_AUTH_TIS, SSH_AUTH_KERBEROS,
97          SSH_AUTH_PAGEANT = 16,          SSH_AUTH_PAGEANT = 16,
98  } SSHAuthMethod;  } SSHAuthMethod;
99    
100  #define SSH_AUTH_MAX SSH_AUTH_PAGEANT  #define SSH_AUTH_MAX SSH_AUTH_PAGEANT
101    
102  typedef enum {  typedef enum {
103          SSH_GENERIC_AUTHENTICATION, SSH_TIS_AUTHENTICATION          SSH_GENERIC_AUTHENTICATION, SSH_TIS_AUTHENTICATION
104  } SSHAuthMode;  } SSHAuthMode;
105    
106  #define SSH_PROTOFLAG_SCREEN_NUMBER 1  #define SSH_PROTOFLAG_SCREEN_NUMBER 1
107  #define SSH_PROTOFLAG_HOST_IN_FWD_OPEN 2  #define SSH_PROTOFLAG_HOST_IN_FWD_OPEN 2
108    
109  enum channel_type {  enum channel_type {
110          TYPE_SHELL, TYPE_PORTFWD, TYPE_SCP, TYPE_SFTP, TYPE_AGENT,          TYPE_SHELL, TYPE_PORTFWD, TYPE_SCP, TYPE_SFTP, TYPE_AGENT,
111  };  };
112    
113  // for SSH1  // for SSH1
114  #define SSH_MAX_SEND_PACKET_SIZE   250000  #define SSH_MAX_SEND_PACKET_SIZE   250000
115    
116  // for SSH2  // for SSH2
117  /* default window/packet sizes for tcp/x11-fwd-channel */  /* default window/packet sizes for tcp/x11-fwd-channel */
118  // changed CHAN_SES_WINDOW_DEFAULT from 32KB to 128KB. (2007.10.29 maya)  // changed CHAN_SES_WINDOW_DEFAULT from 32KB to 128KB. (2007.10.29 maya)
119  #define CHAN_SES_PACKET_DEFAULT (32*1024)  #define CHAN_SES_PACKET_DEFAULT (32*1024)
120  #define CHAN_SES_WINDOW_DEFAULT (4*CHAN_SES_PACKET_DEFAULT)  #define CHAN_SES_WINDOW_DEFAULT (4*CHAN_SES_PACKET_DEFAULT)
121  #define CHAN_TCP_PACKET_DEFAULT (32*1024)  #define CHAN_TCP_PACKET_DEFAULT (32*1024)
122  #define CHAN_TCP_WINDOW_DEFAULT (4*CHAN_TCP_PACKET_DEFAULT)  #define CHAN_TCP_WINDOW_DEFAULT (4*CHAN_TCP_PACKET_DEFAULT)
123  #if 0 // unused  #if 0 // unused
124  #define CHAN_X11_PACKET_DEFAULT (16*1024)  #define CHAN_X11_PACKET_DEFAULT (16*1024)
125  #define CHAN_X11_WINDOW_DEFAULT (4*CHAN_X11_PACKET_DEFAULT)  #define CHAN_X11_WINDOW_DEFAULT (4*CHAN_X11_PACKET_DEFAULT)
126  #endif  #endif
127    
128    
129  /* SSH2 constants */  /* SSH2 constants */
130    
131  /* SSH2 messages */  /* SSH2 messages */
132  #define SSH2_MSG_DISCONNECT             1  #define SSH2_MSG_DISCONNECT             1
133  #define SSH2_MSG_IGNORE                 2  #define SSH2_MSG_IGNORE                 2
134  #define SSH2_MSG_UNIMPLEMENTED          3  #define SSH2_MSG_UNIMPLEMENTED          3
135  #define SSH2_MSG_DEBUG                  4  #define SSH2_MSG_DEBUG                  4
136  #define SSH2_MSG_SERVICE_REQUEST        5  #define SSH2_MSG_SERVICE_REQUEST        5
137  #define SSH2_MSG_SERVICE_ACCEPT         6  #define SSH2_MSG_SERVICE_ACCEPT         6
138    
139  #define SSH2_MSG_KEXINIT                20  #define SSH2_MSG_KEXINIT                20
140  #define SSH2_MSG_NEWKEYS                21  #define SSH2_MSG_NEWKEYS                21
141    
142  #define SSH2_MSG_KEXDH_INIT             30  #define SSH2_MSG_KEXDH_INIT             30
143  #define SSH2_MSG_KEXDH_REPLY            31  #define SSH2_MSG_KEXDH_REPLY            31
144    
145  #define SSH2_MSG_KEX_DH_GEX_GROUP           31  #define SSH2_MSG_KEX_DH_GEX_GROUP           31
146  #define SSH2_MSG_KEX_DH_GEX_INIT            32  #define SSH2_MSG_KEX_DH_GEX_INIT            32
147  #define SSH2_MSG_KEX_DH_GEX_REPLY           33  #define SSH2_MSG_KEX_DH_GEX_REPLY           33
148  #define SSH2_MSG_KEX_DH_GEX_REQUEST         34  #define SSH2_MSG_KEX_DH_GEX_REQUEST         34
149    
150  #define SSH2_MSG_USERAUTH_REQUEST            50  #define SSH2_MSG_USERAUTH_REQUEST            50
151  #define SSH2_MSG_USERAUTH_FAILURE            51  #define SSH2_MSG_USERAUTH_FAILURE            51
152  #define SSH2_MSG_USERAUTH_SUCCESS            52  #define SSH2_MSG_USERAUTH_SUCCESS            52
153  #define SSH2_MSG_USERAUTH_BANNER             53  #define SSH2_MSG_USERAUTH_BANNER             53
154    
155  #define SSH2_MSG_USERAUTH_PK_OK              60  #define SSH2_MSG_USERAUTH_PK_OK              60
156  #define SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ   60  #define SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ   60
157  #define SSH2_MSG_USERAUTH_INFO_REQUEST          60  #define SSH2_MSG_USERAUTH_INFO_REQUEST          60
158  #define SSH2_MSG_USERAUTH_INFO_RESPONSE         61  #define SSH2_MSG_USERAUTH_INFO_RESPONSE         61
159    
160  #define SSH2_MSG_GLOBAL_REQUEST                  80  #define SSH2_MSG_GLOBAL_REQUEST                  80
161  #define SSH2_MSG_REQUEST_SUCCESS                 81  #define SSH2_MSG_REQUEST_SUCCESS                 81
162  #define SSH2_MSG_REQUEST_FAILURE                 82  #define SSH2_MSG_REQUEST_FAILURE                 82
163  #define SSH2_MSG_CHANNEL_OPEN                    90  #define SSH2_MSG_CHANNEL_OPEN                    90
164  #define SSH2_MSG_CHANNEL_OPEN_CONFIRMATION       91  #define SSH2_MSG_CHANNEL_OPEN_CONFIRMATION       91
165  #define SSH2_MSG_CHANNEL_OPEN_FAILURE            92  #define SSH2_MSG_CHANNEL_OPEN_FAILURE            92
166  #define SSH2_MSG_CHANNEL_WINDOW_ADJUST           93  #define SSH2_MSG_CHANNEL_WINDOW_ADJUST           93
167  #define SSH2_MSG_CHANNEL_DATA                    94  #define SSH2_MSG_CHANNEL_DATA                    94
168  #define SSH2_MSG_CHANNEL_EXTENDED_DATA           95  #define SSH2_MSG_CHANNEL_EXTENDED_DATA           95
169  #define SSH2_MSG_CHANNEL_EOF                     96  #define SSH2_MSG_CHANNEL_EOF                     96
170  #define SSH2_MSG_CHANNEL_CLOSE                   97  #define SSH2_MSG_CHANNEL_CLOSE                   97
171  #define SSH2_MSG_CHANNEL_REQUEST                 98  #define SSH2_MSG_CHANNEL_REQUEST                 98
172  #define SSH2_MSG_CHANNEL_SUCCESS                 99  #define SSH2_MSG_CHANNEL_SUCCESS                 99
173  #define SSH2_MSG_CHANNEL_FAILURE                 100  #define SSH2_MSG_CHANNEL_FAILURE                 100
174    
175  /* SSH2 miscellaneous constants */  /* SSH2 miscellaneous constants */
176  #define SSH2_DISCONNECT_HOST_NOT_ALLOWED_TO_CONNECT      1  #define SSH2_DISCONNECT_HOST_NOT_ALLOWED_TO_CONNECT      1
177  #define SSH2_DISCONNECT_PROTOCOL_ERROR                   2  #define SSH2_DISCONNECT_PROTOCOL_ERROR                   2
178  #define SSH2_DISCONNECT_KEY_EXCHANGE_FAILED              3  #define SSH2_DISCONNECT_KEY_EXCHANGE_FAILED              3
179  #define SSH2_DISCONNECT_HOST_AUTHENTICATION_FAILED       4  #define SSH2_DISCONNECT_HOST_AUTHENTICATION_FAILED       4
180  #define SSH2_DISCONNECT_MAC_ERROR                        5  #define SSH2_DISCONNECT_MAC_ERROR                        5
181  #define SSH2_DISCONNECT_COMPRESSION_ERROR                6  #define SSH2_DISCONNECT_COMPRESSION_ERROR                6
182  #define SSH2_DISCONNECT_SERVICE_NOT_AVAILABLE            7  #define SSH2_DISCONNECT_SERVICE_NOT_AVAILABLE            7
183  #define SSH2_DISCONNECT_PROTOCOL_VERSION_NOT_SUPPORTED   8  #define SSH2_DISCONNECT_PROTOCOL_VERSION_NOT_SUPPORTED   8
184  #define SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE          9  #define SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE          9
185  #define SSH2_DISCONNECT_CONNECTION_LOST                  10  #define SSH2_DISCONNECT_CONNECTION_LOST                  10
186  #define SSH2_DISCONNECT_BY_APPLICATION                   11  #define SSH2_DISCONNECT_BY_APPLICATION                   11
187    
188  #define SSH2_OPEN_ADMINISTRATIVELY_PROHIBITED    1  #define SSH2_OPEN_ADMINISTRATIVELY_PROHIBITED    1
189  #define SSH2_OPEN_CONNECT_FAILED                 2  #define SSH2_OPEN_CONNECT_FAILED                 2
190  #define SSH2_OPEN_UNKNOWN_CHANNEL_TYPE           3  #define SSH2_OPEN_UNKNOWN_CHANNEL_TYPE           3
191  #define SSH2_OPEN_RESOURCE_SHORTAGE              4  #define SSH2_OPEN_RESOURCE_SHORTAGE              4
192    
193  // キー交換アルゴリズム  // キー交換アルゴリズム
194  #define KEX_DH1     "diffie-hellman-group1-sha1"  #define KEX_DH1     "diffie-hellman-group1-sha1"
195  #define KEX_DH14    "diffie-hellman-group14-sha1"  #define KEX_DH14    "diffie-hellman-group14-sha1"
196  #define KEX_DHGEX   "diffie-hellman-group-exchange-sha1"  #define KEX_DHGEX   "diffie-hellman-group-exchange-sha1"
197    
198  // support of "Compression delayed" (2006.6.23 maya)  // support of "Compression delayed" (2006.6.23 maya)
199  enum compression_algorithm {  enum compression_algorithm {
200          COMP_NONE,          COMP_NONE,
201          COMP_ZLIB,          COMP_ZLIB,
202          COMP_DELAYED,          COMP_DELAYED,
203          COMP_UNKNOWN          COMP_UNKNOWN
204  };  };
205    
206  enum kex_exchange {  enum kex_exchange {
207          KEX_DH_GRP1_SHA1,          KEX_DH_GRP1_SHA1,
208          KEX_DH_GRP14_SHA1,          KEX_DH_GRP14_SHA1,
209          KEX_DH_GEX_SHA1,          KEX_DH_GEX_SHA1,
210          KEX_MAX          KEX_MAX
211  };  };
212    
213  enum hostkey_type {  enum hostkey_type {
214          KEY_RSA1,          KEY_RSA1,
215          KEY_RSA,          KEY_RSA,
216          KEY_DSA,          KEY_DSA,
217          KEY_UNSPEC,          KEY_UNSPEC,
218  };  };
219    
220  // 下記のインデックスは ssh2_macs[] と合わせること。  // 下記のインデックスは ssh2_macs[] と合わせること。
221  enum hmac_type {  enum hmac_type {
222          HMAC_SHA1,          HMAC_SHA1,
223          HMAC_MD5,          HMAC_MD5,
224          HMAC_UNKNOWN          HMAC_UNKNOWN
225  };  };
226    
227  #define KEX_DEFAULT_KEX     "diffie-hellman-group-exchange-sha1," \  #define KEX_DEFAULT_KEX     "diffie-hellman-group-exchange-sha1," \
228                              "diffie-hellman-group14-sha1," \                              "diffie-hellman-group14-sha1," \
229                              "diffie-hellman-group1-sha1"                              "diffie-hellman-group1-sha1"
230  #define KEX_DEFAULT_PK_ALG  "ssh-rsa,ssh-dss"  #define KEX_DEFAULT_PK_ALG  "ssh-rsa,ssh-dss"
231  // use the setting of pvar.CipherOrder.  // use the setting of pvar.CipherOrder.
232  #define KEX_DEFAULT_ENCRYPT ""  #define KEX_DEFAULT_ENCRYPT ""
233  #define KEX_DEFAULT_MAC     "hmac-sha1,hmac-md5"  #define KEX_DEFAULT_MAC     "hmac-sha1,hmac-md5"
234  // support of "Compression delayed" (2006.6.23 maya)  // support of "Compression delayed" (2006.6.23 maya)
235  #define KEX_DEFAULT_COMP        "none,zlib@openssh.com,zlib"  #define KEX_DEFAULT_COMP        "none,zlib@openssh.com,zlib"
236  #define KEX_DEFAULT_LANG        ""  #define KEX_DEFAULT_LANG        ""
237    
238  /* Minimum modulus size (n) for RSA keys. */  /* Minimum modulus size (n) for RSA keys. */
239  #define SSH_RSA_MINIMUM_MODULUS_SIZE    768  #define SSH_RSA_MINIMUM_MODULUS_SIZE    768
240    
241  #define SSH_KEYGEN_DEFAULT_BITS   2048  #define SSH_KEYGEN_DEFAULT_BITS   2048
242  #define SSH_RSA_MINIMUM_KEY_SIZE   768  #define SSH_RSA_MINIMUM_KEY_SIZE   768
243  #define SSH_DSA_MINIMUM_KEY_SIZE  1024  #define SSH_DSA_MINIMUM_KEY_SIZE  1024
244    
245  enum kex_init_proposals {  enum kex_init_proposals {
246          PROPOSAL_KEX_ALGS,          PROPOSAL_KEX_ALGS,
247          PROPOSAL_SERVER_HOST_KEY_ALGS,          PROPOSAL_SERVER_HOST_KEY_ALGS,
248          PROPOSAL_ENC_ALGS_CTOS,          PROPOSAL_ENC_ALGS_CTOS,
249          PROPOSAL_ENC_ALGS_STOC,          PROPOSAL_ENC_ALGS_STOC,
250          PROPOSAL_MAC_ALGS_CTOS,          PROPOSAL_MAC_ALGS_CTOS,
251          PROPOSAL_MAC_ALGS_STOC,          PROPOSAL_MAC_ALGS_STOC,
252          PROPOSAL_COMP_ALGS_CTOS,          PROPOSAL_COMP_ALGS_CTOS,
253          PROPOSAL_COMP_ALGS_STOC,          PROPOSAL_COMP_ALGS_STOC,
254          PROPOSAL_LANG_CTOS,          PROPOSAL_LANG_CTOS,
255          PROPOSAL_LANG_STOC,          PROPOSAL_LANG_STOC,
256          PROPOSAL_MAX          PROPOSAL_MAX
257  };  };
258    
259    
260  // クライアントからサーバへの提案事項  // クライアントからサーバへの提案事項
261  #ifdef SSH2_DEBUG  #ifdef SSH2_DEBUG
262  static char *myproposal[PROPOSAL_MAX] = {  static char *myproposal[PROPOSAL_MAX] = {
263  //      KEX_DEFAULT_KEX,  //      KEX_DEFAULT_KEX,
264          "diffie-hellman-group14-sha1,diffie-hellman-group1-sha1,diffie-hellman-group-exchange-sha1",          "diffie-hellman-group14-sha1,diffie-hellman-group1-sha1,diffie-hellman-group-exchange-sha1",
265          KEX_DEFAULT_PK_ALG,          KEX_DEFAULT_PK_ALG,
266  //      "ssh-dss,ssh-rsa",  //      "ssh-dss,ssh-rsa",
267          KEX_DEFAULT_ENCRYPT,          KEX_DEFAULT_ENCRYPT,
268          KEX_DEFAULT_ENCRYPT,          KEX_DEFAULT_ENCRYPT,
269          "hmac-md5,hmac-sha1",          "hmac-md5,hmac-sha1",
270          "hmac-md5,hmac-sha1",          "hmac-md5,hmac-sha1",
271  //      "hmac-sha1",  //      "hmac-sha1",
272  //      "hmac-sha1",  //      "hmac-sha1",
273  //      KEX_DEFAULT_MAC,  //      KEX_DEFAULT_MAC,
274  //      KEX_DEFAULT_MAC,  //      KEX_DEFAULT_MAC,
275          KEX_DEFAULT_COMP,          KEX_DEFAULT_COMP,
276          KEX_DEFAULT_COMP,          KEX_DEFAULT_COMP,
277          KEX_DEFAULT_LANG,          KEX_DEFAULT_LANG,
278          KEX_DEFAULT_LANG,          KEX_DEFAULT_LANG,
279  };  };
280  #else  #else
281  static char *myproposal[PROPOSAL_MAX] = {  static char *myproposal[PROPOSAL_MAX] = {
282          KEX_DEFAULT_KEX,          KEX_DEFAULT_KEX,
283          KEX_DEFAULT_PK_ALG,          KEX_DEFAULT_PK_ALG,
284          KEX_DEFAULT_ENCRYPT,          KEX_DEFAULT_ENCRYPT,
285          KEX_DEFAULT_ENCRYPT,          KEX_DEFAULT_ENCRYPT,
286          KEX_DEFAULT_MAC,          KEX_DEFAULT_MAC,
287          KEX_DEFAULT_MAC,          KEX_DEFAULT_MAC,
288          KEX_DEFAULT_COMP,          KEX_DEFAULT_COMP,
289          KEX_DEFAULT_COMP,          KEX_DEFAULT_COMP,
290          KEX_DEFAULT_LANG,          KEX_DEFAULT_LANG,
291          KEX_DEFAULT_LANG,          KEX_DEFAULT_LANG,
292  };  };
293  #endif  #endif
294    
295    
296  typedef struct ssh2_cipher {  typedef struct ssh2_cipher {
297          SSHCipher cipher;          SSHCipher cipher;
298          char *name;          char *name;
299          int block_size;          int block_size;
300          int key_len;          int key_len;
301          int discard_len;          int discard_len;
302          const EVP_CIPHER *(*func)(void);          const EVP_CIPHER *(*func)(void);
303  } ssh2_cipher_t;  } ssh2_cipher_t;
304    
305  static ssh2_cipher_t ssh2_ciphers[] = {  static ssh2_cipher_t ssh2_ciphers[] = {
306          {SSH2_CIPHER_3DES_CBC,     "3des-cbc",      8, 24, 0, EVP_des_ede3_cbc},          {SSH2_CIPHER_3DES_CBC,     "3des-cbc",      8, 24, 0, EVP_des_ede3_cbc},
307          {SSH2_CIPHER_AES128_CBC,   "aes128-cbc",   16, 16, 0, EVP_aes_128_cbc},          {SSH2_CIPHER_AES128_CBC,   "aes128-cbc",   16, 16, 0, EVP_aes_128_cbc},
308          {SSH2_CIPHER_AES192_CBC,   "aes192-cbc",   16, 24, 0, EVP_aes_192_cbc},          {SSH2_CIPHER_AES192_CBC,   "aes192-cbc",   16, 24, 0, EVP_aes_192_cbc},
309          {SSH2_CIPHER_AES256_CBC,   "aes256-cbc",   16, 32, 0, EVP_aes_256_cbc},          {SSH2_CIPHER_AES256_CBC,   "aes256-cbc",   16, 32, 0, EVP_aes_256_cbc},
310          {SSH2_CIPHER_BLOWFISH_CBC, "blowfish-cbc",  8, 16, 0, EVP_bf_cbc},          {SSH2_CIPHER_BLOWFISH_CBC, "blowfish-cbc",  8, 16, 0, EVP_bf_cbc},
311          {SSH2_CIPHER_AES128_CTR,   "aes128-ctr",   16, 16, 0, evp_aes_128_ctr},          {SSH2_CIPHER_AES128_CTR,   "aes128-ctr",   16, 16, 0, evp_aes_128_ctr},
312          {SSH2_CIPHER_AES192_CTR,   "aes192-ctr",   16, 24, 0, evp_aes_128_ctr},          {SSH2_CIPHER_AES192_CTR,   "aes192-ctr",   16, 24, 0, evp_aes_128_ctr},
313          {SSH2_CIPHER_AES256_CTR,   "aes256-ctr",   16, 32, 0, evp_aes_128_ctr},          {SSH2_CIPHER_AES256_CTR,   "aes256-ctr",   16, 32, 0, evp_aes_128_ctr},
314          {SSH2_CIPHER_ARCFOUR,      "arcfour",       8, 16, 0, EVP_rc4},          {SSH2_CIPHER_ARCFOUR,      "arcfour",       8, 16, 0, EVP_rc4},
315          {SSH2_CIPHER_ARCFOUR128,   "arcfour128",    8, 16, 1536, EVP_rc4},          {SSH2_CIPHER_ARCFOUR128,   "arcfour128",    8, 16, 1536, EVP_rc4},
316          {SSH2_CIPHER_ARCFOUR256,   "arcfour256",    8, 32, 1536, EVP_rc4},          {SSH2_CIPHER_ARCFOUR256,   "arcfour256",    8, 32, 1536, EVP_rc4},
317          {SSH2_CIPHER_CAST128_CBC,  "cast128-cbc",   8, 16, 0, EVP_cast5_cbc},          {SSH2_CIPHER_CAST128_CBC,  "cast128-cbc",   8, 16, 0, EVP_cast5_cbc},
318          {SSH_CIPHER_NONE, NULL, 0, 0, 0, NULL},          {SSH_CIPHER_NONE, NULL, 0, 0, 0, NULL},
319  };  };
320    
321    
322  typedef struct ssh2_mac {  typedef struct ssh2_mac {
323          char *name;          char *name;
324          const EVP_MD *(*func)(void);          const EVP_MD *(*func)(void);
325          int truncatebits;          int truncatebits;
326  } ssh2_mac_t;  } ssh2_mac_t;
327    
328  static ssh2_mac_t ssh2_macs[] = {  static ssh2_mac_t ssh2_macs[] = {
329          {"hmac-sha1", EVP_sha1, 0},          {"hmac-sha1", EVP_sha1, 0},
330          {"hmac-md5", EVP_md5, 0},          {"hmac-md5", EVP_md5, 0},
331          {NULL, NULL, 0},          {NULL, NULL, 0},
332  };  };
333    
334  static char *ssh_comp[] = {  static char *ssh_comp[] = {
335          "none",          "none",
336          "zlib",          "zlib",
337          "zlib@openssh.com",          "zlib@openssh.com",
338  };  };
339    
340    
341  struct Enc {  struct Enc {
342          u_char          *key;          u_char          *key;
343          u_char          *iv;          u_char          *iv;
344          unsigned int    key_len;          unsigned int    key_len;
345          unsigned int    block_size;          unsigned int    block_size;
346  };  };
347    
348  struct Mac {  struct Mac {
349          char            *name;          char            *name;
350          int             enabled;          int             enabled;
351          const EVP_MD    *md;          const EVP_MD    *md;
352          int             mac_len;          int             mac_len;
353          u_char          *key;          u_char          *key;
354          int             key_len;          int             key_len;
355  };  };
356    
357  struct Comp {  struct Comp {
358          int     type;          int     type;
359          int     enabled;          int     enabled;
360          char    *name;          char    *name;
361  };  };
362    
363  typedef struct {  typedef struct {
364          struct Enc  enc;          struct Enc  enc;
365          struct Mac  mac;          struct Mac  mac;
366          struct Comp comp;          struct Comp comp;
367  } Newkeys;  } Newkeys;
368    
369  #define roundup(x, y)   ((((x)+((y)-1))/(y))*(y))  #define roundup(x, y)   ((((x)+((y)-1))/(y))*(y))
370    
371  enum kex_modes {  enum kex_modes {
372          MODE_IN,          MODE_IN,
373          MODE_OUT,          MODE_OUT,
374          MODE_MAX          MODE_MAX
375  };  };
376    
377    
378  // ホストキー(SSH1, SSH2含む)のデータ構造 (2006.3.21 yutaka)  // ホストキー(SSH1, SSH2含む)のデータ構造 (2006.3.21 yutaka)
379  typedef struct Key {  typedef struct Key {
380          // host key type          // host key type
381          enum hostkey_type type;          enum hostkey_type type;
382          // SSH2 RSA          // SSH2 RSA
383          RSA *rsa;          RSA *rsa;
384          // SSH2 DSA          // SSH2 DSA
385          DSA *dsa;          DSA *dsa;
386          // SSH1 RSA          // SSH1 RSA
387          int bits;          int bits;
388          unsigned char *exp;          unsigned char *exp;
389          unsigned char *mod;          unsigned char *mod;
390  } Key;  } Key;
391    
392  // fingerprintの種別  // fingerprintの種別
393  enum fp_rep {  enum fp_rep {
394          SSH_FP_HEX,          SSH_FP_HEX,
395          SSH_FP_BUBBLEBABBLE,          SSH_FP_BUBBLEBABBLE,
396          SSH_FP_RANDOMART          SSH_FP_RANDOMART
397  };  };
398    
399  enum scp_dir {  enum scp_dir {
400          TOLOCAL, FROMREMOTE,          TOLOCAL, FROMREMOTE,
401  };  };
402    
403  /* The packet handler returns TRUE to keep the handler in place,  /* The packet handler returns TRUE to keep the handler in place,
404     FALSE to remove the handler. */     FALSE to remove the handler. */
405  typedef BOOL (* SSHPacketHandler)(PTInstVar pvar);  typedef BOOL (* SSHPacketHandler)(PTInstVar pvar);
406    
407  typedef struct _SSHPacketHandlerItem SSHPacketHandlerItem;  typedef struct _SSHPacketHandlerItem SSHPacketHandlerItem;
408  struct _SSHPacketHandlerItem {  struct _SSHPacketHandlerItem {
409          SSHPacketHandler handler;          SSHPacketHandler handler;
410          /* Circular list of handlers for given message */          /* Circular list of handlers for given message */
411          SSHPacketHandlerItem FAR * next_for_message;          SSHPacketHandlerItem FAR * next_for_message;
412          SSHPacketHandlerItem FAR * last_for_message;          SSHPacketHandlerItem FAR * last_for_message;
413          /* Circular list of handlers in set */          /* Circular list of handlers in set */
414          SSHPacketHandlerItem FAR * next_in_set;          SSHPacketHandlerItem FAR * next_in_set;
415          int active_for_message;          int active_for_message;
416  };  };
417    
418  typedef struct {  typedef struct {
419          char FAR * hostname;          char FAR * hostname;
420    
421          int server_protocol_flags;          int server_protocol_flags;
422          char FAR * server_ID;          char FAR * server_ID;
423    
424          /* This buffer is used to hold the outgoing data, and encrypted in-place          /* This buffer is used to hold the outgoing data, and encrypted in-place
425             here if necessary. */             here if necessary. */
426          unsigned char FAR * outbuf;          unsigned char FAR * outbuf;
427          long outbuflen;          long outbuflen;
428          /* This buffer is used by the SSH protocol processing to store uncompressed          /* This buffer is used by the SSH protocol processing to store uncompressed
429             packet data for compression. User data is never streamed through here;             packet data for compression. User data is never streamed through here;
430             it is compressed directly from the user's buffer. */             it is compressed directly from the user's buffer. */
431          unsigned char FAR * precompress_outbuf;          unsigned char FAR * precompress_outbuf;
432          long precompress_outbuflen;          long precompress_outbuflen;
433          /* this is the length of the packet data, including the type header */          /* this is the length of the packet data, including the type header */
434          long outgoing_packet_len;          long outgoing_packet_len;
435    
436          /* This buffer is used by the SSH protocol processing to store decompressed          /* This buffer is used by the SSH protocol processing to store decompressed
437             packet data. User data is never streamed through here; it is decompressed             packet data. User data is never streamed through here; it is decompressed
438             directly to the user's buffer. */             directly to the user's buffer. */
439          unsigned char FAR * postdecompress_inbuf;          unsigned char FAR * postdecompress_inbuf;
440          long postdecompress_inbuflen;          long postdecompress_inbuflen;
441    
442          unsigned char FAR * payload;          unsigned char FAR * payload;
443          long payload_grabbed;          long payload_grabbed;
444          long payloadlen;          long payloadlen;
445          long payload_datastart;          long payload_datastart;
446          long payload_datalen;          long payload_datalen;
447    
448          uint32 receiver_sequence_number;          uint32 receiver_sequence_number;
449          uint32 sender_sequence_number;          uint32 sender_sequence_number;
450    
451          z_stream compress_stream;          z_stream compress_stream;
452          z_stream decompress_stream;          z_stream decompress_stream;
453          BOOL compressing;          BOOL compressing;
454          BOOL decompressing;          BOOL decompressing;
455          int compression_level;          int compression_level;
456    
457          SSHPacketHandlerItem FAR * packet_handlers[256];          SSHPacketHandlerItem FAR * packet_handlers[256];
458          int status_flags;          int status_flags;
459    
460          int win_cols;          int win_cols;
461          int win_rows;          int win_rows;
462    
463          unsigned short tcpport;          unsigned short tcpport;
464  } SSHState;  } SSHState;
465    
466  #define STATUS_DONT_SEND_USER_NAME            0x01  #define STATUS_DONT_SEND_USER_NAME            0x01
467  #define STATUS_EXPECTING_COMPRESSION_RESPONSE 0x02  #define STATUS_EXPECTING_COMPRESSION_RESPONSE 0x02
468  #define STATUS_DONT_SEND_CREDENTIALS          0x04  #define STATUS_DONT_SEND_CREDENTIALS          0x04
469  #define STATUS_HOST_OK                        0x08  #define STATUS_HOST_OK                        0x08
470  #define STATUS_INTERACTIVE                    0x10  #define STATUS_INTERACTIVE                    0x10
471  #define STATUS_IN_PARTIAL_ID_STRING           0x20  #define STATUS_IN_PARTIAL_ID_STRING           0x20
472    
473  void SSH_init(PTInstVar pvar);  void SSH_init(PTInstVar pvar);
474  void SSH_open(PTInstVar pvar);  void SSH_open(PTInstVar pvar);
475  void SSH_notify_disconnecting(PTInstVar pvar, char FAR * reason);  void SSH_notify_disconnecting(PTInstVar pvar, char FAR * reason);
476  /* SSH_handle_server_ID returns TRUE iff a valid ID string has been  /* SSH_handle_server_ID returns TRUE iff a valid ID string has been
477     received. If it returns FALSE, we need to keep looking for another     received. If it returns FALSE, we need to keep looking for another
478     ID string. */     ID string. */
479  BOOL SSH_handle_server_ID(PTInstVar pvar, char FAR * ID, int ID_len);  BOOL SSH_handle_server_ID(PTInstVar pvar, char FAR * ID, int ID_len);
480  /* SSH_handle_packet requires NO PAYLOAD on entry.  /* SSH_handle_packet requires NO PAYLOAD on entry.
481     'len' is the size of the packet: payload + padding (+ CRC for SSHv1)     'len' is the size of the packet: payload + padding (+ CRC for SSHv1)
482     'padding' is the size of the padding.     'padding' is the size of the padding.
483     'data' points to the start of the packet data (the length field)     'data' points to the start of the packet data (the length field)
484  */  */
485  void SSH_handle_packet(PTInstVar pvar, char FAR * data, int len, int padding);  void SSH_handle_packet(PTInstVar pvar, char FAR * data, int len, int padding);
486  void SSH_notify_win_size(PTInstVar pvar, int cols, int rows);  void SSH_notify_win_size(PTInstVar pvar, int cols, int rows);
487  void SSH_notify_user_name(PTInstVar pvar);  void SSH_notify_user_name(PTInstVar pvar);
488  void SSH_notify_cred(PTInstVar pvar);  void SSH_notify_cred(PTInstVar pvar);
489  void SSH_notify_host_OK(PTInstVar pvar);  void SSH_notify_host_OK(PTInstVar pvar);
490  void SSH_send(PTInstVar pvar, unsigned char const FAR * buf, unsigned int buflen);  void SSH_send(PTInstVar pvar, unsigned char const FAR * buf, unsigned int buflen);
491  /* SSH_extract_payload returns number of bytes extracted */  /* SSH_extract_payload returns number of bytes extracted */
492  int SSH_extract_payload(PTInstVar pvar, unsigned char FAR * dest, int len);  int SSH_extract_payload(PTInstVar pvar, unsigned char FAR * dest, int len);
493  void SSH_end(PTInstVar pvar);  void SSH_end(PTInstVar pvar);
494    
495  void SSH_get_server_ID_info(PTInstVar pvar, char FAR * dest, int len);  void SSH_get_server_ID_info(PTInstVar pvar, char FAR * dest, int len);
496  void SSH_get_protocol_version_info(PTInstVar pvar, char FAR * dest, int len);  void SSH_get_protocol_version_info(PTInstVar pvar, char FAR * dest, int len);
497  void SSH_get_compression_info(PTInstVar pvar, char FAR * dest, int len);  void SSH_get_compression_info(PTInstVar pvar, char FAR * dest, int len);
498    
499  /* len must be <= SSH_MAX_SEND_PACKET_SIZE */  /* len must be <= SSH_MAX_SEND_PACKET_SIZE */
500  void SSH_channel_send(PTInstVar pvar, int channel_num,  void SSH_channel_send(PTInstVar pvar, int channel_num,
501                        uint32 remote_channel_num,                        uint32 remote_channel_num,
502                        unsigned char FAR * buf, int len);                        unsigned char FAR * buf, int len);
503  void SSH_fail_channel_open(PTInstVar pvar, uint32 remote_channel_num);  void SSH_fail_channel_open(PTInstVar pvar, uint32 remote_channel_num);
504  void SSH_confirm_channel_open(PTInstVar pvar, uint32 remote_channel_num, uint32 local_channel_num);  void SSH_confirm_channel_open(PTInstVar pvar, uint32 remote_channel_num, uint32 local_channel_num);
505  void SSH_channel_output_eof(PTInstVar pvar, uint32 remote_channel_num);  void SSH_channel_output_eof(PTInstVar pvar, uint32 remote_channel_num);
506  void SSH_channel_input_eof(PTInstVar pvar, uint32 remote_channel_num, uint32 local_channel_num);  void SSH_channel_input_eof(PTInstVar pvar, uint32 remote_channel_num, uint32 local_channel_num);
507  void SSH_request_forwarding(PTInstVar pvar, int from_server_port,  void SSH_request_forwarding(PTInstVar pvar, int from_server_port,
508    char FAR * to_local_host, int to_local_port);    char FAR * to_local_host, int to_local_port);
509  void SSH_request_X11_forwarding(PTInstVar pvar,  void SSH_request_X11_forwarding(PTInstVar pvar,
510    char FAR * auth_protocol, unsigned char FAR * auth_data, int auth_data_len, int screen_num);    char FAR * auth_protocol, unsigned char FAR * auth_data, int auth_data_len, int screen_num);
511  void SSH_open_channel(PTInstVar pvar, uint32 local_channel_num,  void SSH_open_channel(PTInstVar pvar, uint32 local_channel_num,
512                        char FAR * to_remote_host, int to_remote_port,                        char FAR * to_remote_host, int to_remote_port,
513                        char FAR * originator, unsigned short originator_port);                        char FAR * originator, unsigned short originator_port);
514    
515  int SSH_start_scp(PTInstVar pvar, char *sendfile, char *dstfile);  int SSH_start_scp(PTInstVar pvar, char *sendfile, char *dstfile);
516  int SSH_start_scp_receive(PTInstVar pvar, char *filename);  int SSH_start_scp_receive(PTInstVar pvar, char *filename);
517  int SSH_scp_transaction(PTInstVar pvar, char *sendfile, char *dstfile, enum scp_dir direction);  int SSH_scp_transaction(PTInstVar pvar, char *sendfile, char *dstfile, enum scp_dir direction);
518  int SSH_sftp_transaction(PTInstVar pvar);  int SSH_sftp_transaction(PTInstVar pvar);
519    
520  /* auxiliary SSH2 interfaces for pkt.c */  /* auxiliary SSH2 interfaces for pkt.c */
521  int SSH_get_min_packet_size(PTInstVar pvar);  int SSH_get_min_packet_size(PTInstVar pvar);
522  /* data is guaranteed to be at least SSH_get_min_packet_size bytes long  /* data is guaranteed to be at least SSH_get_min_packet_size bytes long
523     at least 5 bytes must be decrypted */     at least 5 bytes must be decrypted */
524  void SSH_predecrpyt_packet(PTInstVar pvar, char FAR * data);  void SSH_predecrpyt_packet(PTInstVar pvar, char FAR * data);
525  int SSH_get_clear_MAC_size(PTInstVar pvar);  int SSH_get_clear_MAC_size(PTInstVar pvar);
526    
527  #define SSH_is_any_payload(pvar) ((pvar)->ssh_state.payload_datalen > 0)  #define SSH_is_any_payload(pvar) ((pvar)->ssh_state.payload_datalen > 0)
528  #define SSH_get_host_name(pvar) ((pvar)->ssh_state.hostname)  #define SSH_get_host_name(pvar) ((pvar)->ssh_state.hostname)
529  #define SSH_get_compression_level(pvar) ((pvar)->ssh_state.compressing ? (pvar)->ts_SSH_CompressionLevel : 0)  #define SSH_get_compression_level(pvar) ((pvar)->ssh_state.compressing ? (pvar)->ts_SSH_CompressionLevel : 0)
530    
531  void SSH2_send_kexinit(PTInstVar pvar);  void SSH2_send_kexinit(PTInstVar pvar);
532  BOOL do_SSH2_userauth(PTInstVar pvar);  BOOL do_SSH2_userauth(PTInstVar pvar);
533  BOOL do_SSH2_authrequest(PTInstVar pvar);  BOOL do_SSH2_authrequest(PTInstVar pvar);
534  void debug_print(int no, char *msg, int len);  void debug_print(int no, char *msg, int len);
535  int get_cipher_block_size(SSHCipher cipher);  int get_cipher_block_size(SSHCipher cipher);
536  int get_cipher_key_len(SSHCipher cipher);  int get_cipher_key_len(SSHCipher cipher);
537  const EVP_CIPHER* get_cipher_EVP_CIPHER(SSHCipher cipher);  const EVP_CIPHER* get_cipher_EVP_CIPHER(SSHCipher cipher);
538  int get_cipher_discard_len(SSHCipher cipher);  int get_cipher_discard_len(SSHCipher cipher);
539  void ssh_heartbeat_lock_initialize(void);  void ssh_heartbeat_lock_initialize(void);
540  void ssh_heartbeat_lock_finalize(void);  void ssh_heartbeat_lock_finalize(void);
541  void ssh_heartbeat_lock(void);  void ssh_heartbeat_lock(void);
542  void ssh_heartbeat_unlock(void);  void ssh_heartbeat_unlock(void);
543  void halt_ssh_heartbeat_thread(PTInstVar pvar);  void halt_ssh_heartbeat_thread(PTInstVar pvar);
544  void ssh2_channel_free(void);  void ssh2_channel_free(void);
545  BOOL handle_SSH2_userauth_inforeq(PTInstVar pvar);  BOOL handle_SSH2_userauth_inforeq(PTInstVar pvar);
546  void SSH2_update_compression_myproposal(PTInstVar pvar);  void SSH2_update_compression_myproposal(PTInstVar pvar);
547  void SSH2_update_cipher_myproposal(PTInstVar pvar);  void SSH2_update_cipher_myproposal(PTInstVar pvar);
548    
549  enum hostkey_type get_keytype_from_name(char *name);  enum hostkey_type get_keytype_from_name(char *name);
550  char *get_sshname_from_key(Key *key);  char *get_sshname_from_key(Key *key);
551  int key_to_blob(Key *key, char **blobp, int *lenp);  int key_to_blob(Key *key, char **blobp, int *lenp);
552  Key *key_from_blob(char *data, int blen);  Key *key_from_blob(char *data, int blen);
553  void key_free(Key *key);  void key_free(Key *key);
554  RSA *duplicate_RSA(RSA *src);  RSA *duplicate_RSA(RSA *src);
555  DSA *duplicate_DSA(DSA *src);  DSA *duplicate_DSA(DSA *src);
556  char *key_fingerprint(Key *key, enum fp_rep dgst_rep);  char *key_fingerprint(Key *key, enum fp_rep dgst_rep);
557    
558  #endif  #endif

Legend:
Removed from v.3226  
changed lines
  Added in v.3227

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