code: private SecretKey clientKeyExchange(DHClientKeyExchange mesg)
              throws IOException {
  
          if (debug != null && Debug.isOn("handshake")) {
              mesg.print(System.out);
          }
          return dh.getAgreedSecret(mesg.getClientPublicKey(), false);
      }
docs: /*
  Diffie Hellman key exchange is used when the server presented
  D-H parameters in its certificate (signed using RSA or DSS/DSA),
  or else the server presented no certificate but sent D-H params
  in a ServerKeyExchange message.  Use of D-H is specified by the
  cipher suite chosen.
  
  The message optionally contains the client's D-H public key (if
  it wasn't not sent in a client certificate).  As always with D-H,
  if a client and a server have each other's D-H public keys and
  they use common algorithm parameters, they have a shared key
  that's derived via the D-H calculation.  That key becomes the
  pre-master secret.