diff --git a/src/transport_layer/stcp_client.c b/src/transport_layer/stcp_client.c index 556df72c..c5795e4f 100644 --- a/src/transport_layer/stcp_client.c +++ b/src/transport_layer/stcp_client.c @@ -53,11 +53,12 @@ static int encrypt_and_crc(struct stcp_conn *c, const uint8_t *data, size_t data static int decrypt_and_check(uint8_t *data, size_t len, struct sc_stream_state *stream, size_t *out_len) { if (sc_stream_xor(stream, data, len) != SC_OK) { DEBUG_ERROR(DEBUG_CATEGORY_ETCP, "stream_xor failed"); return -1; } + log_dump(DEBUG_LEVEL_ERROR, DEBUG_CATEGORY_DEBUG, "decrypt_and_check AFTER xor", data, len); size_t data_len = len - SC_CRC32_SIZE; uint32_t recv_crc = ((uint32_t)data[data_len]) | ((uint32_t)data[data_len + 1] << 8) | ((uint32_t)data[data_len + 2] << 16) | ((uint32_t)data[data_len + 3] << 24); uint32_t calc_crc = crc32_calc(data, data_len); - if (recv_crc != calc_crc) { DEBUG_ERROR(DEBUG_CATEGORY_ETCP, "CRC mismatch"); return -1; } + if (recv_crc != calc_crc) { DEBUG_ERROR(DEBUG_CATEGORY_ETCP, "CRC mismatch recv=%08x calc=%08x", recv_crc, calc_crc); return -1; } *out_len = data_len; return 0; } @@ -155,6 +156,7 @@ static void client_send_handshake(struct stcp_conn *c, const uint8_t *server_pub } static void process_server_response(struct stcp_conn *c) { + log_dump(DEBUG_LEVEL_ERROR, DEBUG_CATEGORY_DEBUG, "stcp_client process_srv_resp recv_buf", c->recv_buf, c->recv_buf_len); if (!c->hs_key_processed) { const uint8_t *salt = c->recv_buf; const uint8_t *enc_pubkey = salt + SC_PUBKEY_ENC_SALT_SIZE; diff --git a/src/transport_layer/stcp_server.c b/src/transport_layer/stcp_server.c index 4bcd6bae..da168c02 100644 --- a/src/transport_layer/stcp_server.c +++ b/src/transport_layer/stcp_server.c @@ -235,10 +235,12 @@ static void finish_client_handshake(struct stcp_conn *c) { DEBUG_ERROR(DEBUG_CATEGORY_ETCP, "encrypt failed"); u_free(resp); stcp_conn_do_close(c, 3); return; } + log_dump(DEBUG_LEVEL_ERROR, DEBUG_CATEGORY_DEBUG, "stcp_server hs_resp AFTER xor", enc_dst, STCP_HS_ENC_SERVER); for (int i = 0; i < padding; i++) resp[SC_PUBKEY_ENC_SIZE + STCP_HS_ENC_SERVER + i] = (uint8_t)(salt2[0] ^ i); c->state = STCP_STATE_DATA; DEBUG_INFO(DEBUG_CATEGORY_ETCP, "stcp_server: handshake OK, entering DATA state"); + log_dump(DEBUG_LEVEL_ERROR, DEBUG_CATEGORY_DEBUG, "stcp_server FULL RESP", resp, total_resp); if (c->on_ready) c->on_ready(c, c->ready_arg); stcp_conn_try_send(c, resp, total_resp); }