test_state.cc: serialize the test clock.

This is needed for some TLS 1.3 split-handshake tests.  Because
TestState::Deserialize doesn't check for CBS_len() == 0, it should be
a compatible change to tack additional data onto the end of the
serialized test state.

Change-Id: I16464b6e27ab2e9afd0d505719095b4895e652a4
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/39546
Commit-Queue: Matt Braithwaite <mab@google.com>
Reviewed-by: David Benjamin <davidben@google.com>
diff --git a/ssl/test/test_state.cc b/ssl/test/test_state.cc
index b9767e0..86deb55 100644
--- a/ssl/test/test_state.cc
+++ b/ssl/test/test_state.cc
@@ -138,6 +138,8 @@
       !CBB_add_bytes(
           &text, reinterpret_cast<const uint8_t *>(msg_callback_text.data()),
           msg_callback_text.length()) ||
+      !CBB_add_asn1_uint64(&out, g_clock.tv_sec) ||
+      !CBB_add_asn1_uint64(&out, g_clock.tv_usec) ||
       !CBB_flush(cbb)) {
     return false;
   }
@@ -149,6 +151,7 @@
   std::unique_ptr<TestState> out_state(new TestState());
   uint16_t version;
   constexpr uint16_t kVersion = 0;
+  uint64_t sec, usec;
   if (!CBS_get_u24_length_prefixed(cbs, &in) ||
       !CBS_get_u16(&in, &version) ||
       version > kVersion ||
@@ -165,5 +168,14 @@
   }
   out_state->msg_callback_text = std::string(
       reinterpret_cast<const char *>(CBS_data(&text)), CBS_len(&text));
+  // TODO(2020-05-01): Make this unconditional & merge into above.
+  if (CBS_len(&in) > 0) {
+    if (!CBS_get_asn1_uint64(&in, &sec) ||
+        !CBS_get_asn1_uint64(&in, &usec)) {
+      return nullptr;
+    }
+    g_clock.tv_sec = sec;
+    g_clock.tv_usec = usec;
+  }
   return out_state;
 }