blob: 8d926c24e291e555946f88ce757920fbfa9b1787 [file] [log] [blame]
Antonio de Angelis8908f472018-08-31 15:44:25 +01001/*
Antonio de Angelis377a1552018-11-22 17:02:40 +00002 * Copyright (c) 2018-2019, Arm Limited. All rights reserved.
Antonio de Angelis8908f472018-08-31 15:44:25 +01003 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 *
6 */
7
8#ifndef __TFM_CRYPTO_DEFS_H__
9#define __TFM_CRYPTO_DEFS_H__
10
11#ifdef __cplusplus
12extern "C" {
13#endif
14
15#include <stdint.h>
16#include <limits.h>
17#include "tfm_api.h"
Antonio de Angelisab85ccd2019-03-25 15:14:29 +000018#include "psa_crypto.h"
Antonio de Angelis8908f472018-08-31 15:44:25 +010019
20/**
Antonio de Angelis4743e672019-04-11 11:38:48 +010021 * \brief This type is used to overcome a limitation in the number of maximum
22 * IOVECs that can be used especially in psa_aead_encrypt and
23 * psa_aead_decrypt. To be removed in case the AEAD APIs number of
24 * parameters passed gets restructured
25 */
26#define TFM_CRYPTO_MAX_NONCE_LENGTH (16u)
27struct tfm_crypto_aead_pack_input {
28 uint8_t nonce[TFM_CRYPTO_MAX_NONCE_LENGTH];
29 uint32_t nonce_length;
30};
31
32/**
33 * \brief Structure used to pack non-pointer types in a call
34 *
35 */
36struct tfm_crypto_pack_iovec {
37 uint32_t sfn_id; /*!< Secure function ID used to dispatch the
38 * request
39 */
40 psa_key_slot_t key; /*!< Key slot */
41 psa_key_type_t type; /*!< Key type */
42 psa_key_usage_t usage; /*!< Usage policy for a key */
43 psa_algorithm_t alg; /*!< Algorithm */
44 psa_key_lifetime_t lifetime; /*!< Lifetime policy for a key */
45 uint32_t handle; /*!< Frontend context handle associated to a
46 * multipart operation
47 */
48
49 struct tfm_crypto_aead_pack_input aead_in; /*!< FixMe: Temporarily used for
50 * AEAD until the API is
51 * restructured
52 */
53};
54
55/**
56 * \brief Define a numerical value for each SFID which can be used when
57 * dispatching the requests to the service
58 */
59#define TFM_CRYPTO_IMPORT_KEY_SFID (0u)
60#define TFM_CRYPTO_DESTROY_KEY_SFID (1u)
61#define TFM_CRYPTO_GET_KEY_INFORMATION_SFID (2u)
62#define TFM_CRYPTO_EXPORT_KEY_SFID (3u)
63#define TFM_CRYPTO_KEY_POLICY_INIT_SFID (4u)
64#define TFM_CRYPTO_KEY_POLICY_SET_USAGE_SFID (5u)
65#define TFM_CRYPTO_KEY_POLICY_GET_USAGE_SFID (6u)
66#define TFM_CRYPTO_KEY_POLICY_GET_ALGORITHM_SFID (7u)
67#define TFM_CRYPTO_SET_KEY_POLICY_SFID (8u)
68#define TFM_CRYPTO_GET_KEY_POLICY_SFID (9u)
69#define TFM_CRYPTO_SET_KEY_LIFETIME_SFID (10u)
70#define TFM_CRYPTO_GET_KEY_LIFETIME_SFID (11u)
71#define TFM_CRYPTO_CIPHER_SET_IV_SFID (12u)
72#define TFM_CRYPTO_CIPHER_ENCRYPT_SETUP_SFID (13u)
73#define TFM_CRYPTO_CIPHER_DECRYPT_SETUP_SFID (14u)
74#define TFM_CRYPTO_CIPHER_UPDATE_SFID (15u)
75#define TFM_CRYPTO_CIPHER_ABORT_SFID (16u)
76#define TFM_CRYPTO_CIPHER_FINISH_SFID (17u)
77#define TFM_CRYPTO_HASH_SETUP_SFID (18u)
78#define TFM_CRYPTO_HASH_UPDATE_SFID (19u)
79#define TFM_CRYPTO_HASH_FINISH_SFID (20u)
80#define TFM_CRYPTO_HASH_VERIFY_SFID (21u)
81#define TFM_CRYPTO_HASH_ABORT_SFID (22u)
82#define TFM_CRYPTO_MAC_SIGN_SETUP_SFID (23u)
83#define TFM_CRYPTO_MAC_VERIFY_SETUP_SFID (24u)
84#define TFM_CRYPTO_MAC_UPDATE_SFID (25u)
85#define TFM_CRYPTO_MAC_SIGN_FINISH_SFID (26u)
86#define TFM_CRYPTO_MAC_VERIFY_FINISH_SFID (27u)
87#define TFM_CRYPTO_MAC_ABORT_SFID (28u)
88#define TFM_CRYPTO_AEAD_ENCRYPT_SFID (29u)
89#define TFM_CRYPTO_AEAD_DECRYPT_SFID (30u)
90
91/**
92 * \brief Define the SID values and minor versions to match the ones defined in
93 * the service manifest files
94 */
95#define TFM_CRYPTO_SID (0x00004000u)
96#define TFM_CRYPTO_MIN_VER (0x0001)
97
98/**
99 * \brief Define the maximum value based on the previous list, and
100 * an invalid value
101 */
102#define TFM_CRYPTO_SFID_MAX (TFM_CRYPTO_AEAD_DECRYPT_SFID + 1u)
103#define TFM_CRYPTO_SFID_INVALID (~0x0u)
104
105/**
Louis Mayencourt7a36f782018-09-24 14:00:57 +0100106 * \brief This value is used to mark an handle as invalid.
107 *
108 */
Antonio de Angelis4743e672019-04-11 11:38:48 +0100109#define TFM_CRYPTO_INVALID_HANDLE (~0x0u)
Antonio de Angelis8908f472018-08-31 15:44:25 +0100110
111/**
Antonio de Angelisab85ccd2019-03-25 15:14:29 +0000112 * \brief Define miscellaneous literal constants that are used in the service
Antonio de Angelis377a1552018-11-22 17:02:40 +0000113 *
114 */
Antonio de Angelis8908f472018-08-31 15:44:25 +0100115enum {
116 TFM_CRYPTO_NOT_IN_USE = 0,
117 TFM_CRYPTO_IN_USE = 1
118};
119
Antonio de Angelis8908f472018-08-31 15:44:25 +0100120#ifdef __cplusplus
121}
122#endif
123
124#endif /* __TFM_CRYPTO_DEFS_H__ */