version 1.31, 2000/05/01 07:40:03 |
version 1.32, 2000/05/04 22:22:43 |
|
|
/* Compute packet length without padding (add checksum, remove padding). */ |
/* Compute packet length without padding (add checksum, remove padding). */ |
len = buffer_len(&outgoing_packet) + 4 - 8; |
len = buffer_len(&outgoing_packet) + 4 - 8; |
|
|
/* Insert padding. */ |
/* Insert padding. Initialized to zero in packet_start1() */ |
padding = 8 - len % 8; |
padding = 8 - len % 8; |
if (cipher_type != SSH_CIPHER_NONE) { |
if (cipher_type != SSH_CIPHER_NONE) { |
cp = buffer_ptr(&outgoing_packet); |
cp = buffer_ptr(&outgoing_packet); |
|
|
padlen += block_size; |
padlen += block_size; |
buffer_append_space(&outgoing_packet, &cp, padlen); |
buffer_append_space(&outgoing_packet, &cp, padlen); |
if (enc && enc->type != SSH_CIPHER_NONE) { |
if (enc && enc->type != SSH_CIPHER_NONE) { |
|
/* random padding */ |
for (i = 0; i < padlen; i++) { |
for (i = 0; i < padlen; i++) { |
if (i % 4 == 0) |
if (i % 4 == 0) |
rand = arc4random(); |
rand = arc4random(); |
cp[i] = rand & 0xff; |
cp[i] = rand & 0xff; |
rand <<= 8; |
rand <<= 8; |
} |
} |
|
} else { |
|
/* clear padding */ |
|
memset(cp, 0, padlen); |
} |
} |
/* packet_length includes payload, padding and padding length field */ |
/* packet_length includes payload, padding and padding length field */ |
packet_length = buffer_len(&outgoing_packet) - 4; |
packet_length = buffer_len(&outgoing_packet) - 4; |
|
|
for (;;) { |
for (;;) { |
/* Try to read a packet from the buffer. */ |
/* Try to read a packet from the buffer. */ |
type = packet_read_poll(payload_len_ptr); |
type = packet_read_poll(payload_len_ptr); |
if (type == SSH_SMSG_SUCCESS |
if (!use_ssh2_packet_format && ( |
|
type == SSH_SMSG_SUCCESS |
|| type == SSH_SMSG_FAILURE |
|| type == SSH_SMSG_FAILURE |
|| type == SSH_CMSG_EOF |
|| type == SSH_CMSG_EOF |
|| type == SSH_CMSG_EXIT_CONFIRMATION) |
|| type == SSH_CMSG_EXIT_CONFIRMATION)) |
packet_integrity_check(*payload_len_ptr, 0, type); |
packet_integrity_check(*payload_len_ptr, 0, type); |
/* If we got a packet, return it. */ |
/* If we got a packet, return it. */ |
if (type != SSH_MSG_NONE) |
if (type != SSH_MSG_NONE) |