<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def do_handshake(self, callback=None):
 """Start the SSL handshake. Return a list of ssldata. The optional *callback* argument can be used to install a callback that will be called when the handshake is complete. The callback will be called without arguments. """

        if self._state != self.S_UNWRAPPED:
            raise RuntimeError('handshake in progress or completed')
        self._sslobj = sslcompat.wrap_bio(self._context, self._incoming, self._outgoing,
                                          self._server_side, self._server_hostname)
        self._state = self.S_DO_HANDSHAKE
        self._handshake_cb = callback
        ssldata, appdata = self.feed_ssldata(b'')
        assert len(appdata) == 0
        return ssldata