/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Copyright (C) 2019 Microsoft Corporation.
 *
 * Author:  Jaskaran Singh Khurana <jaskarankhurana@linux.microsoft.com>
 *
 */
#ifndef DM_VERITY_SIG_VERIFICATION_H
#define DM_VERITY_SIG_VERIFICATION_H

#define DM_VERITY_ROOT_HASH_VERIFICATION "DM Verity Sig Verification"
#define DM_VERITY_ROOT_HASH_VERIFICATION_OPT_SIG_KEY "root_hash_sig_key_desc"

struct dm_verity_sig_opts {
	unsigned int sig_size;
	u8 *sig;
};

#ifdef CONFIG_DM_VERITY_VERIFY_ROOTHASH_SIG

#define DM_VERITY_ROOT_HASH_VERIFICATION_OPTS 2

int verity_verify_root_hash(const void *data, size_t data_len,
			    const void *sig_data, size_t sig_len);
bool verity_verify_is_sig_opt_arg(const char *arg_name);

int verity_verify_sig_parse_opt_args(struct dm_arg_set *as, struct dm_verity *v,
				    struct dm_verity_sig_opts *sig_opts,
				    unsigned int *argc, const char *arg_name);

void verity_verify_sig_opts_cleanup(struct dm_verity_sig_opts *sig_opts);

#else

#define DM_VERITY_ROOT_HASH_VERIFICATION_OPTS 0

static inline int verity_verify_root_hash(const void *data, size_t data_len,
					  const void *sig_data, size_t sig_len)
{
	return 0;
}

static inline bool verity_verify_is_sig_opt_arg(const char *arg_name)
{
	return false;
}

static inline int verity_verify_sig_parse_opt_args(struct dm_arg_set *as,
			struct dm_verity *v, struct dm_verity_sig_opts *sig_opts,
			unsigned int *argc, const char *arg_name)
{
	return -EINVAL;
}

static inline void verity_verify_sig_opts_cleanup(struct dm_verity_sig_opts *sig_opts)
{
}

#endif /* CONFIG_DM_VERITY_VERIFY_ROOTHASH_SIG */
#endif /* DM_VERITY_SIG_VERIFICATION_H */
