def __kdf(self, secret_key_material):
        """
        :param secret_key_material: A bytes-like object encoding the secret key material.
        :returns: A bytes-like object encoding the shared secret key.
        """

        salt = b"\x00" * self.__hash_function().digest_size

        if self.__curve == "25519":
            input_key_material = b"\xFF" * 32
        if self.__curve == "448":
            input_key_material = b"\xFF" * 57

        input_key_material += secret_key_material

        hkdf = HKDF(
            algorithm=self.__hash_function(),
            length=32,
            salt=salt,
            info=self.__info_string,
            backend=self.__class__.CRYPTOGRAPHY_BACKEND
        )

        return hkdf.derive(input_key_material)