docs: def derive(private_key: PrivateKey, peer_public_key: PublicKey) -> bytes:
      """
      Key exchange between private key and peer's public key,
      `derive(k1, k2.public_key)` should be equal to `derive(k2, k1.public_key)`.
  
      Parameters
      ----------
      private_key: coincurve.PrivateKey
          A secp256k1 private key
      peer_public_key: coincurve.PublicKey
          Peer's public key
  
      Returns
      -------
      bytes
          A secret key used for symmetric encryption
  
      >>> from coincurve import PrivateKey
      >>> ke1 = generate_eth_key()
      >>> ke2 = generate_eth_key()
      >>> k1 = hex2prv(ke1.to_hex())
      >>> k2 = hex2prv(ke2.to_hex())
      >>> derive(k1, k2.public_key) == derive(k2, k1.public_key)
      True
      """
      return private_key.ecdh(peer_public_key.format())