xref: /arm-trusted-firmware/include/lib/psa/rss_crypto_defs.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /*
2*91f16700Schasinglulu  * Copyright (c) 2023, Arm Limited. All rights reserved.
3*91f16700Schasinglulu  *
4*91f16700Schasinglulu  * SPDX-License-Identifier: BSD-3-Clause
5*91f16700Schasinglulu  *
6*91f16700Schasinglulu  */
7*91f16700Schasinglulu 
8*91f16700Schasinglulu #ifndef RSS_CRYPTO_DEFS_H
9*91f16700Schasinglulu #define RSS_CRYPTO_DEFS_H
10*91f16700Schasinglulu 
11*91f16700Schasinglulu /* Declares types that encode errors, algorithms, key types, policies, etc. */
12*91f16700Schasinglulu #include "psa/crypto_types.h"
13*91f16700Schasinglulu 
14*91f16700Schasinglulu /*
15*91f16700Schasinglulu  * Value identifying export public key function API, used to dispatch the request
16*91f16700Schasinglulu  * to the corresponding API implementation in the Crypto service backend.
17*91f16700Schasinglulu  *
18*91f16700Schasinglulu  */
19*91f16700Schasinglulu #define RSS_CRYPTO_EXPORT_PUBLIC_KEY_SID	(uint16_t)(0x701)
20*91f16700Schasinglulu 
21*91f16700Schasinglulu /*
22*91f16700Schasinglulu  * The persistent key identifiers for RSS builtin keys.
23*91f16700Schasinglulu  */
24*91f16700Schasinglulu enum rss_key_id_builtin_t {
25*91f16700Schasinglulu 	RSS_BUILTIN_KEY_ID_HOST_S_ROTPK = 0x7FFF816Cu,
26*91f16700Schasinglulu 	RSS_BUILTIN_KEY_ID_HOST_NS_ROTPK,
27*91f16700Schasinglulu 	RSS_BUILTIN_KEY_ID_HOST_CCA_ROTPK,
28*91f16700Schasinglulu };
29*91f16700Schasinglulu 
30*91f16700Schasinglulu /*
31*91f16700Schasinglulu  * This type is used to overcome a limitation within RSS firmware in the number of maximum
32*91f16700Schasinglulu  * IOVECs it can use especially in psa_aead_encrypt and psa_aead_decrypt.
33*91f16700Schasinglulu  */
34*91f16700Schasinglulu #define RSS_CRYPTO_MAX_NONCE_LENGTH (16u)
35*91f16700Schasinglulu struct rss_crypto_aead_pack_input {
36*91f16700Schasinglulu 	uint8_t nonce[RSS_CRYPTO_MAX_NONCE_LENGTH];
37*91f16700Schasinglulu 	uint32_t nonce_length;
38*91f16700Schasinglulu };
39*91f16700Schasinglulu 
40*91f16700Schasinglulu /*
41*91f16700Schasinglulu  * Structure used to pack non-pointer types in a call
42*91f16700Schasinglulu  */
43*91f16700Schasinglulu struct rss_crypto_pack_iovec {
44*91f16700Schasinglulu 	psa_key_id_t key_id;	/* Key id */
45*91f16700Schasinglulu 	psa_algorithm_t alg;	/* Algorithm */
46*91f16700Schasinglulu 	uint32_t op_handle;	/* Frontend context handle associated
47*91f16700Schasinglulu 				   to a multipart operation */
48*91f16700Schasinglulu 	uint32_t capacity;	/* Key derivation capacity */
49*91f16700Schasinglulu 	uint32_t ad_length;	/* Additional Data length for multipart AEAD */
50*91f16700Schasinglulu 	uint32_t plaintext_length;	/* Plaintext length for multipart AEAD */
51*91f16700Schasinglulu 	struct rss_crypto_aead_pack_input aead_in;	/* Packs AEAD-related inputs */
52*91f16700Schasinglulu 	uint16_t function_id;	/* Used to identify the function in the API dispatcher
53*91f16700Schasinglulu 				   to the service backend. See rss_crypto_func_sid for
54*91f16700Schasinglulu 				   detail */
55*91f16700Schasinglulu 	uint16_t step;		/* Key derivation step */
56*91f16700Schasinglulu };
57*91f16700Schasinglulu 
58*91f16700Schasinglulu #endif /* RSS_CRYPTO_DEFS_H */
59