blob: c983b6ac4f8ff50cc64b845dcbc80b86063158c2 [file] [log] [blame]
Louis Mayencourt7a36f782018-09-24 14:00:57 +01001/*
Antonio de Angelis04debbd2019-10-14 12:12:52 +01002 * Copyright (c) 2019-2020, Arm Limited. All rights reserved.
Louis Mayencourt7a36f782018-09-24 14:00:57 +01003 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 *
6 */
7
Jamie Fox0e54ebc2019-04-09 14:21:04 +01008#include <stddef.h>
9#include <stdint.h>
Louis Mayencourt7a36f782018-09-24 14:00:57 +010010
Jamie Fox0e54ebc2019-04-09 14:21:04 +010011#include "tfm_mbedcrypto_include.h"
Antonio de Angelis4743e672019-04-11 11:38:48 +010012
Jamie Fox0e54ebc2019-04-09 14:21:04 +010013#include "tfm_crypto_api.h"
14#include "tfm_crypto_defs.h"
Soby Mathewd8abdfd2020-10-14 10:28:01 +010015#include "tfm_crypto_private.h"
Louis Mayencourt7a36f782018-09-24 14:00:57 +010016
17/*!
18 * \defgroup public_psa Public functions, PSA
19 *
20 */
21
22/*!@{*/
Antonio de Angelisab85ccd2019-03-25 15:14:29 +000023psa_status_t tfm_crypto_mac_sign_setup(psa_invec in_vec[],
24 size_t in_len,
25 psa_outvec out_vec[],
26 size_t out_len)
Louis Mayencourt7a36f782018-09-24 14:00:57 +010027{
Kevin Peng96f802e2019-12-26 16:10:25 +080028#ifdef TFM_CRYPTO_MAC_MODULE_DISABLED
Antonio de Angelis7740b382019-07-16 10:59:25 +010029 return PSA_ERROR_NOT_SUPPORTED;
30#else
Antonio de Angelis4743e672019-04-11 11:38:48 +010031 psa_status_t status = PSA_SUCCESS;
Jamie Fox0e54ebc2019-04-09 14:21:04 +010032 psa_mac_operation_t *operation = NULL;
33
Soby Mathewd8abdfd2020-10-14 10:28:01 +010034 CRYPTO_IN_OUT_LEN_VALIDATE(in_len, 1, 1, out_len, 1, 1);
Antonio de Angelisab85ccd2019-03-25 15:14:29 +000035
Antonio de Angelis4743e672019-04-11 11:38:48 +010036 if ((out_vec[0].len != sizeof(uint32_t)) ||
37 (in_vec[0].len != sizeof(struct tfm_crypto_pack_iovec))) {
Soby Mathewc6e89362020-10-19 16:55:16 +010038 return PSA_ERROR_PROGRAMMER_ERROR;
Antonio de Angelisab85ccd2019-03-25 15:14:29 +000039 }
Antonio de Angelis4743e672019-04-11 11:38:48 +010040 const struct tfm_crypto_pack_iovec *iov = in_vec[0].base;
Jamie Fox0e54ebc2019-04-09 14:21:04 +010041 uint32_t handle = iov->op_handle;
Antonio de Angelis4743e672019-04-11 11:38:48 +010042 uint32_t *handle_out = out_vec[0].base;
Jamie Fox0e54ebc2019-04-09 14:21:04 +010043 psa_key_handle_t key_handle = iov->key_handle;
Antonio de Angelis4743e672019-04-11 11:38:48 +010044 psa_algorithm_t alg = iov->alg;
Antonio de Angelisab85ccd2019-03-25 15:14:29 +000045
Antonio de Angelis60a6fe62019-06-18 15:27:34 +010046 status = tfm_crypto_check_handle_owner(key_handle, NULL);
47 if (status != PSA_SUCCESS) {
48 return status;
49 }
50
Jamie Fox0e54ebc2019-04-09 14:21:04 +010051 /* Init the handle in the operation with the one passed from the iov */
52 *handle_out = iov->op_handle;
53
54 /* Allocate the operation context in the secure world */
55 status = tfm_crypto_operation_alloc(TFM_CRYPTO_MAC_OPERATION,
56 &handle,
57 (void **)&operation);
58 if (status != PSA_SUCCESS) {
59 return status;
Antonio de Angelis4743e672019-04-11 11:38:48 +010060 }
Jamie Fox0e54ebc2019-04-09 14:21:04 +010061
62 *handle_out = handle;
63
64 status = psa_mac_sign_setup(operation, key_handle, alg);
65 if (status != PSA_SUCCESS) {
66 /* Release the operation context, ignore if the operation fails. */
67 (void)tfm_crypto_operation_release(handle_out);
68 return status;
69 }
70
71 return PSA_SUCCESS;
Antonio de Angelis7740b382019-07-16 10:59:25 +010072#endif /* TFM_CRYPTO_MAC_MODULE_DISABLED */
Louis Mayencourt7a36f782018-09-24 14:00:57 +010073}
74
Antonio de Angelisab85ccd2019-03-25 15:14:29 +000075psa_status_t tfm_crypto_mac_verify_setup(psa_invec in_vec[],
76 size_t in_len,
77 psa_outvec out_vec[],
78 size_t out_len)
Louis Mayencourt7a36f782018-09-24 14:00:57 +010079{
Kevin Peng96f802e2019-12-26 16:10:25 +080080#ifdef TFM_CRYPTO_MAC_MODULE_DISABLED
Antonio de Angelis7740b382019-07-16 10:59:25 +010081 return PSA_ERROR_NOT_SUPPORTED;
82#else
Antonio de Angelis4743e672019-04-11 11:38:48 +010083 psa_status_t status = PSA_SUCCESS;
Jamie Fox0e54ebc2019-04-09 14:21:04 +010084 psa_mac_operation_t *operation = NULL;
85
Soby Mathewd8abdfd2020-10-14 10:28:01 +010086 CRYPTO_IN_OUT_LEN_VALIDATE(in_len, 1, 1, out_len, 1, 1);
Antonio de Angelisab85ccd2019-03-25 15:14:29 +000087
Antonio de Angelis4743e672019-04-11 11:38:48 +010088 if ((out_vec[0].len != sizeof(uint32_t)) ||
89 (in_vec[0].len != sizeof(struct tfm_crypto_pack_iovec))) {
Soby Mathewc6e89362020-10-19 16:55:16 +010090 return PSA_ERROR_PROGRAMMER_ERROR;
Antonio de Angelisab85ccd2019-03-25 15:14:29 +000091 }
Antonio de Angelis4743e672019-04-11 11:38:48 +010092 const struct tfm_crypto_pack_iovec *iov = in_vec[0].base;
Jamie Fox0e54ebc2019-04-09 14:21:04 +010093 uint32_t handle = iov->op_handle;
Antonio de Angelis4743e672019-04-11 11:38:48 +010094 uint32_t *handle_out = out_vec[0].base;
Jamie Fox0e54ebc2019-04-09 14:21:04 +010095 psa_key_handle_t key_handle = iov->key_handle;
Antonio de Angelis4743e672019-04-11 11:38:48 +010096 psa_algorithm_t alg = iov->alg;
Antonio de Angelisab85ccd2019-03-25 15:14:29 +000097
Antonio de Angelis60a6fe62019-06-18 15:27:34 +010098 status = tfm_crypto_check_handle_owner(key_handle, NULL);
99 if (status != PSA_SUCCESS) {
100 return status;
101 }
102
Jamie Fox0e54ebc2019-04-09 14:21:04 +0100103 /* Init the handle in the operation with the one passed from the iov */
104 *handle_out = iov->op_handle;
105
106 /* Allocate the operation context in the secure world */
107 status = tfm_crypto_operation_alloc(TFM_CRYPTO_MAC_OPERATION,
108 &handle,
109 (void **)&operation);
110 if (status != PSA_SUCCESS) {
111 return status;
Antonio de Angelis4743e672019-04-11 11:38:48 +0100112 }
Jamie Fox0e54ebc2019-04-09 14:21:04 +0100113
114 *handle_out = handle;
115
116 status = psa_mac_verify_setup(operation, key_handle, alg);
117 if (status != PSA_SUCCESS) {
118 /* Release the operation context, ignore if the operation fails. */
119 (void)tfm_crypto_operation_release(handle_out);
120 return status;
121 }
122
123 return PSA_SUCCESS;
Antonio de Angelis7740b382019-07-16 10:59:25 +0100124#endif /* TFM_CRYPTO_MAC_MODULE_DISABLED */
Louis Mayencourt7a36f782018-09-24 14:00:57 +0100125}
126
Antonio de Angelisab85ccd2019-03-25 15:14:29 +0000127psa_status_t tfm_crypto_mac_update(psa_invec in_vec[],
128 size_t in_len,
129 psa_outvec out_vec[],
130 size_t out_len)
Louis Mayencourt7a36f782018-09-24 14:00:57 +0100131{
Kevin Peng96f802e2019-12-26 16:10:25 +0800132#ifdef TFM_CRYPTO_MAC_MODULE_DISABLED
Antonio de Angelis7740b382019-07-16 10:59:25 +0100133 return PSA_ERROR_NOT_SUPPORTED;
134#else
Antonio de Angelisab85ccd2019-03-25 15:14:29 +0000135 psa_status_t status = PSA_SUCCESS;
Jamie Fox0e54ebc2019-04-09 14:21:04 +0100136 psa_mac_operation_t *operation = NULL;
Louis Mayencourt7a36f782018-09-24 14:00:57 +0100137
Soby Mathewd8abdfd2020-10-14 10:28:01 +0100138 CRYPTO_IN_OUT_LEN_VALIDATE(in_len, 1, 2, out_len, 1, 1);
Louis Mayencourt7a36f782018-09-24 14:00:57 +0100139
Antonio de Angelis4743e672019-04-11 11:38:48 +0100140 if ((in_vec[0].len != sizeof(struct tfm_crypto_pack_iovec)) ||
141 (out_vec[0].len != sizeof(uint32_t))) {
Soby Mathewc6e89362020-10-19 16:55:16 +0100142 return PSA_ERROR_PROGRAMMER_ERROR;
Louis Mayencourt7a36f782018-09-24 14:00:57 +0100143 }
Antonio de Angelis4743e672019-04-11 11:38:48 +0100144 const struct tfm_crypto_pack_iovec *iov = in_vec[0].base;
Jamie Fox0e54ebc2019-04-09 14:21:04 +0100145 uint32_t handle = iov->op_handle;
Antonio de Angelis4743e672019-04-11 11:38:48 +0100146 uint32_t *handle_out = out_vec[0].base;
147 const uint8_t *input = in_vec[1].base;
148 size_t input_length = in_vec[1].len;
Louis Mayencourt7a36f782018-09-24 14:00:57 +0100149
Antonio de Angelis4743e672019-04-11 11:38:48 +0100150 /* Init the handle in the operation with the one passed from the iov */
Jamie Fox0e54ebc2019-04-09 14:21:04 +0100151 *handle_out = iov->op_handle;
Antonio de Angelisab85ccd2019-03-25 15:14:29 +0000152
Louis Mayencourt7a36f782018-09-24 14:00:57 +0100153 /* Look up the corresponding operation context */
Antonio de Angelisab85ccd2019-03-25 15:14:29 +0000154 status = tfm_crypto_operation_lookup(TFM_CRYPTO_MAC_OPERATION,
Antonio de Angelis4743e672019-04-11 11:38:48 +0100155 handle,
Jamie Fox0e54ebc2019-04-09 14:21:04 +0100156 (void **)&operation);
Antonio de Angelisab85ccd2019-03-25 15:14:29 +0000157 if (status != PSA_SUCCESS) {
158 return status;
Louis Mayencourt7a36f782018-09-24 14:00:57 +0100159 }
160
Jamie Fox0e54ebc2019-04-09 14:21:04 +0100161 status = psa_mac_update(operation, input, input_length);
162 if (status != PSA_SUCCESS) {
163 /* Release the operation context, ignore if the operation fails. */
164 (void)tfm_crypto_operation_release(handle_out);
165 return status;
Louis Mayencourt7a36f782018-09-24 14:00:57 +0100166 }
167
Antonio de Angelisab85ccd2019-03-25 15:14:29 +0000168 return PSA_SUCCESS;
Antonio de Angelis7740b382019-07-16 10:59:25 +0100169#endif /* TFM_CRYPTO_MAC_MODULE_DISABLED */
Louis Mayencourt7a36f782018-09-24 14:00:57 +0100170}
171
Antonio de Angelisab85ccd2019-03-25 15:14:29 +0000172psa_status_t tfm_crypto_mac_sign_finish(psa_invec in_vec[],
173 size_t in_len,
174 psa_outvec out_vec[],
175 size_t out_len)
Louis Mayencourt7a36f782018-09-24 14:00:57 +0100176{
Kevin Peng96f802e2019-12-26 16:10:25 +0800177#ifdef TFM_CRYPTO_MAC_MODULE_DISABLED
Antonio de Angelis7740b382019-07-16 10:59:25 +0100178 return PSA_ERROR_NOT_SUPPORTED;
179#else
Antonio de Angelisab85ccd2019-03-25 15:14:29 +0000180 psa_status_t status = PSA_SUCCESS;
Jamie Fox0e54ebc2019-04-09 14:21:04 +0100181 psa_mac_operation_t *operation = NULL;
Louis Mayencourt7a36f782018-09-24 14:00:57 +0100182
Soby Mathewd8abdfd2020-10-14 10:28:01 +0100183 CRYPTO_IN_OUT_LEN_VALIDATE(in_len, 1, 1, out_len, 1, 2);
Antonio de Angelisab85ccd2019-03-25 15:14:29 +0000184
Antonio de Angelis4743e672019-04-11 11:38:48 +0100185 if ((in_vec[0].len != sizeof(struct tfm_crypto_pack_iovec)) ||
186 (out_vec[0].len != sizeof(uint32_t))) {
Soby Mathewc6e89362020-10-19 16:55:16 +0100187 return PSA_ERROR_PROGRAMMER_ERROR;
Antonio de Angelisab85ccd2019-03-25 15:14:29 +0000188 }
Antonio de Angelis4743e672019-04-11 11:38:48 +0100189 const struct tfm_crypto_pack_iovec *iov = in_vec[0].base;
Jamie Fox0e54ebc2019-04-09 14:21:04 +0100190 uint32_t handle = iov->op_handle;
Antonio de Angelis4743e672019-04-11 11:38:48 +0100191 uint32_t *handle_out = out_vec[0].base;
Antonio de Angelisab85ccd2019-03-25 15:14:29 +0000192 uint8_t *mac = out_vec[1].base;
193 size_t mac_size = out_vec[1].len;
194
Antonio de Angelis4743e672019-04-11 11:38:48 +0100195 /* Init the handle in the operation with the one passed from the iov */
Jamie Fox0e54ebc2019-04-09 14:21:04 +0100196 *handle_out = iov->op_handle;
Antonio de Angelis4743e672019-04-11 11:38:48 +0100197
Antonio de Angelisab85ccd2019-03-25 15:14:29 +0000198 /* Initialise mac_length to zero */
199 out_vec[1].len = 0;
200
Louis Mayencourt7a36f782018-09-24 14:00:57 +0100201 /* Look up the corresponding operation context */
Antonio de Angelisab85ccd2019-03-25 15:14:29 +0000202 status = tfm_crypto_operation_lookup(TFM_CRYPTO_MAC_OPERATION,
Antonio de Angelis4743e672019-04-11 11:38:48 +0100203 handle,
Jamie Fox0e54ebc2019-04-09 14:21:04 +0100204 (void **)&operation);
Antonio de Angelisab85ccd2019-03-25 15:14:29 +0000205 if (status != PSA_SUCCESS) {
206 return status;
Louis Mayencourt7a36f782018-09-24 14:00:57 +0100207 }
208
Jamie Fox0e54ebc2019-04-09 14:21:04 +0100209 status = psa_mac_sign_finish(operation, mac, mac_size, &out_vec[1].len);
210 if (status != PSA_SUCCESS) {
211 /* Release the operation context, ignore if the operation fails. */
212 (void)tfm_crypto_operation_release(handle_out);
213 return status;
Louis Mayencourt7a36f782018-09-24 14:00:57 +0100214 }
215
Jamie Fox0e54ebc2019-04-09 14:21:04 +0100216 status = tfm_crypto_operation_release(handle_out);
217
Antonio de Angelis4743e672019-04-11 11:38:48 +0100218 return status;
Antonio de Angelis7740b382019-07-16 10:59:25 +0100219#endif /* TFM_CRYPTO_MAC_MODULE_DISABLED */
Louis Mayencourt7a36f782018-09-24 14:00:57 +0100220}
221
Antonio de Angelisab85ccd2019-03-25 15:14:29 +0000222psa_status_t tfm_crypto_mac_verify_finish(psa_invec in_vec[],
223 size_t in_len,
224 psa_outvec out_vec[],
225 size_t out_len)
Louis Mayencourt7a36f782018-09-24 14:00:57 +0100226{
Kevin Peng96f802e2019-12-26 16:10:25 +0800227#ifdef TFM_CRYPTO_MAC_MODULE_DISABLED
Antonio de Angelis7740b382019-07-16 10:59:25 +0100228 return PSA_ERROR_NOT_SUPPORTED;
229#else
Antonio de Angelisab85ccd2019-03-25 15:14:29 +0000230 psa_status_t status = PSA_SUCCESS;
Jamie Fox0e54ebc2019-04-09 14:21:04 +0100231 psa_mac_operation_t *operation = NULL;
Louis Mayencourt7a36f782018-09-24 14:00:57 +0100232
Soby Mathewd8abdfd2020-10-14 10:28:01 +0100233 CRYPTO_IN_OUT_LEN_VALIDATE(in_len, 1, 2, out_len, 1, 1);
Antonio de Angelisab85ccd2019-03-25 15:14:29 +0000234
Antonio de Angelis4743e672019-04-11 11:38:48 +0100235 if ((in_vec[0].len != sizeof(struct tfm_crypto_pack_iovec)) ||
236 (out_vec[0].len != sizeof(uint32_t))) {
Soby Mathewc6e89362020-10-19 16:55:16 +0100237 return PSA_ERROR_PROGRAMMER_ERROR;
Antonio de Angelisab85ccd2019-03-25 15:14:29 +0000238 }
Antonio de Angelis4743e672019-04-11 11:38:48 +0100239 const struct tfm_crypto_pack_iovec *iov = in_vec[0].base;
Jamie Fox0e54ebc2019-04-09 14:21:04 +0100240 uint32_t handle = iov->op_handle;
Antonio de Angelis4743e672019-04-11 11:38:48 +0100241 uint32_t *handle_out = out_vec[0].base;
242 const uint8_t *mac = in_vec[1].base;
243 size_t mac_length = in_vec[1].len;
Antonio de Angelisab85ccd2019-03-25 15:14:29 +0000244
Antonio de Angelis4743e672019-04-11 11:38:48 +0100245 /* Init the handle in the operation with the one passed from the iov */
Jamie Fox0e54ebc2019-04-09 14:21:04 +0100246 *handle_out = iov->op_handle;
Louis Mayencourt7a36f782018-09-24 14:00:57 +0100247
248 /* Look up the corresponding operation context */
Antonio de Angelisab85ccd2019-03-25 15:14:29 +0000249 status = tfm_crypto_operation_lookup(TFM_CRYPTO_MAC_OPERATION,
Antonio de Angelis4743e672019-04-11 11:38:48 +0100250 handle,
Jamie Fox0e54ebc2019-04-09 14:21:04 +0100251 (void **)&operation);
Antonio de Angelisab85ccd2019-03-25 15:14:29 +0000252 if (status != PSA_SUCCESS) {
253 return status;
Louis Mayencourt7a36f782018-09-24 14:00:57 +0100254 }
255
Jamie Fox0e54ebc2019-04-09 14:21:04 +0100256 status = psa_mac_verify_finish(operation, mac, mac_length);
257 if (status != PSA_SUCCESS) {
258 /* Release the operation context, ignore if the operation fails. */
259 (void)tfm_crypto_operation_release(handle_out);
260 return status;
Louis Mayencourt7a36f782018-09-24 14:00:57 +0100261 }
262
Jamie Fox0e54ebc2019-04-09 14:21:04 +0100263 status = tfm_crypto_operation_release(handle_out);
264
265 return status;
Antonio de Angelis7740b382019-07-16 10:59:25 +0100266#endif /* TFM_CRYPTO_MAC_MODULE_DISABLED */
Louis Mayencourt7a36f782018-09-24 14:00:57 +0100267}
268
Antonio de Angelisab85ccd2019-03-25 15:14:29 +0000269psa_status_t tfm_crypto_mac_abort(psa_invec in_vec[],
270 size_t in_len,
271 psa_outvec out_vec[],
272 size_t out_len)
Louis Mayencourt7a36f782018-09-24 14:00:57 +0100273{
Kevin Peng96f802e2019-12-26 16:10:25 +0800274#ifdef TFM_CRYPTO_MAC_MODULE_DISABLED
Antonio de Angelis7740b382019-07-16 10:59:25 +0100275 return PSA_ERROR_NOT_SUPPORTED;
276#else
Antonio de Angelisab85ccd2019-03-25 15:14:29 +0000277 psa_status_t status = PSA_SUCCESS;
Jamie Fox0e54ebc2019-04-09 14:21:04 +0100278 psa_mac_operation_t *operation = NULL;
Louis Mayencourt7a36f782018-09-24 14:00:57 +0100279
Soby Mathewd8abdfd2020-10-14 10:28:01 +0100280 CRYPTO_IN_OUT_LEN_VALIDATE(in_len, 1, 1, out_len, 1, 1);
Louis Mayencourt7a36f782018-09-24 14:00:57 +0100281
Antonio de Angelis4743e672019-04-11 11:38:48 +0100282 if ((in_vec[0].len != sizeof(struct tfm_crypto_pack_iovec)) ||
283 (out_vec[0].len != sizeof(uint32_t))) {
Soby Mathewc6e89362020-10-19 16:55:16 +0100284 return PSA_ERROR_PROGRAMMER_ERROR;
Antonio de Angelisab85ccd2019-03-25 15:14:29 +0000285 }
Antonio de Angelis4743e672019-04-11 11:38:48 +0100286 const struct tfm_crypto_pack_iovec *iov = in_vec[0].base;
Jamie Fox0e54ebc2019-04-09 14:21:04 +0100287 uint32_t handle = iov->op_handle;
Antonio de Angelis4743e672019-04-11 11:38:48 +0100288 uint32_t *handle_out = out_vec[0].base;
Antonio de Angelisab85ccd2019-03-25 15:14:29 +0000289
Antonio de Angelis4743e672019-04-11 11:38:48 +0100290 /* Init the handle in the operation with the one passed from the iov */
Jamie Fox0e54ebc2019-04-09 14:21:04 +0100291 *handle_out = iov->op_handle;
Antonio de Angelisab85ccd2019-03-25 15:14:29 +0000292
Louis Mayencourt7a36f782018-09-24 14:00:57 +0100293 /* Look up the corresponding operation context */
Antonio de Angelisab85ccd2019-03-25 15:14:29 +0000294 status = tfm_crypto_operation_lookup(TFM_CRYPTO_MAC_OPERATION,
Antonio de Angelis4743e672019-04-11 11:38:48 +0100295 handle,
Jamie Fox0e54ebc2019-04-09 14:21:04 +0100296 (void **)&operation);
Antonio de Angelisab85ccd2019-03-25 15:14:29 +0000297 if (status != PSA_SUCCESS) {
Antonio de Angelis25e2b2d2019-04-25 14:49:50 +0100298 /* Operation does not exist, so abort has no effect */
299 return PSA_SUCCESS;
Louis Mayencourt7a36f782018-09-24 14:00:57 +0100300 }
301
Jamie Fox0e54ebc2019-04-09 14:21:04 +0100302 status = psa_mac_abort(operation);
303
304 if (status != PSA_SUCCESS) {
305 /* Release the operation context, ignore if the operation fails. */
306 (void)tfm_crypto_operation_release(handle_out);
307 return status;
Louis Mayencourt7a36f782018-09-24 14:00:57 +0100308 }
309
Jamie Fox0e54ebc2019-04-09 14:21:04 +0100310 status = tfm_crypto_operation_release(handle_out);
311
Antonio de Angelis4743e672019-04-11 11:38:48 +0100312 return status;
Antonio de Angelis7740b382019-07-16 10:59:25 +0100313#endif /* TFM_CRYPTO_MAC_MODULE_DISABLED */
Louis Mayencourt7a36f782018-09-24 14:00:57 +0100314}
Antonio de Angelis04debbd2019-10-14 12:12:52 +0100315
316psa_status_t tfm_crypto_mac_compute(psa_invec in_vec[],
317 size_t in_len,
318 psa_outvec out_vec[],
319 size_t out_len)
320{
321 /* FixMe: To be implemented */
322 return PSA_ERROR_NOT_SUPPORTED;
323}
324
325psa_status_t tfm_crypto_mac_verify(psa_invec in_vec[],
326 size_t in_len,
327 psa_outvec out_vec[],
328 size_t out_len)
329{
330 /* FixMe: To be implemented */
331 return PSA_ERROR_NOT_SUPPORTED;
332}
Louis Mayencourt7a36f782018-09-24 14:00:57 +0100333/*!@}*/