| 181 |
uint32 padding; |
uint32 padding; |
| 182 |
uint32 pktsize; |
uint32 pktsize; |
| 183 |
uint32 total_packet_size; |
uint32 total_packet_size; |
| 184 |
|
struct Mac *mac = &pvar->ssh2_keys[MODE_IN].mac; |
| 185 |
|
int etm; |
| 186 |
|
|
| 187 |
|
etm = mac && mac->enabled && mac->etm; |
| 188 |
|
|
| 189 |
// 暗号化パケットの一部を復号化する。 |
// 暗号化パケットの一部を復号化する。 |
| 190 |
if (!pvar->pkt_state.predecrypted_packet) { |
if (!pvar->pkt_state.predecrypted_packet && !etm) { |
| 191 |
SSH_predecrpyt_packet(pvar, data); |
SSH_predecrpyt_packet(pvar, data); |
| 192 |
pvar->pkt_state.predecrypted_packet = TRUE; |
pvar->pkt_state.predecrypted_packet = TRUE; |
| 193 |
} |
} |
| 200 |
} else { |
} else { |
| 201 |
// SSH2のパケットは先頭に packet-size(4)+padding(1)+type(1) が続く。 |
// SSH2のパケットは先頭に packet-size(4)+padding(1)+type(1) が続く。 |
| 202 |
pktsize = get_uint32_MSBfirst(data); |
pktsize = get_uint32_MSBfirst(data); |
| 203 |
padding = (unsigned char) data[4]; |
if (etm) { |
| 204 |
|
padding = 0; |
| 205 |
|
} |
| 206 |
|
else { |
| 207 |
|
padding = (unsigned char) data[4]; |
| 208 |
|
} |
| 209 |
} |
} |
| 210 |
|
|
| 211 |
// パケット(TCPペイロード)の全体のサイズは、SSHペイロード+4(+MAC)となる。 |
// パケット(TCPペイロード)の全体のサイズは、SSHペイロード+4(+MAC)となる。 |
| 218 |
SSH_handle_packet1(pvar, data, pktsize, padding); |
SSH_handle_packet1(pvar, data, pktsize, padding); |
| 219 |
} |
} |
| 220 |
else { |
else { |
| 221 |
SSH_handle_packet2(pvar, data, pktsize, padding); |
SSH_handle_packet2(pvar, data, pktsize, padding, etm); |
| 222 |
} |
} |
| 223 |
pvar->pkt_state.predecrypted_packet = FALSE; |
pvar->pkt_state.predecrypted_packet = FALSE; |
| 224 |
|
|