tls-peer: Return INVALID_STATE after changing TLS 1.3 keys
Even though we return from build(), we are not actually sending a response, so we can't return NEED_MORE (would send an invalid ClientHello message) and if we return SUCCESS, the EAP layer treats this as failure (there is a comment in eap_authenticator_t about client methods never returning SUCCESS from process()). Instead we return INVALID_STATE, which allows tls_t.build() to exit from the build() loop immediately and send the already generated Finished message.
This commit is contained in:
@@ -1730,7 +1730,7 @@ METHOD(tls_handshake_t, build, status_t,
|
|||||||
this->crypto->change_cipher(this->crypto, TRUE);
|
this->crypto->change_cipher(this->crypto, TRUE);
|
||||||
this->crypto->change_cipher(this->crypto, FALSE);
|
this->crypto->change_cipher(this->crypto, FALSE);
|
||||||
this->state = STATE_FINISHED_SENT_KEY_SWITCHED;
|
this->state = STATE_FINISHED_SENT_KEY_SWITCHED;
|
||||||
return SUCCESS;
|
return INVALID_STATE;
|
||||||
case STATE_KEY_UPDATE_REQUESTED:
|
case STATE_KEY_UPDATE_REQUESTED:
|
||||||
return send_key_update(this, type, writer);
|
return send_key_update(this, type, writer);
|
||||||
case STATE_KEY_UPDATE_SENT:
|
case STATE_KEY_UPDATE_SENT:
|
||||||
@@ -1741,9 +1741,7 @@ METHOD(tls_handshake_t, build, status_t,
|
|||||||
}
|
}
|
||||||
this->crypto->change_cipher(this->crypto, FALSE);
|
this->crypto->change_cipher(this->crypto, FALSE);
|
||||||
this->state = STATE_FINISHED_SENT_KEY_SWITCHED;
|
this->state = STATE_FINISHED_SENT_KEY_SWITCHED;
|
||||||
return SUCCESS;
|
return INVALID_STATE;
|
||||||
case STATE_FINISHED_SENT_KEY_SWITCHED:
|
|
||||||
return SUCCESS;
|
|
||||||
default:
|
default:
|
||||||
return INVALID_STATE;
|
return INVALID_STATE;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user