code: def tls_session_update(self, msg_str):
          
          super(TLSClientHello, self).tls_session_update(msg_str)
  
          s = self.tls_session
          s.tls_version = self.version
          s.server_random = self.random_bytes
  
          cs_cls = None
          if self.cipher:
              cs_val = self.cipher
              if cs_val not in _tls_cipher_suites_cls:
                  warning("Unknown cipher suite %d from ServerHello" % cs_val)
                  # we do not try to set a default nor stop the execution
              else:
                  cs_cls = _tls_cipher_suites_cls[cs_val]
  
          connection_end = s.connection_end
          s.pwcs = writeConnState(ciphersuite=cs_cls,
                                  connection_end=connection_end,
                                  tls_version=self.version)
          s.triggered_pwcs_commit = True
          s.prcs = readConnState(ciphersuite=cs_cls,
                                 connection_end=connection_end,
                                 tls_version=self.version)
          s.triggered_prcs_commit = True
  
          if self.tls_session.tls13_early_secret is None:
              # In case the connState was not pre-initialized, we could not
              # compute the early secrets at the ClientHello, so we do it here.
              self.tls_session.compute_tls13_early_secrets()
          s.compute_tls13_handshake_secrets()
docs: Either for parsing or building, we store the server_random along with
          the raw string representing this handshake message. We also store the
          cipher suite (if recognized), and finally we instantiate the write and
          read connection states.