code: private void sendChangeCipherAndFinish(boolean finishedTag)
              throws IOException {
          Finished mesg = new Finished(protocolVersion, handshakeHash,
              Finished.CLIENT, session.getMasterSecret(), cipherSuite);
  
          /*
           * Send the change_cipher_spec message, then the Finished message
           * which we just calculated (and protected using the keys we just
           * calculated).  Server responds with its Finished message, except
           * in the "fast handshake" (resume session) case.
           */
          sendChangeCipherSpec(mesg, finishedTag);
  
          /*
           * save client verify data for secure renegotiation
           */
          if (secureRenegotiation) {
              clientVerifyData = mesg.getVerifyData();
          }
  
          /*
           * Update state machine so server MUST send 'finished' next.
           * (In "long" handshake case; in short case, we're responding
           * to its message.)
           */
          state = HandshakeMessage.ht_finished - 1;
      }
docs: /*
  Send my change-cipher-spec and Finished message ... done as the
  last handshake act in either the short or long sequences.  In
  the short one, we've already seen the server's Finished; in the
  long one, we wait for it now.