version 1.70.2.3, 2002/05/17 00:03:23 |
version 1.70.2.4, 2002/06/22 07:23:17 |
|
|
#include "log.h" |
#include "log.h" |
#include "canohost.h" |
#include "canohost.h" |
#include "misc.h" |
#include "misc.h" |
|
#include "ssh.h" |
|
|
#ifdef PACKET_DEBUG |
#ifdef PACKET_DEBUG |
#define DBG(x) x |
#define DBG(x) x |
|
|
static u_int32_t read_seqnr = 0; |
static u_int32_t read_seqnr = 0; |
static u_int32_t send_seqnr = 0; |
static u_int32_t send_seqnr = 0; |
|
|
|
/* Session key for protocol v1 */ |
|
static u_char ssh1_key[SSH_SESSION_KEY_LENGTH]; |
|
static u_int ssh1_keylen; |
|
|
/* roundup current message to extra_pad bytes */ |
/* roundup current message to extra_pad bytes */ |
static u_char extra_pad = 0; |
static u_char extra_pad = 0; |
|
|
|
|
else if (mode == MODE_OUT) |
else if (mode == MODE_OUT) |
send_seqnr = seqnr; |
send_seqnr = seqnr; |
else |
else |
fatal("%s: bad mode %d", __FUNCTION__, mode); |
fatal("packet_set_seqnr: bad mode %d", mode); |
} |
} |
|
|
/* returns 1 if connection is via ipv4 */ |
/* returns 1 if connection is via ipv4 */ |
|
|
* key is used for both sending and reception. However, both directions are |
* key is used for both sending and reception. However, both directions are |
* encrypted independently of each other. |
* encrypted independently of each other. |
*/ |
*/ |
|
|
void |
void |
packet_set_encryption_key(const u_char *key, u_int keylen, |
packet_set_encryption_key(const u_char *key, u_int keylen, |
int number) |
int number) |
|
|
fatal("packet_set_encryption_key: unknown cipher number %d", number); |
fatal("packet_set_encryption_key: unknown cipher number %d", number); |
if (keylen < 20) |
if (keylen < 20) |
fatal("packet_set_encryption_key: keylen too small: %d", keylen); |
fatal("packet_set_encryption_key: keylen too small: %d", keylen); |
|
if (keylen > SSH_SESSION_KEY_LENGTH) |
|
fatal("packet_set_encryption_key: keylen too big: %d", keylen); |
|
memcpy(ssh1_key, key, keylen); |
|
ssh1_keylen = keylen; |
cipher_init(&send_context, cipher, key, keylen, NULL, 0, CIPHER_ENCRYPT); |
cipher_init(&send_context, cipher, key, keylen, NULL, 0, CIPHER_ENCRYPT); |
cipher_init(&receive_context, cipher, key, keylen, NULL, 0, CIPHER_DECRYPT); |
cipher_init(&receive_context, cipher, key, keylen, NULL, 0, CIPHER_DECRYPT); |
|
} |
|
|
|
u_int |
|
packet_get_encryption_key(u_char *key) |
|
{ |
|
if (key == NULL) |
|
return (ssh1_keylen); |
|
memcpy(key, ssh1_key, ssh1_keylen); |
|
return (ssh1_keylen); |
} |
} |
|
|
/* Start constructing a packet to send. */ |
/* Start constructing a packet to send. */ |