@Override
  public void prepareInitiator(final NodeKey nodeKey, final SECPPublicKey theirPubKey) {
    checkState(
        status.compareAndSet(
            Handshaker.HandshakeStatus.UNINITIALIZED, Handshaker.HandshakeStatus.PREPARED),
        "handshake was already prepared");

    this.initiator = true;
    this.nodeKey = nodeKey;
    this.ephKeyPair = signatureAlgorithm.generateKeyPair();
    this.partyPubKey = theirPubKey;
    this.initiatorNonce = Bytes32.wrap(random(32), 0);
    LOG.trace(
        "Prepared ECIES handshake with node {}... under INITIATOR role",
        theirPubKey.getEncodedBytes().slice(0, 16));
  }
An Elliptic Curve Integrated Encryption Scheme implementation, following the handshake ceremony
of Ethereum.

@see <a href="https://github.com/ethereum/devp2p/blob/master/rlpx.md#encrypted-handshake">RLPx
    encrypted handshake</a>
ethereum/p2p/src/main/java/org/hyperledger/besu/ethereum/p2p/rlpx/handshake/ecies/ECIESHandshaker.java