handoff: set |enable_early_data| as part of handback.

This doesn't change the serialization: it just adds
|enable_early_data| to the list of early data fields that get updated
by SSL_apply_handback().

This is needed because, for example, add_new_session_tickets(), which
runs after handback, performs certain actions iff |enable_early_data|
is set.  Plus it just seems cleaner.

Change-Id: Ibcdb745ff9bcbeb2af2475f69f9f798937e7ee63
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/39804
Reviewed-by: David Benjamin <davidben@google.com>
Commit-Queue: Matt Braithwaite <mab@google.com>
diff --git a/ssl/handoff.cc b/ssl/handoff.cc
index e8b2e8a..e011f94 100644
--- a/ssl/handoff.cc
+++ b/ssl/handoff.cc
@@ -349,6 +349,10 @@
   if (type == handback_tls13 || type == handback_tls13_early_data) {
     early_data_t early_data;
     // Check early data invariants.
+    if (ssl->enable_early_data ==
+        (s3->early_data_reason == ssl_early_data_disabled)) {
+      return false;
+    }
     if (hs->early_data_offered) {
       if (s3->early_data_accepted && !s3->skip_early_data) {
         early_data = early_data_accepted;
@@ -512,6 +516,7 @@
 
     s3->early_data_reason =
         static_cast<ssl_early_data_reason_t>(early_data_reason);
+    ssl->enable_early_data = s3->early_data_reason != ssl_early_data_disabled;
     s3->skip_early_data = false;
     s3->early_data_accepted = false;
     hs->early_data_offered = false;