static enum ssl_hs_wait_t do_send_server_certificate(SSL *ssl, SSL_HANDSHAKE *hs) { if (!ssl_cipher_uses_certificate_auth(ssl->s3->tmp.new_cipher)) { hs->state = state_send_server_finished; return ssl_hs_ok; } if (!ssl_has_certificate(ssl)) { OPENSSL_PUT_ERROR(SSL, SSL_R_NO_CERTIFICATE_SET); return ssl_hs_error; } if (!tls13_prepare_certificate(ssl)) { return ssl_hs_error; } hs->state = state_send_server_certificate_verify; return ssl_hs_write_message; }
static enum ssl_hs_wait_t do_send_client_certificate(SSL *ssl, SSL_HANDSHAKE *hs) { /* Call client_cert_cb to update the certificate. */ int should_retry; if (!ssl_do_client_cert_cb(ssl, &should_retry)) { if (should_retry) { hs->state = state_send_client_certificate; return ssl_hs_x509_lookup; } return ssl_hs_error; } if (!tls13_prepare_certificate(ssl)) { return ssl_hs_error; } hs->state = state_send_client_certificate_verify; return ssl_hs_write_message; }