Fix Feedback State Encryption

This commit is contained in:
Florian Märkl 2019-06-30 16:30:26 +02:00
commit ebcf72fb10
No known key found for this signature in database
GPG key ID: 125BC8A5A6A1E857
3 changed files with 9 additions and 6 deletions

View file

@ -129,9 +129,9 @@ void StreamSession::SendFeedbackState()
return; return;
ChiakiControllerState state; ChiakiControllerState state;
state.left_x = static_cast<int16_t>(gamepad->axisLeftX() * 0x7fff); state.left_x = static_cast<int16_t>(gamepad->axisLeftX() * 0x7fff);
state.left_y = static_cast<int16_t>(gamepad->axisLeftX() * 0x7fff); state.left_y = static_cast<int16_t>(gamepad->axisLeftY() * 0x7fff);
state.right_x = static_cast<int16_t>(gamepad->axisLeftX() * 0x7fff); state.right_x = static_cast<int16_t>(gamepad->axisRightX() * 0x7fff);
state.right_y = static_cast<int16_t>(gamepad->axisLeftX() * 0x7fff); state.right_y = static_cast<int16_t>(gamepad->axisRightY() * 0x7fff);
chiaki_session_set_controller_state(&session, &state); chiaki_session_set_controller_state(&session, &state);
} }

View file

@ -229,7 +229,7 @@ static void ctrl_message_received_heartbeat_req(ChiakiCtrl *ctrl, uint8_t *paylo
if(payload_size != 0) if(payload_size != 0)
CHIAKI_LOGW(&ctrl->session->log, "Received Heartbeat request with non-empty payload\n"); CHIAKI_LOGW(&ctrl->session->log, "Received Heartbeat request with non-empty payload\n");
CHIAKI_LOGD(&ctrl->session->log, "Received Ctrl Heartbeat\n"); CHIAKI_LOGI(&ctrl->session->log, "Received Ctrl Heartbeat, sending reply\n");
ctrl_message_send(ctrl, CTRL_MESSAGE_TYPE_HEARTBEAT_REP, NULL, 0); ctrl_message_send(ctrl, CTRL_MESSAGE_TYPE_HEARTBEAT_REP, NULL, 0);
} }

View file

@ -418,16 +418,19 @@ CHIAKI_EXPORT ChiakiErrorCode chiaki_takion_send_feedback_state(ChiakiTakion *ta
*((uint32_t *)(buf + 8)) = 0; // gmac *((uint32_t *)(buf + 8)) = 0; // gmac
chiaki_feedback_state_format(buf + 0xc, feedback_state); chiaki_feedback_state_format(buf + 0xc, feedback_state);
//CHIAKI_LOGD(takion->log, "Takion sending Feedback State:\n");
//chiaki_log_hexdump(takion->log, CHIAKI_LOG_DEBUG, buf, sizeof(buf));
ChiakiErrorCode err = chiaki_mutex_lock(&takion->gkcrypt_local_mutex); ChiakiErrorCode err = chiaki_mutex_lock(&takion->gkcrypt_local_mutex);
if(err != CHIAKI_ERR_SUCCESS) if(err != CHIAKI_ERR_SUCCESS)
return err; return err;
size_t key_pos; size_t key_pos;
err = chiaki_takion_crypt_advance_key_pos(takion, CHIAKI_FEEDBACK_STATE_BUF_SIZE, &key_pos); err = chiaki_takion_crypt_advance_key_pos(takion, CHIAKI_FEEDBACK_STATE_BUF_SIZE + CHIAKI_GKCRYPT_BLOCK_SIZE, &key_pos);
if(err != CHIAKI_ERR_SUCCESS) if(err != CHIAKI_ERR_SUCCESS)
goto beach; goto beach;
err = chiaki_gkcrypt_encrypt(takion->gkcrypt_local, key_pos, buf + 0xc, CHIAKI_FEEDBACK_STATE_BUF_SIZE); err = chiaki_gkcrypt_encrypt(takion->gkcrypt_local, key_pos + CHIAKI_GKCRYPT_BLOCK_SIZE, buf + 0xc, CHIAKI_FEEDBACK_STATE_BUF_SIZE);
if(err != CHIAKI_ERR_SUCCESS) if(err != CHIAKI_ERR_SUCCESS)
goto beach; goto beach;