private function getSharedSecret($userPublicKey)
    {
        $userPublicKeyPoint = $this->serializer->unserialize($this->curve, bin2hex($userPublicKey));
        $userPublicKeyObject = $this->generator->getPublicKeyFrom(
            $userPublicKeyPoint->getX(),
            $userPublicKeyPoint->getY(),
            $this->generator->getOrder()
        );

        $point = $userPublicKeyObject->getPoint()->mul($this->privateKey->getSecret())->getX();

        return hex2bin($this->adapter->decHex((string) $point));
    }