| 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 |
| 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 { |
| 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, |
| 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)) |
| 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 |
| 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); |
| 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); |
| 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); |