blob: 436cc8178e30c9f365fa23a90f0877f56065c9dc [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 */
Jamie Fox0e54ebc2019-04-09 14:21:04 +010040 psa_key_handle_t key_handle; /*!< Key handle */
Antonio de Angelis4743e672019-04-11 11:38:48 +010041 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 */
Jamie Fox0e54ebc2019-04-09 14:21:04 +010045 uint32_t op_handle; /*!< Frontend context handle associated to a
Antonio de Angelis4743e672019-04-11 11:38:48 +010046 * multipart operation
47 */
Antonio de Angelis25e2b2d2019-04-25 14:49:50 +010048 size_t capacity; /*!< Generator capacity */
Antonio de Angelis4743e672019-04-11 11:38:48 +010049
50 struct tfm_crypto_aead_pack_input aead_in; /*!< FixMe: Temporarily used for
51 * AEAD until the API is
52 * restructured
53 */
54};
55
56/**
Antonio de Angelis25e2b2d2019-04-25 14:49:50 +010057 * \brief Define a progressive numerical value for each SFID which can be used
58 * when dispatching the requests to the service
Antonio de Angelis4743e672019-04-11 11:38:48 +010059 */
Antonio de Angelis25e2b2d2019-04-25 14:49:50 +010060enum {
61 TFM_CRYPTO_ALLOCATE_KEY_SFID = (0u),
62 TFM_CRYPTO_IMPORT_KEY_SFID,
63 TFM_CRYPTO_DESTROY_KEY_SFID,
64 TFM_CRYPTO_GET_KEY_INFORMATION_SFID,
65 TFM_CRYPTO_EXPORT_KEY_SFID,
66 TFM_CRYPTO_EXPORT_PUBLIC_KEY_SFID,
67 TFM_CRYPTO_COPY_KEY_SFID,
68 TFM_CRYPTO_SET_KEY_POLICY_SFID,
69 TFM_CRYPTO_GET_KEY_POLICY_SFID,
70 TFM_CRYPTO_GET_KEY_LIFETIME_SFID,
71 TFM_CRYPTO_CIPHER_GENERATE_IV_SFID,
72 TFM_CRYPTO_CIPHER_SET_IV_SFID,
73 TFM_CRYPTO_CIPHER_ENCRYPT_SETUP_SFID,
74 TFM_CRYPTO_CIPHER_DECRYPT_SETUP_SFID,
75 TFM_CRYPTO_CIPHER_UPDATE_SFID,
76 TFM_CRYPTO_CIPHER_ABORT_SFID,
77 TFM_CRYPTO_CIPHER_FINISH_SFID,
78 TFM_CRYPTO_HASH_SETUP_SFID,
79 TFM_CRYPTO_HASH_UPDATE_SFID,
80 TFM_CRYPTO_HASH_FINISH_SFID,
81 TFM_CRYPTO_HASH_VERIFY_SFID,
82 TFM_CRYPTO_HASH_ABORT_SFID,
83 TFM_CRYPTO_HASH_CLONE_SFID,
84 TFM_CRYPTO_MAC_SIGN_SETUP_SFID,
85 TFM_CRYPTO_MAC_VERIFY_SETUP_SFID,
86 TFM_CRYPTO_MAC_UPDATE_SFID,
87 TFM_CRYPTO_MAC_SIGN_FINISH_SFID,
88 TFM_CRYPTO_MAC_VERIFY_FINISH_SFID,
89 TFM_CRYPTO_MAC_ABORT_SFID,
90 TFM_CRYPTO_AEAD_ENCRYPT_SFID,
91 TFM_CRYPTO_AEAD_DECRYPT_SFID,
92 TFM_CRYPTO_ASYMMETRIC_SIGN_SFID,
93 TFM_CRYPTO_ASYMMETRIC_VERIFY_SFID,
94 TFM_CRYPTO_ASYMMETRIC_ENCRYPT_SFID,
95 TFM_CRYPTO_ASYMMETRIC_DECRYPT_SFID,
96 TFM_CRYPTO_GET_GENERATOR_CAPACITY_SFID,
97 TFM_CRYPTO_GENERATOR_READ_SFID,
98 TFM_CRYPTO_GENERATOR_IMPORT_KEY_SFID,
99 TFM_CRYPTO_GENERATOR_ABORT_SFID,
100 TFM_CRYPTO_KEY_DERIVATION_SFID,
101 TFM_CRYPTO_KEY_AGREEMENT_SFID,
102 TFM_CRYPTO_GENERATE_RANDOM_SFID,
103 TFM_CRYPTO_GENERATE_KEY_SFID,
104 TFM_CRYPTO_SFID_MAX,
105};
Antonio de Angelis4743e672019-04-11 11:38:48 +0100106
107/**
108 * \brief Define the SID values and minor versions to match the ones defined in
109 * the service manifest files
110 */
111#define TFM_CRYPTO_SID (0x00004000u)
112#define TFM_CRYPTO_MIN_VER (0x0001)
113
114/**
Antonio de Angelis25e2b2d2019-04-25 14:49:50 +0100115 * \brief Define an invalid value for an SFID
116 *
Antonio de Angelis4743e672019-04-11 11:38:48 +0100117 */
Antonio de Angelis4743e672019-04-11 11:38:48 +0100118#define TFM_CRYPTO_SFID_INVALID (~0x0u)
119
120/**
Louis Mayencourt7a36f782018-09-24 14:00:57 +0100121 * \brief This value is used to mark an handle as invalid.
122 *
123 */
Antonio de Angelis4743e672019-04-11 11:38:48 +0100124#define TFM_CRYPTO_INVALID_HANDLE (~0x0u)
Antonio de Angelis8908f472018-08-31 15:44:25 +0100125
126/**
Antonio de Angelisab85ccd2019-03-25 15:14:29 +0000127 * \brief Define miscellaneous literal constants that are used in the service
Antonio de Angelis377a1552018-11-22 17:02:40 +0000128 *
129 */
Antonio de Angelis8908f472018-08-31 15:44:25 +0100130enum {
131 TFM_CRYPTO_NOT_IN_USE = 0,
132 TFM_CRYPTO_IN_USE = 1
133};
134
Antonio de Angelis8908f472018-08-31 15:44:25 +0100135#ifdef __cplusplus
136}
137#endif
138
139#endif /* __TFM_CRYPTO_DEFS_H__ */