blob: 4573811f77470367ec61383f5476464ef44ef91b [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"
18
19/* The return value is shared with the TFM service status value. The Crypto
20 * return codes shouldn't overlap with predefined TFM status values.
21 */
22#define TFM_CRYPTO_ERR_PSA_ERROR_OFFSET (TFM_PARTITION_SPECIFIC_ERROR_MIN)
23
24/**
Louis Mayencourt7a36f782018-09-24 14:00:57 +010025 * \brief This value is used to mark an handle as invalid.
26 *
27 */
28#define TFM_CRYPTO_INVALID_HANDLE (0xFFFFFFFF)
Antonio de Angelis8908f472018-08-31 15:44:25 +010029
30/**
Antonio de Angelis377a1552018-11-22 17:02:40 +000031 * \brief Define miscellaneous literal constants that are used in the module
32 *
33 */
Antonio de Angelis8908f472018-08-31 15:44:25 +010034enum {
35 TFM_CRYPTO_NOT_IN_USE = 0,
36 TFM_CRYPTO_IN_USE = 1
37};
38
Antonio de Angelis377a1552018-11-22 17:02:40 +000039/**
40 * \brief Possible return values from the TFM Crypto service. They must
41 * provide corresponding return values for psa_status_t possible
42 * values as specified in psa_crypto.h
43 */
Antonio de Angelis8908f472018-08-31 15:44:25 +010044enum tfm_crypto_err_t {
45 TFM_CRYPTO_ERR_PSA_SUCCESS = 0,
Antonio de Angelis377a1552018-11-22 17:02:40 +000046 TFM_CRYPTO_ERR_PSA_ERROR_UNKNOWN_ERROR = TFM_CRYPTO_ERR_PSA_ERROR_OFFSET,
47 TFM_CRYPTO_ERR_PSA_ERROR_NOT_SUPPORTED,
Antonio de Angelis8908f472018-08-31 15:44:25 +010048 TFM_CRYPTO_ERR_PSA_ERROR_NOT_PERMITTED,
49 TFM_CRYPTO_ERR_PSA_ERROR_BUFFER_TOO_SMALL,
50 TFM_CRYPTO_ERR_PSA_ERROR_OCCUPIED_SLOT,
51 TFM_CRYPTO_ERR_PSA_ERROR_EMPTY_SLOT,
52 TFM_CRYPTO_ERR_PSA_ERROR_BAD_STATE,
53 TFM_CRYPTO_ERR_PSA_ERROR_INVALID_ARGUMENT,
54 TFM_CRYPTO_ERR_PSA_ERROR_INSUFFICIENT_MEMORY,
55 TFM_CRYPTO_ERR_PSA_ERROR_INSUFFICIENT_STORAGE,
56 TFM_CRYPTO_ERR_PSA_ERROR_COMMUNICATION_FAILURE,
57 TFM_CRYPTO_ERR_PSA_ERROR_STORAGE_FAILURE,
58 TFM_CRYPTO_ERR_PSA_ERROR_HARDWARE_FAILURE,
59 TFM_CRYPTO_ERR_PSA_ERROR_TAMPERING_DETECTED,
60 TFM_CRYPTO_ERR_PSA_ERROR_INSUFFICIENT_ENTROPY,
61 TFM_CRYPTO_ERR_PSA_ERROR_INVALID_SIGNATURE,
62 TFM_CRYPTO_ERR_PSA_ERROR_INVALID_PADDING,
Antonio de Angelis8908f472018-08-31 15:44:25 +010063
64 /* Add an invalid return code which forces the size of the type as well */
65 TFM_CRYPTO_ERR_INVALID = INT_MAX
66};
67
68/**
Antonio de Angelis377a1552018-11-22 17:02:40 +000069 * \brief A macro to translate TFM Crypto service return values to the
Antonio de Angeliscf85ba22018-10-09 13:29:40 +010070 * corresponding psa_status_t value. The user of this macro needs
Antonio de Angelis377a1552018-11-22 17:02:40 +000071 * to cast the produced value to psa_status_t explicitly if needed
72 *
73 * \return Values specified by \ref psa_status_t
Antonio de Angelis8908f472018-08-31 15:44:25 +010074 */
Antonio de Angeliscf85ba22018-10-09 13:29:40 +010075#define TFM_CRYPTO_ERR_TO_PSA_STATUS(val) \
Antonio de Angelis377a1552018-11-22 17:02:40 +000076 ( (val == TFM_CRYPTO_ERR_PSA_SUCCESS) ? val : \
77 ((val >= (enum tfm_crypto_err_t)TFM_CRYPTO_ERR_PSA_ERROR_OFFSET) ? \
78 (val - ((enum tfm_crypto_err_t)TFM_CRYPTO_ERR_PSA_ERROR_OFFSET-1)) : \
79 TFM_CRYPTO_ERR_INVALID) )
Antonio de Angeliscf85ba22018-10-09 13:29:40 +010080/**
81 * \brief A macro to translate psa_status_t values to the corresponding return
82 * values for the TFM Crypto service
83 *
Gyorgy Szing40a7af02019-02-06 14:19:47 +010084 * \return Values specified by \ref tfm_crypto_err_t
Antonio de Angeliscf85ba22018-10-09 13:29:40 +010085 *
86 */
87#define PSA_STATUS_TO_TFM_CRYPTO_ERR(val) \
88 ( (val == PSA_SUCCESS) ? (enum tfm_crypto_err_t)val : \
Jamie Fox82b87ca2018-12-11 16:41:11 +000089 (enum tfm_crypto_err_t)(val + TFM_CRYPTO_ERR_PSA_ERROR_OFFSET-1) )
Antonio de Angelis8908f472018-08-31 15:44:25 +010090
91#ifdef __cplusplus
92}
93#endif
94
95#endif /* __TFM_CRYPTO_DEFS_H__ */