Emulate the client_cert_cb with cert_cb.

This avoids needing a extra state around client certificates to avoid
calling the callbacks twice. This does, however, come with a behavior
change: configuring both callbacks won't work. No consumer does this.

(Except bssl_shim which needed slight tweaks.)

Change-Id: Ia5426ed2620e40eecdcf352216c4a46764e31a9a
Reviewed-on: https://boringssl-review.googlesource.com/12690
Reviewed-by: Adam Langley <agl@google.com>
diff --git a/ssl/tls13_client.c b/ssl/tls13_client.c
index ba1589f..b9c3c68 100644
--- a/ssl/tls13_client.c
+++ b/ssl/tls13_client.c
@@ -38,7 +38,6 @@
   state_process_server_certificate,
   state_process_server_certificate_verify,
   state_process_server_finished,
-  state_certificate_callback,
   state_send_client_certificate,
   state_send_client_certificate_verify,
   state_complete_client_certificate_verify,
@@ -439,11 +438,11 @@
   }
 
   ssl->method->received_flight(ssl);
-  hs->tls13_state = state_certificate_callback;
+  hs->tls13_state = state_send_client_certificate;
   return ssl_hs_ok;
 }
 
-static enum ssl_hs_wait_t do_certificate_callback(SSL_HANDSHAKE *hs) {
+static enum ssl_hs_wait_t do_send_client_certificate(SSL_HANDSHAKE *hs) {
   SSL *const ssl = hs->ssl;
   /* The peer didn't request a certificate. */
   if (!hs->cert_request) {
@@ -460,25 +459,9 @@
       return ssl_hs_error;
     }
     if (rv < 0) {
-      hs->tls13_state = state_certificate_callback;
-      return ssl_hs_x509_lookup;
-    }
-  }
-
-  hs->tls13_state = state_send_client_certificate;
-  return ssl_hs_ok;
-}
-
-static enum ssl_hs_wait_t do_send_client_certificate(SSL_HANDSHAKE *hs) {
-  SSL *const ssl = hs->ssl;
-  /* Call client_cert_cb to update the certificate. */
-  int should_retry;
-  if (!ssl_do_client_cert_cb(ssl, &should_retry)) {
-    if (should_retry) {
       hs->tls13_state = state_send_client_certificate;
       return ssl_hs_x509_lookup;
     }
-    return ssl_hs_error;
   }
 
   if (!tls13_prepare_certificate(hs)) {
@@ -597,9 +580,6 @@
       case state_process_server_finished:
         ret = do_process_server_finished(hs);
         break;
-      case state_certificate_callback:
-        ret = do_certificate_callback(hs);
-        break;
       case state_send_client_certificate:
         ret = do_send_client_certificate(hs);
         break;