/*
 * Copyright (c) 2023-2024, Arm Limited. All rights reserved.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 *
 */

#ifndef RSS_CRYPTO_DEFS_H
#define RSS_CRYPTO_DEFS_H

/* Declares types that encode errors, algorithms, key types, policies, etc. */
#include "psa/crypto_types.h"

/*
 * Value identifying export public key function API, used to dispatch the request
 * to the corresponding API implementation in the Crypto service backend.
 *
 */
#define RSS_CRYPTO_EXPORT_PUBLIC_KEY_SID	(uint16_t)(0x701)

/*
 * The persistent key identifiers for RSS builtin keys.
 */
enum rss_key_id_builtin_t {
	RSS_BUILTIN_KEY_ID_HOST_S_ROTPK = 0x7FFF816Cu,
	RSS_BUILTIN_KEY_ID_HOST_NS_ROTPK,
	RSS_BUILTIN_KEY_ID_HOST_CCA_ROTPK,
};

/*
 * This type is used to overcome a limitation within RSS firmware in the number of maximum
 * IOVECs it can use especially in psa_aead_encrypt and psa_aead_decrypt.
 */
#define RSS_CRYPTO_MAX_NONCE_LENGTH (16u)
struct rss_crypto_aead_pack_input {
	uint8_t nonce[RSS_CRYPTO_MAX_NONCE_LENGTH];
	uint32_t nonce_length;
};

/*
 * Structure used to pack non-pointer types in a call to PSA Crypto APIs
 */
struct rss_crypto_pack_iovec {
	psa_key_id_t key_id;		/* !< Key id */
	psa_algorithm_t alg;		/* !< Algorithm */
	uint32_t op_handle;		/*
					 * !< Frontend context handle
					 * associated to a multipart operation
					 */
	uint32_t ad_length;		/*
					 * !< Additional Data length for
					 *    multipart AEAD
					 */
	uint32_t plaintext_length;	/*
					 * !< Plaintext length for multipart
					 *    AEAD
					 */

	struct rss_crypto_aead_pack_input aead_in; /*
						    * !< Packs AEAD-related
						    *    inputs
						    */

	uint16_t function_id;	/*
				 * !< Used to identify the function in the
				 *    API dispatcher to the service backend
				 *    See rss_crypto_func_sid for detail
				 */
	uint16_t step;		/* !< Key derivation step */
	union {
		size_t capacity;	/* !< Key derivation capacity */
		uint64_t value;		/*
					 * !< Key derivation integer for
					 *    update
					 */
	};
};

#endif /* RSS_CRYPTO_DEFS_H */
