Develop and Download Open Source Software

Browse Subversion Repository

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

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

revision 2921 by yutakapon, Sun Oct 29 16:45:38 2006 UTC revision 3036 by maya, Tue Oct 16 15:28:14 2007 UTC
# Line 52  See LICENSE.TXT for the license. Line 52  See LICENSE.TXT for the license.
52  /* 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 */
53    
54  typedef enum {  typedef enum {
55      SSH_MSG_NONE, SSH_MSG_DISCONNECT, SSH_SMSG_PUBLIC_KEY, //2          SSH_MSG_NONE, SSH_MSG_DISCONNECT, SSH_SMSG_PUBLIC_KEY, //2
56      SSH_CMSG_SESSION_KEY, SSH_CMSG_USER, SSH_CMSG_AUTH_RHOSTS, // 5          SSH_CMSG_SESSION_KEY, SSH_CMSG_USER, SSH_CMSG_AUTH_RHOSTS, // 5
57      SSH_CMSG_AUTH_RSA, SSH_SMSG_AUTH_RSA_CHALLENGE,          SSH_CMSG_AUTH_RSA, SSH_SMSG_AUTH_RSA_CHALLENGE,
58      SSH_CMSG_AUTH_RSA_RESPONSE, SSH_CMSG_AUTH_PASSWORD,          SSH_CMSG_AUTH_RSA_RESPONSE, SSH_CMSG_AUTH_PASSWORD,
59      SSH_CMSG_REQUEST_PTY, // 10          SSH_CMSG_REQUEST_PTY, // 10
60          SSH_CMSG_WINDOW_SIZE, SSH_CMSG_EXEC_SHELL,          SSH_CMSG_WINDOW_SIZE, SSH_CMSG_EXEC_SHELL,
61      SSH_CMSG_EXEC_CMD, SSH_SMSG_SUCCESS, SSH_SMSG_FAILURE,          SSH_CMSG_EXEC_CMD, SSH_SMSG_SUCCESS, SSH_SMSG_FAILURE,
62      SSH_CMSG_STDIN_DATA, SSH_SMSG_STDOUT_DATA, SSH_SMSG_STDERR_DATA,          SSH_CMSG_STDIN_DATA, SSH_SMSG_STDOUT_DATA, SSH_SMSG_STDERR_DATA,
63      SSH_CMSG_EOF, SSH_SMSG_EXITSTATUS,          SSH_CMSG_EOF, SSH_SMSG_EXITSTATUS,
64      SSH_MSG_CHANNEL_OPEN_CONFIRMATION, SSH_MSG_CHANNEL_OPEN_FAILURE,          SSH_MSG_CHANNEL_OPEN_CONFIRMATION, SSH_MSG_CHANNEL_OPEN_FAILURE,
65      SSH_MSG_CHANNEL_DATA, SSH_MSG_CHANNEL_INPUT_EOF,          SSH_MSG_CHANNEL_DATA, SSH_MSG_CHANNEL_INPUT_EOF,
66      SSH_MSG_CHANNEL_OUTPUT_CLOSED, SSH_MSG_OBSOLETED0,          SSH_MSG_CHANNEL_OUTPUT_CLOSED, SSH_MSG_OBSOLETED0,
67      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,
68      SSH_CMSG_AGENT_REQUEST_FORWARDING, SSH_SMSG_AGENT_OPEN,          SSH_CMSG_AGENT_REQUEST_FORWARDING, SSH_SMSG_AGENT_OPEN,
69      SSH_MSG_IGNORE, SSH_CMSG_EXIT_CONFIRMATION,          SSH_MSG_IGNORE, SSH_CMSG_EXIT_CONFIRMATION,
70      SSH_CMSG_X11_REQUEST_FORWARDING, SSH_CMSG_AUTH_RHOSTS_RSA,          SSH_CMSG_X11_REQUEST_FORWARDING, SSH_CMSG_AUTH_RHOSTS_RSA,
71      SSH_MSG_DEBUG, SSH_CMSG_REQUEST_COMPRESSION,          SSH_MSG_DEBUG, SSH_CMSG_REQUEST_COMPRESSION,
72      SSH_CMSG_MAX_PACKET_SIZE, SSH_CMSG_AUTH_TIS,          SSH_CMSG_MAX_PACKET_SIZE, SSH_CMSG_AUTH_TIS,
73      SSH_SMSG_AUTH_TIS_CHALLENGE, SSH_CMSG_AUTH_TIS_RESPONSE,          SSH_SMSG_AUTH_TIS_CHALLENGE, SSH_CMSG_AUTH_TIS_RESPONSE,
74      SSH_CMSG_AUTH_KERBEROS, SSH_SMSG_AUTH_KERBEROS_RESPONSE          SSH_CMSG_AUTH_KERBEROS, SSH_SMSG_AUTH_KERBEROS_RESPONSE
75  } SSHMessage;  } SSHMessage;
76    
77  typedef enum {  typedef enum {
78      SSH_CIPHER_NONE, SSH_CIPHER_IDEA, SSH_CIPHER_DES, SSH_CIPHER_3DES,          SSH_CIPHER_NONE, SSH_CIPHER_IDEA, SSH_CIPHER_DES, SSH_CIPHER_3DES,
79      SSH_CIPHER_TSS, SSH_CIPHER_RC4, SSH_CIPHER_BLOWFISH,          SSH_CIPHER_TSS, SSH_CIPHER_RC4, SSH_CIPHER_BLOWFISH,
80          // for SSH2          // for SSH2
81          SSH_CIPHER_3DES_CBC, SSH_CIPHER_AES128,          SSH_CIPHER_3DES_CBC, SSH_CIPHER_AES128,SSH_CIPHER_AES256,
82  } SSHCipher;  } SSHCipher;
83    
84  //#define SSH_CIPHER_MAX SSH_CIPHER_BLOWFISH  #define SSH_CIPHER_MAX SSH_CIPHER_AES256
 #define SSH_CIPHER_MAX SSH_CIPHER_AES128  
