blob: e9bb955ce88d3effef6a8d9d404a27ed8910ca7d [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/**
25 * \brief This defines the maximum supported key length in bytes
26 *
27 */
28#define TFM_CRYPTO_MAX_KEY_LENGTH (16)
29
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
70 * corresponding PSA return value. The user of this macro needs
71 * 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 */
75#define TFM_CRYPTO_PSA_RETURN(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 Angelis8908f472018-08-31 15:44:25 +010080
81#ifdef __cplusplus
82}
83#endif
84
85#endif /* __TFM_CRYPTO_DEFS_H__ */