85    
86  typedef enum {  typedef enum {
87      SSH_AUTH_NONE, SSH_AUTH_RHOSTS, SSH_AUTH_RSA, SSH_AUTH_PASSWORD,          SSH_AUTH_NONE, SSH_AUTH_RHOSTS, SSH_AUTH_RSA, SSH_AUTH_PASSWORD,
88      SSH_AUTH_RHOSTS_RSA, SSH_AUTH_TIS, SSH_AUTH_KERBEROS,          SSH_AUTH_RHOSTS_RSA, SSH_AUTH_TIS, SSH_AUTH_KERBEROS,
         // for SSH2  
         SSH_AUTH_DSA,  
89  } SSHAuthMethod;  } SSHAuthMethod;
90    
91  /* we don't support Kerberos at this time */  /* we don't support Kerberos at this time */
92  //#define SSH_AUTH_MAX SSH_AUTH_TIS  #define SSH_AUTH_MAX SSH_AUTH_TIS
 #define SSH_AUTH_MAX SSH_AUTH_DSA  
93    
94  typedef enum {  typedef enum {
95      SSH_GENERIC_AUTHENTICATION, SSH_TIS_AUTHENTICATION          SSH_GENERIC_AUTHENTICATION, SSH_TIS_AUTHENTICATION
96  } SSHAuthMode;  } SSHAuthMode;
97    
98  #define SSH_PROTOFLAG_SCREEN_NUMBER 1  #define SSH_PROTOFLAG_SCREEN_NUMBER 1
# Line 183  enum compression_algorithm { Line 179  enum compression_algorithm {
179  };  };
180    
181  enum kex_exchange {  enum kex_exchange {
182      KEX_DH_GRP1_SHA1,          KEX_DH_GRP1_SHA1,
183      KEX_DH_GRP14_SHA1,          KEX_DH_GRP14_SHA1,
184      KEX_DH_GEX_SHA1,          KEX_DH_GEX_SHA1,
185      KEX_MAX          KEX_MAX
186  };  };
187    
188  enum hostkey_type {  enum hostkey_type {
# Line 203  enum hmac_type { Line 199  enum hmac_type {
199          HMAC_UNKNOWN          HMAC_UNKNOWN
200  };  };
201    
202  #define KEX_DEFAULT_KEX     "diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1"  #define KEX_DEFAULT_KEX     "diffie-hellman-group-exchange-sha1," \
203                                "diffie-hellman-group14-sha1," \
204  #define KEX_DEFAULT_PK_ALG      "ssh-rsa,ssh-dss"                              "diffie-hellman-group1-sha1"
205  #define KEX_DEFAULT_ENCRYPT \  #define KEX_DEFAULT_PK_ALG  "ssh-rsa,ssh-dss"
206          "aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour," \  #ifdef SSH2_BLOWFISH
207          "aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se," \  #define KEX_DEFAULT_ENCRYPT "aes128-cbc,3des-cbc,blowfish-cbc,aes192-cbc,aes256-cbc"
208          "aes128-ctr,aes192-ctr,aes256-ctr"  #else
209  #define KEX_DEFAULT_MAC \  #define KEX_DEFAULT_ENCRYPT "aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc"
210          "hmac-md5,hmac-sha1,hmac-ripemd160," \  #endif
211          "hmac-ripemd160@openssh.com," \  #define KEX_DEFAULT_MAC     "hmac-sha1,hmac-md5"
         "hmac-sha1-96,hmac-md5-96"  
212  // support of "Compression delayed" (2006.6.23 maya)  // support of "Compression delayed" (2006.6.23 maya)
213  #define KEX_DEFAULT_COMP        "none,zlib@openssh.com,zlib"  #define KEX_DEFAULT_COMP        "none,zlib@openssh.com,zlib"
214  #define KEX_DEFAULT_LANG        ""  #define KEX_DEFAULT_LANG        ""
215    
216  /* Minimum modulus size (n) for RSA keys. */  /* Minimum modulus size (n) for RSA keys. */
217  #define SSH_RSA_MINIMUM_MODULUS_SIZE    768  #define SSH_RSA_MINIMUM_MODULUS_SIZE    768
218    
   
219  enum kex_init_proposals {  enum kex_init_proposals {
220          PROPOSAL_KEX_ALGS,          PROPOSAL_KEX_ALGS,
221          PROPOSAL_SERVER_HOST_KEY_ALGS,          PROPOSAL_SERVER_HOST_KEY_ALGS,
# Line 236  enum kex_init_proposals { Line 230  enum kex_init_proposals {
230          PROPOSAL_MAX          PROPOSAL_MAX
231  };  };
232    
233    
234    // クライアントからサーバへの提案事項
235    #ifdef SSH2_DEBUG
236    static char *myproposal[PROPOSAL_MAX] = {
237    //      KEX_DEFAULT_KEX,
238            "diffie-hellman-group14-sha1,diffie-hellman-group1-sha1,diffie-hellman-group-exchange-sha1",
239            KEX_DEFAULT_PK_ALG,
240    //      "ssh-dss,ssh-rsa",
241            KEX_DEFAULT_ENCRYPT,
242            KEX_DEFAULT_ENCRYPT,
243            "hmac-md5,hmac-sha1",
244            "hmac-md5,hmac-sha1",
245    //      "hmac-sha1",
246    //      "hmac-sha1",
247    //      KEX_DEFAULT_MAC,
248    //      KEX_DEFAULT_MAC,
249            KEX_DEFAULT_COMP,
250            KEX_DEFAULT_COMP,
251            KEX_DEFAULT_LANG,
252            KEX_DEFAULT_LANG,
253    };
254    #else
255    static char *myproposal[PROPOSAL_MAX] = {
256            KEX_DEFAULT_KEX,
257            KEX_DEFAULT_PK_ALG,
258            KEX_DEFAULT_ENCRYPT,
259            KEX_DEFAULT_ENCRYPT,
260            KEX_DEFAULT_MAC,
261            KEX_DEFAULT_MAC,
262            KEX_DEFAULT_COMP,
263            KEX_DEFAULT_COMP,
264            KEX_DEFAULT_LANG,
265            KEX_DEFAULT_LANG,
266    };
267    #endif
268    
269    
270    typedef struct ssh2_cipher {
271            SSHCipher cipher;
272            char *name;
273            int block_size;
274            int key_len;
275            const EVP_CIPHER *(*func)(void);
276    } ssh2_cipher_t;
277    
278    static ssh2_cipher_t ssh2_ciphers[] = {
279            {SSH_CIPHER_3DES_CBC, "3des-cbc",      8, 24, EVP_des_ede3_cbc},
280            {SSH_CIPHER_AES128,   "aes128-cbc",   16, 16, EVP_aes_128_cbc},
281            {SSH_CIPHER_AES256,   "aes256-cbc",   16, 32, EVP_aes_256_cbc},
282    #ifdef SSH2_BLOWFISH
283            {SSH_CIPHER_BLOWFISH, "blowfish-cbc",  8, 32, EVP_enc_null}, // func は使用されない
284    #endif
285            {SSH_CIPHER_NONE, NULL, 0, 0, NULL},
286    };
287    
288    
289    typedef struct ssh2_mac {
290            char *name;
291            const EVP_MD *(*func)(void);
292            int truncatebits;
293    } ssh2_mac_t;
294    
295    static ssh2_mac_t ssh2_macs[] = {
296            {"hmac-sha1", EVP_sha1, 0},
297            {"hmac-md5", EVP_md5, 0},
298            {NULL, NULL, 0},
299    };
300    
301    static char *ssh_comp[] = {
302            "none",
303            "zlib",
304            "zlib@openssh.com",
305    };
306    
307    
308  struct Enc {  struct Enc {
309          u_char  *key;          u_char          *key;
310          u_char  *iv;          u_char          *iv;
311          unsigned int key_len;          unsigned int    key_len;
312          unsigned int block_size;          unsigned int    block_size;
313  };  };
314    
315  struct Mac {  struct Mac {
316      char    *name;          char            *name;
317      int enabled;          int             enabled;
318      const EVP_MD    *md;          const EVP_MD    *md;
319      int mac_len;          int             mac_len;
320      u_char  *key;          u_char          *key;
321      int key_len;          int             key_len;
322  };  };
323    
324  struct Comp {  struct Comp {
325          int     type;          int     type;
326          int     enabled;          int     enabled;
327          char    *name;          char    *name;
328  };  };
329    
330  typedef struct {  typedef struct {
331          struct Enc      enc;          struct Enc  enc;
332          struct Mac      mac;          struct Mac  mac;
333          struct Comp     comp;          struct Comp comp;
334  } Newkeys;  } Newkeys;
335    
336  #define roundup(x, y)   ((((x)+((y)-1))/(y))*(y))  #define roundup(x, y)   ((((x)+((y)-1))/(y))*(y))
# Line 294  typedef BOOL (* SSHPacketHandler)(PTInst Line 363  typedef BOOL (* SSHPacketHandler)(PTInst
363    
364  typedef struct _SSHPacketHandlerItem SSHPacketHandlerItem;  typedef struct _SSHPacketHandlerItem SSHPacketHandlerItem;
365  struct _SSHPacketHandlerItem {  struct _SSHPacketHandlerItem {
366    SSHPacketHandler handler;          SSHPacketHandler handler;
367    /* Circular list of handlers for given message */          /* Circular list of handlers for given message */
368    SSHPacketHandlerItem FAR * next_for_message;          SSHPacketHandlerItem FAR * next_for_message;
369    SSHPacketHandlerItem FAR * last_for_message;          SSHPacketHandlerItem FAR * last_for_message;
370    /* Circular list of handlers in set */          /* Circular list of handlers in set */
371    SSHPacketHandlerItem FAR * next_in_set;          SSHPacketHandlerItem FAR * next_in_set;
372    int active_for_message;          int active_for_message;
373  };  };
374    
375  typedef struct {  typedef struct {
376    char FAR * hostname;          char FAR * hostname;
377    
378    int server_protocol_flags;          int server_protocol_flags;
379    char FAR * server_ID;          char FAR * server_ID;
380    
381    /* 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
382       here if necessary. */             here if necessary. */
383    unsigned char FAR * outbuf;          unsigned char FAR * outbuf;
384    long outbuflen;          long outbuflen;
385    /* This buffer is used by the SSH protocol processing to store uncompressed          /* This buffer is used by the SSH protocol processing to store uncompressed
386       packet data for compression. User data is never streamed through here;             packet data for compression. User data is never streamed through here;
387       it is compressed directly from the user's buffer. */             it is compressed directly from the user's buffer. */
388    unsigned char FAR * precompress_outbuf;          unsigned char FAR * precompress_outbuf;
389    long precompress_outbuflen;          long precompress_outbuflen;
390    /* this is the length of the packet data, including the type header */          /* this is the length of the packet data, including the type header */
391    long outgoing_packet_len;          long outgoing_packet_len;
392    
393    /* This buffer is used by the SSH protocol processing to store decompressed          /* This buffer is used by the SSH protocol processing to store decompressed
394       packet data. User data is never streamed through here; it is decompressed             packet data. User data is never streamed through here; it is decompressed
395       directly to the user's buffer. */             directly to the user's buffer. */
396    unsigned char FAR * postdecompress_inbuf;          unsigned char FAR * postdecompress_inbuf;
397    long postdecompress_inbuflen;          long postdecompress_inbuflen;
398    
399    unsigned char FAR * payload;          unsigned char FAR * payload;
400    long payload_grabbed;          long payload_grabbed;
401    long payloadlen;          long payloadlen;
402    long payload_datastart;          long payload_datastart;
403    long payload_datalen;          long payload_datalen;
404    
405    uint32 receiver_sequence_number;          uint32 receiver_sequence_number;
406    uint32 sender_sequence_number;          uint32 sender_sequence_number;
407    
408    z_stream compress_stream;          z_stream compress_stream;
409    z_stream decompress_stream;          z_stream decompress_stream;
410    BOOL compressing;          BOOL compressing;
411    BOOL decompressing;          BOOL decompressing;
412    int compression_level;          int compression_level;
413    
414    SSHPacketHandlerItem FAR * packet_handlers[256];          SSHPacketHandlerItem FAR * packet_handlers[256];
415    int status_flags;          int status_flags;
416    
417    int win_cols;          int win_cols;
418    int win_rows;          int win_rows;
419  } SSHState;  } SSHState;
420    
421  #define STATUS_DONT_SEND_USER_NAME            0x01  #define STATUS_DONT_SEND_USER_NAME            0x01
# Line 384  void SSH_get_compression_info(PTInstVar Line 453  void SSH_get_compression_info(PTInstVar
453    
454  /* len must be <= SSH_MAX_SEND_PACKET_SIZE */  /* len must be <= SSH_MAX_SEND_PACKET_SIZE */
455  void SSH_channel_send(PTInstVar pvar, int channel_num,  void SSH_channel_send(PTInstVar pvar, int channel_num,
456                                            uint32 remote_channel_num,                        uint32 remote_channel_num,
457                                            unsigned char FAR * buf, int len);                        unsigned char FAR * buf, int len);
458  void SSH_fail_channel_open(PTInstVar pvar, uint32 remote_channel_num);  void SSH_fail_channel_open(PTInstVar pvar, uint32 remote_channel_num);
459  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);
460  void SSH_channel_output_eof(PTInstVar pvar, uint32 remote_channel_num);  void SSH_channel_output_eof(PTInstVar pvar, uint32 remote_channel_num);
# Line 395  void SSH_request_forwarding(PTInstVar pv Line 464  void SSH_request_forwarding(PTInstVar pv
464  void SSH_request_X11_forwarding(PTInstVar pvar,  void SSH_request_X11_forwarding(PTInstVar pvar,
465    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);
466  void SSH_open_channel(PTInstVar pvar, uint32 local_channel_num,  void SSH_open_channel(PTInstVar pvar, uint32 local_channel_num,
467                                            char FAR * to_remote_host, int to_remote_port,                        char FAR * to_remote_host, int to_remote_port,
468                                            char FAR * originator, unsigned short originator_port);                        char FAR * originator, unsigned short originator_port);
469    
470  /* auxiliary SSH2 interfaces for pkt.c */  /* auxiliary SSH2 interfaces for pkt.c */
471  int SSH_get_min_packet_size(PTInstVar pvar);  int SSH_get_min_packet_size(PTInstVar pvar);
# Line 412  int SSH_get_clear_MAC_size(PTInstVar pva Line 481  int SSH_get_clear_MAC_size(PTInstVar pva
481  void SSH2_send_kexinit(PTInstVar pvar);  void SSH2_send_kexinit(PTInstVar pvar);
482  BOOL do_SSH2_userauth(PTInstVar pvar);  BOOL do_SSH2_userauth(PTInstVar pvar);
483  void debug_print(int no, char *msg, int len);  void debug_print(int no, char *msg, int len);
484    int get_cipher_block_size(SSHCipher cipher);
485    int get_cipher_key_len(SSHCipher cipher);
486    const EVP_CIPHER * (*get_cipher_EVP_CIPHER(SSHCipher cipher))(void);
487  void ssh_heartbeat_lock_initialize(void);  void ssh_heartbeat_lock_initialize(void);
488  void ssh_heartbeat_lock_finalize(void);  void ssh_heartbeat_lock_finalize(void);
489  void ssh_heartbeat_lock(void);  void ssh_heartbeat_lock(void);

Legend:
Removed from v.2921  
changed lines
  Added in v.3036

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