mirror of https://github.com/ARMmbed/mbed-os.git
crypto: Update Mbed Crypto to 1.0.0d3
parent
f4e6db235e
commit
4a25069611
|
|
@ -1 +1 @@
|
|||
mbedcrypto-1.0.0d2
|
||||
mbedcrypto-1.0.0d3
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
# Set the Mbed Crypto release to import (this can/should be edited before
|
||||
# import)
|
||||
CRYPTO_RELEASE ?= mbedcrypto-1.0.0d2
|
||||
CRYPTO_RELEASE ?= mbedcrypto-1.0.0d3
|
||||
CRYPTO_REPO_URL ?= git@github.com:ARMmbed/mbed-crypto.git
|
||||
|
||||
# Translate between Mbed Crypto namespace and Mbed OS namespace
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -111,7 +111,6 @@ void mbedtls_psa_crypto_free( void );
|
|||
* \retval #PSA_ERROR_INVALID_ARGUMENT
|
||||
* \p seed_size is out of range.
|
||||
* \retval #PSA_ERROR_STORAGE_FAILURE
|
||||
* \retval `PSA_ITS_ERROR_XXX`
|
||||
* There was a failure reading or writing from storage.
|
||||
* \retval #PSA_ERROR_NOT_PERMITTED
|
||||
* The library has already been initialized. It is no longer
|
||||
|
|
|
|||
|
|
@ -754,7 +754,7 @@ typedef psa_status_t (*psa_drv_destroy_key_t)(psa_key_slot_t key);
|
|||
* that make up the key data.
|
||||
*
|
||||
* \retval #PSA_SUCCESS
|
||||
* \retval #PSA_ERROR_EMPTY_SLOT
|
||||
* \retval #PSA_ERROR_DOES_NOT_EXIST
|
||||
* \retval #PSA_ERROR_NOT_PERMITTED
|
||||
* \retval #PSA_ERROR_NOT_SUPPORTED
|
||||
* \retval #PSA_ERROR_COMMUNICATION_FAILURE
|
||||
|
|
|
|||
|
|
@ -292,9 +292,9 @@
|
|||
(plaintext_length) - PSA_AEAD_TAG_LENGTH(alg) : \
|
||||
0)
|
||||
|
||||
#define PSA_RSA_MINIMUM_PADDING_SIZE(alg) \
|
||||
(PSA_ALG_IS_RSA_OAEP(alg) ? \
|
||||
2 * PSA_HASH_FINAL_SIZE(PSA_ALG_RSA_OAEP_GET_HASH(alg)) + 1 : \
|
||||
#define PSA_RSA_MINIMUM_PADDING_SIZE(alg) \
|
||||
(PSA_ALG_IS_RSA_OAEP(alg) ? \
|
||||
2 * PSA_HASH_SIZE(PSA_ALG_RSA_OAEP_GET_HASH(alg)) + 1 : \
|
||||
11 /*PKCS#1v1.5*/)
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -47,8 +47,13 @@
|
|||
* This is either #PSA_SUCCESS (which is zero), indicating success,
|
||||
* or a nonzero value indicating that an error occurred. Errors are
|
||||
* encoded as one of the \c PSA_ERROR_xxx values defined here.
|
||||
* If #PSA_SUCCESS is already defined, it means that #psa_status_t
|
||||
* is also defined in an external header, so prevent its multiple
|
||||
* definition.
|
||||
*/
|
||||
#ifndef PSA_SUCCESS
|
||||
typedef int32_t psa_status_t;
|
||||
#endif
|
||||
|
||||
/**@}*/
|
||||
|
||||
|
|
|
|||
|
|
@ -40,25 +40,17 @@
|
|||
* @{
|
||||
*/
|
||||
|
||||
#if !defined(PSA_SUCCESS)
|
||||
/* If PSA_SUCCESS is defined, assume that PSA crypto is being used
|
||||
* together with PSA IPC, which also defines the identifier
|
||||
* PSA_SUCCESS. We must not define PSA_SUCCESS ourselves in that case;
|
||||
* the other error code names don't clash. This is a temporary hack
|
||||
* until we unify error reporting in PSA IPC and PSA crypto.
|
||||
*
|
||||
* Note that psa_defs.h must be included before this header!
|
||||
*/
|
||||
/* PSA error codes */
|
||||
|
||||
/** The action was completed successfully. */
|
||||
#define PSA_SUCCESS ((psa_status_t)0)
|
||||
#endif /* !defined(PSA_SUCCESS) */
|
||||
|
||||
/** An error occurred that does not correspond to any defined
|
||||
* failure cause.
|
||||
*
|
||||
* Implementations may use this error code if none of the other standard
|
||||
* error codes are applicable. */
|
||||
#define PSA_ERROR_UNKNOWN_ERROR ((psa_status_t)1)
|
||||
#define PSA_ERROR_GENERIC_ERROR ((psa_status_t)-132)
|
||||
|
||||
/** The requested operation or a parameter is not supported
|
||||
* by this implementation.
|
||||
|
|
@ -67,7 +59,7 @@
|
|||
* parameter such as a key type, algorithm, etc. is not recognized.
|
||||
* If a combination of parameters is recognized and identified as
|
||||
* not valid, return #PSA_ERROR_INVALID_ARGUMENT instead. */
|
||||
#define PSA_ERROR_NOT_SUPPORTED ((psa_status_t)2)
|
||||
#define PSA_ERROR_NOT_SUPPORTED ((psa_status_t)-134)
|
||||
|
||||
/** The requested action is denied by a policy.
|
||||
*
|
||||
|
|
@ -80,7 +72,7 @@
|
|||
* not valid or not supported, it is unspecified whether the function
|
||||
* returns #PSA_ERROR_NOT_PERMITTED, #PSA_ERROR_NOT_SUPPORTED or
|
||||
* #PSA_ERROR_INVALID_ARGUMENT. */
|
||||
#define PSA_ERROR_NOT_PERMITTED ((psa_status_t)3)
|
||||
#define PSA_ERROR_NOT_PERMITTED ((psa_status_t)-133)
|
||||
|
||||
/** An output buffer is too small.
|
||||
*
|
||||
|
|
@ -92,23 +84,19 @@
|
|||
* buffer would succeed. However implementations may return this
|
||||
* error if a function has invalid or unsupported parameters in addition
|
||||
* to the parameters that determine the necessary output buffer size. */
|
||||
#define PSA_ERROR_BUFFER_TOO_SMALL ((psa_status_t)4)
|
||||
#define PSA_ERROR_BUFFER_TOO_SMALL ((psa_status_t)-138)
|
||||
|
||||
/** A slot is occupied, but must be empty to carry out the
|
||||
* requested action.
|
||||
/** Asking for an item that already exists
|
||||
*
|
||||
* If a handle is invalid, it does not designate an occupied slot.
|
||||
* The error for an invalid handle is #PSA_ERROR_INVALID_HANDLE.
|
||||
*/
|
||||
#define PSA_ERROR_OCCUPIED_SLOT ((psa_status_t)5)
|
||||
* Implementations should return this error, when attempting
|
||||
* to write an item (like a key) that already exists. */
|
||||
#define PSA_ERROR_ALREADY_EXISTS ((psa_status_t)-139)
|
||||
|
||||
/** A slot is empty, but must be occupied to carry out the
|
||||
* requested action.
|
||||
/** Asking for an item that doesn't exist
|
||||
*
|
||||
* If a handle is invalid, it does not designate an empty slot.
|
||||
* The error for an invalid handle is #PSA_ERROR_INVALID_HANDLE.
|
||||
*/
|
||||
#define PSA_ERROR_EMPTY_SLOT ((psa_status_t)6)
|
||||
* Implementations should return this error, if a requested item (like
|
||||
* a key) does not exist. */
|
||||
#define PSA_ERROR_DOES_NOT_EXIST ((psa_status_t)-140)
|
||||
|
||||
/** The requested action cannot be performed in the current state.
|
||||
*
|
||||
|
|
@ -118,9 +106,9 @@
|
|||
*
|
||||
* Implementations shall not return this error code to indicate
|
||||
* that a key slot is occupied when it needs to be free or vice versa,
|
||||
* but shall return #PSA_ERROR_OCCUPIED_SLOT or #PSA_ERROR_EMPTY_SLOT
|
||||
* but shall return #PSA_ERROR_ALREADY_EXISTS or #PSA_ERROR_DOES_NOT_EXIST
|
||||
* as applicable. */
|
||||
#define PSA_ERROR_BAD_STATE ((psa_status_t)7)
|
||||
#define PSA_ERROR_BAD_STATE ((psa_status_t)-137)
|
||||
|
||||
/** The parameters passed to the function are invalid.
|
||||
*
|
||||
|
|
@ -129,20 +117,20 @@
|
|||
*
|
||||
* Implementations shall not return this error code to indicate
|
||||
* that a key slot is occupied when it needs to be free or vice versa,
|
||||
* but shall return #PSA_ERROR_OCCUPIED_SLOT or #PSA_ERROR_EMPTY_SLOT
|
||||
* but shall return #PSA_ERROR_ALREADY_EXISTS or #PSA_ERROR_DOES_NOT_EXIST
|
||||
* as applicable.
|
||||
*
|
||||
* Implementation shall not return this error code to indicate that a
|
||||
* key handle is invalid, but shall return #PSA_ERROR_INVALID_HANDLE
|
||||
* instead.
|
||||
*/
|
||||
#define PSA_ERROR_INVALID_ARGUMENT ((psa_status_t)8)
|
||||
#define PSA_ERROR_INVALID_ARGUMENT ((psa_status_t)-135)
|
||||
|
||||
/** There is not enough runtime memory.
|
||||
*
|
||||
* If the action is carried out across multiple security realms, this
|
||||
* error can refer to available memory in any of the security realms. */
|
||||
#define PSA_ERROR_INSUFFICIENT_MEMORY ((psa_status_t)9)
|
||||
#define PSA_ERROR_INSUFFICIENT_MEMORY ((psa_status_t)-141)
|
||||
|
||||
/** There is not enough persistent storage.
|
||||
*
|
||||
|
|
@ -151,7 +139,7 @@
|
|||
* many functions that do not otherwise access storage may return this
|
||||
* error code if the implementation requires a mandatory log entry for
|
||||
* the requested action and the log storage space is full. */
|
||||
#define PSA_ERROR_INSUFFICIENT_STORAGE ((psa_status_t)10)
|
||||
#define PSA_ERROR_INSUFFICIENT_STORAGE ((psa_status_t)-142)
|
||||
|
||||
/** There was a communication failure inside the implementation.
|
||||
*
|
||||
|
|
@ -168,7 +156,7 @@
|
|||
* cryptoprocessor but there was a breakdown of communication before
|
||||
* the cryptoprocessor could report the status to the application.
|
||||
*/
|
||||
#define PSA_ERROR_COMMUNICATION_FAILURE ((psa_status_t)11)
|
||||
#define PSA_ERROR_COMMUNICATION_FAILURE ((psa_status_t)-145)
|
||||
|
||||
/** There was a storage failure that may have led to data loss.
|
||||
*
|
||||
|
|
@ -193,13 +181,13 @@
|
|||
* permanent storage corruption. However application writers should
|
||||
* keep in mind that transient errors while reading the storage may be
|
||||
* reported using this error code. */
|
||||
#define PSA_ERROR_STORAGE_FAILURE ((psa_status_t)12)
|
||||
#define PSA_ERROR_STORAGE_FAILURE ((psa_status_t)-146)
|
||||
|
||||
/** A hardware failure was detected.
|
||||
*
|
||||
* A hardware failure may be transient or permanent depending on the
|
||||
* cause. */
|
||||
#define PSA_ERROR_HARDWARE_FAILURE ((psa_status_t)13)
|
||||
#define PSA_ERROR_HARDWARE_FAILURE ((psa_status_t)-147)
|
||||
|
||||
/** A tampering attempt was detected.
|
||||
*
|
||||
|
|
@ -230,7 +218,7 @@
|
|||
* This error indicates an attack against the application. Implementations
|
||||
* shall not return this error code as a consequence of the behavior of
|
||||
* the application itself. */
|
||||
#define PSA_ERROR_TAMPERING_DETECTED ((psa_status_t)14)
|
||||
#define PSA_ERROR_TAMPERING_DETECTED ((psa_status_t)-151)
|
||||
|
||||
/** There is not enough entropy to generate random data needed
|
||||
* for the requested action.
|
||||
|
|
@ -249,7 +237,7 @@
|
|||
* secure pseudorandom generator (PRNG). However implementations may return
|
||||
* this error at any time if a policy requires the PRNG to be reseeded
|
||||
* during normal operation. */
|
||||
#define PSA_ERROR_INSUFFICIENT_ENTROPY ((psa_status_t)15)
|
||||
#define PSA_ERROR_INSUFFICIENT_ENTROPY ((psa_status_t)-148)
|
||||
|
||||
/** The signature, MAC or hash is incorrect.
|
||||
*
|
||||
|
|
@ -259,7 +247,7 @@
|
|||
*
|
||||
* If the value to verify has an invalid size, implementations may return
|
||||
* either #PSA_ERROR_INVALID_ARGUMENT or #PSA_ERROR_INVALID_SIGNATURE. */
|
||||
#define PSA_ERROR_INVALID_SIGNATURE ((psa_status_t)16)
|
||||
#define PSA_ERROR_INVALID_SIGNATURE ((psa_status_t)-149)
|
||||
|
||||
/** The decrypted padding is incorrect.
|
||||
*
|
||||
|
|
@ -275,17 +263,15 @@
|
|||
* as close as possible to indistinguishable to an external observer.
|
||||
* In particular, the timing of a decryption operation should not
|
||||
* depend on the validity of the padding. */
|
||||
#define PSA_ERROR_INVALID_PADDING ((psa_status_t)17)
|
||||
#define PSA_ERROR_INVALID_PADDING ((psa_status_t)-150)
|
||||
|
||||
/** The generator has insufficient capacity left.
|
||||
*
|
||||
* Once a function returns this error, attempts to read from the
|
||||
* generator will always return this error. */
|
||||
#define PSA_ERROR_INSUFFICIENT_CAPACITY ((psa_status_t)18)
|
||||
/** Return this error when there's insufficient data when attempting
|
||||
* to read from a resource. */
|
||||
#define PSA_ERROR_INSUFFICIENT_DATA ((psa_status_t)-143)
|
||||
|
||||
/** The key handle is not valid.
|
||||
*/
|
||||
#define PSA_ERROR_INVALID_HANDLE ((psa_status_t)19)
|
||||
#define PSA_ERROR_INVALID_HANDLE ((psa_status_t)-136)
|
||||
|
||||
/**@}*/
|
||||
|
||||
|
|
@ -766,7 +752,7 @@
|
|||
* algorithm is considered identical to the untruncated algorithm
|
||||
* for policy comparison purposes.
|
||||
*
|
||||
* \param alg A MAC algorithm identifier (value of type
|
||||
* \param mac_alg A MAC algorithm identifier (value of type
|
||||
* #psa_algorithm_t such that #PSA_ALG_IS_MAC(\p alg)
|
||||
* is true). This may be a truncated or untruncated
|
||||
* MAC algorithm.
|
||||
|
|
@ -782,14 +768,14 @@
|
|||
* MAC algorithm or if \p mac_length is too small or
|
||||
* too large for the specified MAC algorithm.
|
||||
*/
|
||||
#define PSA_ALG_TRUNCATED_MAC(alg, mac_length) \
|
||||
(((alg) & ~PSA_ALG_MAC_TRUNCATION_MASK) | \
|
||||
#define PSA_ALG_TRUNCATED_MAC(mac_alg, mac_length) \
|
||||
(((mac_alg) & ~PSA_ALG_MAC_TRUNCATION_MASK) | \
|
||||
((mac_length) << PSA_MAC_TRUNCATION_OFFSET & PSA_ALG_MAC_TRUNCATION_MASK))
|
||||
|
||||
/** Macro to build the base MAC algorithm corresponding to a truncated
|
||||
* MAC algorithm.
|
||||
*
|
||||
* \param alg A MAC algorithm identifier (value of type
|
||||
* \param mac_alg A MAC algorithm identifier (value of type
|
||||
* #psa_algorithm_t such that #PSA_ALG_IS_MAC(\p alg)
|
||||
* is true). This may be a truncated or untruncated
|
||||
* MAC algorithm.
|
||||
|
|
@ -798,12 +784,12 @@
|
|||
* \return Unspecified if \p alg is not a supported
|
||||
* MAC algorithm.
|
||||
*/
|
||||
#define PSA_ALG_FULL_LENGTH_MAC(alg) \
|
||||
((alg) & ~PSA_ALG_MAC_TRUNCATION_MASK)
|
||||
#define PSA_ALG_FULL_LENGTH_MAC(mac_alg) \
|
||||
((mac_alg) & ~PSA_ALG_MAC_TRUNCATION_MASK)
|
||||
|
||||
/** Length to which a MAC algorithm is truncated.
|
||||
*
|
||||
* \param alg A MAC algorithm identifier (value of type
|
||||
* \param mac_alg A MAC algorithm identifier (value of type
|
||||
* #psa_algorithm_t such that #PSA_ALG_IS_MAC(\p alg)
|
||||
* is true).
|
||||
*
|
||||
|
|
@ -812,8 +798,8 @@
|
|||
* \return Unspecified if \p alg is not a supported
|
||||
* MAC algorithm.
|
||||
*/
|
||||
#define PSA_MAC_TRUNCATED_LENGTH(alg) \
|
||||
(((alg) & PSA_ALG_MAC_TRUNCATION_MASK) >> PSA_MAC_TRUNCATION_OFFSET)
|
||||
#define PSA_MAC_TRUNCATED_LENGTH(mac_alg) \
|
||||
(((mac_alg) & PSA_ALG_MAC_TRUNCATION_MASK) >> PSA_MAC_TRUNCATION_OFFSET)
|
||||
|
||||
#define PSA_ALG_CIPHER_MAC_BASE ((psa_algorithm_t)0x02c00000)
|
||||
#define PSA_ALG_CBC_MAC ((psa_algorithm_t)0x02c00001)
|
||||
|
|
@ -910,7 +896,7 @@
|
|||
* Depending on the algorithm, the tag length may affect the calculation
|
||||
* of the ciphertext.
|
||||
*
|
||||
* \param alg A AEAD algorithm identifier (value of type
|
||||
* \param aead_alg An AEAD algorithm identifier (value of type
|
||||
* #psa_algorithm_t such that #PSA_ALG_IS_AEAD(\p alg)
|
||||
* is true).
|
||||
* \param tag_length Desired length of the authentication tag in bytes.
|
||||
|
|
@ -921,26 +907,26 @@
|
|||
* AEAD algorithm or if \p tag_length is not valid
|
||||
* for the specified AEAD algorithm.
|
||||
*/
|
||||
#define PSA_ALG_AEAD_WITH_TAG_LENGTH(alg, tag_length) \
|
||||
(((alg) & ~PSA_ALG_AEAD_TAG_LENGTH_MASK) | \
|
||||
#define PSA_ALG_AEAD_WITH_TAG_LENGTH(aead_alg, tag_length) \
|
||||
(((aead_alg) & ~PSA_ALG_AEAD_TAG_LENGTH_MASK) | \
|
||||
((tag_length) << PSA_AEAD_TAG_LENGTH_OFFSET & \
|
||||
PSA_ALG_AEAD_TAG_LENGTH_MASK))
|
||||
|
||||
/** Calculate the corresponding AEAD algorithm with the default tag length.
|
||||
*
|
||||
* \param alg An AEAD algorithm (\c PSA_ALG_XXX value such that
|
||||
* #PSA_ALG_IS_AEAD(\p alg) is true).
|
||||
* \param aead_alg An AEAD algorithm (\c PSA_ALG_XXX value such that
|
||||
* #PSA_ALG_IS_AEAD(\p alg) is true).
|
||||
*
|
||||
* \return The corresponding AEAD algorithm with the default tag length
|
||||
* for that algorithm.
|
||||
* \return The corresponding AEAD algorithm with the default
|
||||
* tag length for that algorithm.
|
||||
*/
|
||||
#define PSA_ALG_AEAD_WITH_DEFAULT_TAG_LENGTH(alg) \
|
||||
#define PSA_ALG_AEAD_WITH_DEFAULT_TAG_LENGTH(aead_alg) \
|
||||
( \
|
||||
PSA__ALG_AEAD_WITH_DEFAULT_TAG_LENGTH__CASE(alg, PSA_ALG_CCM) \
|
||||
PSA__ALG_AEAD_WITH_DEFAULT_TAG_LENGTH__CASE(alg, PSA_ALG_GCM) \
|
||||
PSA__ALG_AEAD_WITH_DEFAULT_TAG_LENGTH__CASE(aead_alg, PSA_ALG_CCM) \
|
||||
PSA__ALG_AEAD_WITH_DEFAULT_TAG_LENGTH__CASE(aead_alg, PSA_ALG_GCM) \
|
||||
0)
|
||||
#define PSA__ALG_AEAD_WITH_DEFAULT_TAG_LENGTH__CASE(alg, ref) \
|
||||
PSA_ALG_AEAD_WITH_TAG_LENGTH(alg, 0) == \
|
||||
#define PSA__ALG_AEAD_WITH_DEFAULT_TAG_LENGTH__CASE(aead_alg, ref) \
|
||||
PSA_ALG_AEAD_WITH_TAG_LENGTH(aead_alg, 0) == \
|
||||
PSA_ALG_AEAD_WITH_TAG_LENGTH(ref, 0) ? \
|
||||
ref :
|
||||
|
||||
|
|
|
|||
|
|
@ -172,13 +172,13 @@ static psa_status_t mbedtls_to_psa_error( int ret )
|
|||
case MBEDTLS_ERR_ASN1_BUF_TOO_SMALL:
|
||||
return( PSA_ERROR_BUFFER_TOO_SMALL );
|
||||
|
||||
case MBEDTLS_ERR_BLOWFISH_INVALID_KEY_LENGTH:
|
||||
case MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA:
|
||||
case MBEDTLS_ERR_BLOWFISH_INVALID_INPUT_LENGTH:
|
||||
return( PSA_ERROR_NOT_SUPPORTED );
|
||||
case MBEDTLS_ERR_BLOWFISH_HW_ACCEL_FAILED:
|
||||
return( PSA_ERROR_HARDWARE_FAILURE );
|
||||
|
||||
case MBEDTLS_ERR_CAMELLIA_INVALID_KEY_LENGTH:
|
||||
case MBEDTLS_ERR_CAMELLIA_BAD_INPUT_DATA:
|
||||
case MBEDTLS_ERR_CAMELLIA_INVALID_INPUT_LENGTH:
|
||||
return( PSA_ERROR_NOT_SUPPORTED );
|
||||
case MBEDTLS_ERR_CAMELLIA_HW_ACCEL_FAILED:
|
||||
|
|
@ -346,7 +346,7 @@ static psa_status_t mbedtls_to_psa_error( int ret )
|
|||
return( PSA_ERROR_HARDWARE_FAILURE );
|
||||
|
||||
default:
|
||||
return( PSA_ERROR_UNKNOWN_ERROR );
|
||||
return( PSA_ERROR_GENERIC_ERROR );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -742,12 +742,38 @@ static psa_status_t psa_get_empty_key_slot( psa_key_handle_t handle,
|
|||
return( status );
|
||||
|
||||
if( slot->type != PSA_KEY_TYPE_NONE )
|
||||
return( PSA_ERROR_OCCUPIED_SLOT );
|
||||
return( PSA_ERROR_ALREADY_EXISTS );
|
||||
|
||||
*p_slot = slot;
|
||||
return( status );
|
||||
}
|
||||
|
||||
/** Calculate the intersection of two algorithm usage policies.
|
||||
*
|
||||
* Return 0 (which allows no operation) on incompatibility.
|
||||
*/
|
||||
static psa_algorithm_t psa_key_policy_algorithm_intersection(
|
||||
psa_algorithm_t alg1,
|
||||
psa_algorithm_t alg2 )
|
||||
{
|
||||
/* Common case: the policy only allows alg. */
|
||||
if( alg1 == alg2 )
|
||||
return( alg1 );
|
||||
/* If the policies are from the same hash-and-sign family, check
|
||||
* if one is a wildcard. If so the other has the specific algorithm. */
|
||||
if( PSA_ALG_IS_HASH_AND_SIGN( alg1 ) &&
|
||||
PSA_ALG_IS_HASH_AND_SIGN( alg2 ) &&
|
||||
( alg1 & ~PSA_ALG_HASH_MASK ) == ( alg2 & ~PSA_ALG_HASH_MASK ) )
|
||||
{
|
||||
if( PSA_ALG_SIGN_GET_HASH( alg1 ) == PSA_ALG_ANY_HASH )
|
||||
return( alg2 );
|
||||
if( PSA_ALG_SIGN_GET_HASH( alg2 ) == PSA_ALG_ANY_HASH )
|
||||
return( alg1 );
|
||||
}
|
||||
/* If the policies are incompatible, allow nothing. */
|
||||
return( 0 );
|
||||
}
|
||||
|
||||
/** Test whether a policy permits an algorithm.
|
||||
*
|
||||
* The caller must test usage flags separately.
|
||||
|
|
@ -771,6 +797,31 @@ static int psa_key_policy_permits( const psa_key_policy_t *policy,
|
|||
return( 0 );
|
||||
}
|
||||
|
||||
/** Restrict a key policy based on a constraint.
|
||||
*
|
||||
* \param[in,out] policy The policy to restrict.
|
||||
* \param[in] constraint The policy constraint to apply.
|
||||
*
|
||||
* \retval #PSA_SUCCESS
|
||||
* \c *policy contains the intersection of the original value of
|
||||
* \c *policy and \c *constraint.
|
||||
* \retval #PSA_ERROR_INVALID_ARGUMENT
|
||||
* \c *policy and \c *constraint are incompatible.
|
||||
* \c *policy is unchanged.
|
||||
*/
|
||||
static psa_status_t psa_restrict_key_policy(
|
||||
psa_key_policy_t *policy,
|
||||
const psa_key_policy_t *constraint )
|
||||
{
|
||||
psa_algorithm_t intersection_alg =
|
||||
psa_key_policy_algorithm_intersection( policy->alg, constraint->alg );
|
||||
if( intersection_alg == 0 && policy->alg != 0 && constraint->alg != 0 )
|
||||
return( PSA_ERROR_INVALID_ARGUMENT );
|
||||
policy->usage &= constraint->usage;
|
||||
policy->alg = intersection_alg;
|
||||
return( PSA_SUCCESS );
|
||||
}
|
||||
|
||||
/** Retrieve a slot which must contain a key. The key must have allow all the
|
||||
* usage flags set in \p usage. If \p alg is nonzero, the key must allow
|
||||
* operations with this algorithm. */
|
||||
|
|
@ -788,7 +839,7 @@ static psa_status_t psa_get_key_from_slot( psa_key_handle_t handle,
|
|||
if( status != PSA_SUCCESS )
|
||||
return( status );
|
||||
if( slot->type == PSA_KEY_TYPE_NONE )
|
||||
return( PSA_ERROR_EMPTY_SLOT );
|
||||
return( PSA_ERROR_DOES_NOT_EXIST );
|
||||
|
||||
/* Enforce that usage policy for the key slot contains all the flags
|
||||
* required by the usage parameter. There is one exception: public
|
||||
|
|
@ -950,7 +1001,7 @@ psa_status_t psa_get_key_information( psa_key_handle_t handle,
|
|||
return( status );
|
||||
|
||||
if( slot->type == PSA_KEY_TYPE_NONE )
|
||||
return( PSA_ERROR_EMPTY_SLOT );
|
||||
return( PSA_ERROR_DOES_NOT_EXIST );
|
||||
if( type != NULL )
|
||||
*type = slot->type;
|
||||
if( bits != NULL )
|
||||
|
|
@ -974,11 +1025,11 @@ static int pk_write_pubkey_simple( mbedtls_pk_context *key,
|
|||
}
|
||||
#endif /* defined(MBEDTLS_RSA_C) || defined(MBEDTLS_ECP_C) */
|
||||
|
||||
static psa_status_t psa_internal_export_key( psa_key_slot_t *slot,
|
||||
uint8_t *data,
|
||||
size_t data_size,
|
||||
size_t *data_length,
|
||||
int export_public_key )
|
||||
static psa_status_t psa_internal_export_key( const psa_key_slot_t *slot,
|
||||
uint8_t *data,
|
||||
size_t data_size,
|
||||
size_t *data_length,
|
||||
int export_public_key )
|
||||
{
|
||||
*data_length = 0;
|
||||
|
||||
|
|
@ -1165,6 +1216,65 @@ exit:
|
|||
}
|
||||
#endif /* defined(MBEDTLS_PSA_CRYPTO_STORAGE_C) */
|
||||
|
||||
static psa_status_t psa_copy_key_material( const psa_key_slot_t *source,
|
||||
psa_key_handle_t target )
|
||||
{
|
||||
psa_status_t status;
|
||||
uint8_t *buffer = NULL;
|
||||
size_t buffer_size = 0;
|
||||
size_t length;
|
||||
|
||||
buffer_size = PSA_KEY_EXPORT_MAX_SIZE( source->type,
|
||||
psa_get_key_bits( source ) );
|
||||
buffer = mbedtls_calloc( 1, buffer_size );
|
||||
if( buffer == NULL && buffer_size != 0 )
|
||||
return( PSA_ERROR_INSUFFICIENT_MEMORY );
|
||||
status = psa_internal_export_key( source, buffer, buffer_size, &length, 0 );
|
||||
if( status != PSA_SUCCESS )
|
||||
goto exit;
|
||||
status = psa_import_key( target, source->type, buffer, length );
|
||||
|
||||
exit:
|
||||
if( buffer_size != 0 )
|
||||
mbedtls_platform_zeroize( buffer, buffer_size );
|
||||
mbedtls_free( buffer );
|
||||
return( status );
|
||||
}
|
||||
|
||||
psa_status_t psa_copy_key(psa_key_handle_t source_handle,
|
||||
psa_key_handle_t target_handle,
|
||||
const psa_key_policy_t *constraint)
|
||||
{
|
||||
psa_key_slot_t *source_slot = NULL;
|
||||
psa_key_slot_t *target_slot = NULL;
|
||||
psa_key_policy_t new_policy;
|
||||
psa_status_t status;
|
||||
status = psa_get_key_from_slot( source_handle, &source_slot, 0, 0 );
|
||||
if( status != PSA_SUCCESS )
|
||||
return( status );
|
||||
status = psa_get_empty_key_slot( target_handle, &target_slot );
|
||||
if( status != PSA_SUCCESS )
|
||||
return( status );
|
||||
|
||||
new_policy = target_slot->policy;
|
||||
status = psa_restrict_key_policy( &new_policy, &source_slot->policy );
|
||||
if( status != PSA_SUCCESS )
|
||||
return( status );
|
||||
if( constraint != NULL )
|
||||
{
|
||||
status = psa_restrict_key_policy( &new_policy, constraint );
|
||||
if( status != PSA_SUCCESS )
|
||||
return( status );
|
||||
}
|
||||
|
||||
status = psa_copy_key_material( source_slot, target_handle );
|
||||
if( status != PSA_SUCCESS )
|
||||
return( status );
|
||||
|
||||
target_slot->policy = new_policy;
|
||||
return( PSA_SUCCESS );
|
||||
}
|
||||
|
||||
|
||||
|
||||
/****************************************************************/
|
||||
|
|
@ -2988,7 +3098,7 @@ psa_status_t psa_cipher_finish( psa_cipher_operation_t *operation,
|
|||
size_t output_size,
|
||||
size_t *output_length )
|
||||
{
|
||||
psa_status_t status = PSA_ERROR_UNKNOWN_ERROR;
|
||||
psa_status_t status = PSA_ERROR_GENERIC_ERROR;
|
||||
int cipher_ret = MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE;
|
||||
uint8_t temp_output_buffer[MBEDTLS_MAX_BLOCK_LENGTH];
|
||||
|
||||
|
|
@ -3745,7 +3855,7 @@ psa_status_t psa_generator_read( psa_crypto_generator_t *generator,
|
|||
generator->capacity = 0;
|
||||
/* Go through the error path to wipe all confidential data now
|
||||
* that the generator object is useless. */
|
||||
status = PSA_ERROR_INSUFFICIENT_CAPACITY;
|
||||
status = PSA_ERROR_INSUFFICIENT_DATA;
|
||||
goto exit;
|
||||
}
|
||||
if( output_length == 0 &&
|
||||
|
|
@ -3757,7 +3867,7 @@ psa_status_t psa_generator_read( psa_crypto_generator_t *generator,
|
|||
* INSUFFICIENT_CAPACITY, which is right for a finished
|
||||
* generator, for consistency with the case when
|
||||
* output_length > 0. */
|
||||
return( PSA_ERROR_INSUFFICIENT_CAPACITY );
|
||||
return( PSA_ERROR_INSUFFICIENT_DATA );
|
||||
}
|
||||
generator->capacity -= output_length;
|
||||
|
||||
|
|
@ -4281,45 +4391,11 @@ psa_status_t psa_generate_random( uint8_t *output,
|
|||
|
||||
#if ( defined(MBEDTLS_ENTROPY_NV_SEED) && defined(MBEDTLS_PSA_HAS_ITS_IO) )
|
||||
|
||||
/* Support function for error conversion between psa_its error codes to psa crypto */
|
||||
static psa_status_t its_to_psa_error( psa_its_status_t ret )
|
||||
{
|
||||
switch( ret )
|
||||
{
|
||||
case PSA_ITS_SUCCESS:
|
||||
return( PSA_SUCCESS );
|
||||
|
||||
case PSA_ITS_ERROR_UID_NOT_FOUND:
|
||||
return( PSA_ERROR_EMPTY_SLOT );
|
||||
|
||||
case PSA_ITS_ERROR_STORAGE_FAILURE:
|
||||
return( PSA_ERROR_STORAGE_FAILURE );
|
||||
|
||||
case PSA_ITS_ERROR_INSUFFICIENT_SPACE:
|
||||
return( PSA_ERROR_INSUFFICIENT_STORAGE );
|
||||
|
||||
case PSA_ITS_ERROR_OFFSET_INVALID:
|
||||
case PSA_ITS_ERROR_INCORRECT_SIZE:
|
||||
case PSA_ITS_ERROR_INVALID_ARGUMENTS:
|
||||
return( PSA_ERROR_INVALID_ARGUMENT );
|
||||
|
||||
case PSA_ITS_ERROR_FLAGS_NOT_SUPPORTED:
|
||||
return( PSA_ERROR_NOT_SUPPORTED );
|
||||
|
||||
case PSA_ITS_ERROR_WRITE_ONCE:
|
||||
return( PSA_ERROR_OCCUPIED_SLOT );
|
||||
|
||||
default:
|
||||
return( PSA_ERROR_UNKNOWN_ERROR );
|
||||
}
|
||||
}
|
||||
|
||||
psa_status_t mbedtls_psa_inject_entropy( const unsigned char *seed,
|
||||
size_t seed_size )
|
||||
{
|
||||
psa_status_t status;
|
||||
psa_its_status_t its_status;
|
||||
struct psa_its_info_t p_info;
|
||||
struct psa_storage_info_t p_info;
|
||||
if( global_data.initialized )
|
||||
return( PSA_ERROR_NOT_PERMITTED );
|
||||
|
||||
|
|
@ -4328,15 +4404,13 @@ psa_status_t mbedtls_psa_inject_entropy( const unsigned char *seed,
|
|||
( seed_size > MBEDTLS_ENTROPY_MAX_SEED_SIZE ) )
|
||||
return( PSA_ERROR_INVALID_ARGUMENT );
|
||||
|
||||
its_status = psa_its_get_info( PSA_CRYPTO_ITS_RANDOM_SEED_UID, &p_info );
|
||||
status = its_to_psa_error( its_status );
|
||||
status = psa_its_get_info( PSA_CRYPTO_ITS_RANDOM_SEED_UID, &p_info );
|
||||
|
||||
if( PSA_ITS_ERROR_UID_NOT_FOUND == its_status ) /* No seed exists */
|
||||
if( PSA_ERROR_DOES_NOT_EXIST == status ) /* No seed exists */
|
||||
{
|
||||
its_status = psa_its_set( PSA_CRYPTO_ITS_RANDOM_SEED_UID, seed_size, seed, 0 );
|
||||
status = its_to_psa_error( its_status );
|
||||
status = psa_its_set( PSA_CRYPTO_ITS_RANDOM_SEED_UID, seed_size, seed, 0 );
|
||||
}
|
||||
else if( PSA_ITS_SUCCESS == its_status )
|
||||
else if( PSA_SUCCESS == status )
|
||||
{
|
||||
/* You should not be here. Seed needs to be injected only once */
|
||||
status = PSA_ERROR_NOT_PERMITTED;
|
||||
|
|
|
|||
|
|
@ -194,7 +194,7 @@ exit:
|
|||
*
|
||||
* \retval #PSA_SUCCESS
|
||||
* The slot content was loaded successfully.
|
||||
* \retval #PSA_ERROR_EMPTY_SLOT
|
||||
* \retval #PSA_ERROR_DOES_NOT_EXIST
|
||||
* There is no content for this slot in persistent storage.
|
||||
* \retval #PSA_ERROR_INVALID_HANDLE
|
||||
* \retval #PSA_ERROR_INVALID_ARGUMENT
|
||||
|
|
@ -274,11 +274,11 @@ psa_status_t psa_create_key( psa_key_lifetime_t lifetime,
|
|||
psa_status_t status;
|
||||
|
||||
status = persistent_key_setup( lifetime, id, handle,
|
||||
PSA_ERROR_EMPTY_SLOT );
|
||||
PSA_ERROR_DOES_NOT_EXIST );
|
||||
switch( status )
|
||||
{
|
||||
case PSA_SUCCESS: return( PSA_ERROR_OCCUPIED_SLOT );
|
||||
case PSA_ERROR_EMPTY_SLOT: return( PSA_SUCCESS );
|
||||
case PSA_SUCCESS: return( PSA_ERROR_ALREADY_EXISTS );
|
||||
case PSA_ERROR_DOES_NOT_EXIST: return( PSA_SUCCESS );
|
||||
default: return( status );
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@
|
|||
#if defined(MBEDTLS_PLATFORM_C)
|
||||
#include "mbedtls/platform.h"
|
||||
#else
|
||||
#include <stdlib.h>
|
||||
#define mbedtls_calloc calloc
|
||||
#define mbedtls_free free
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -84,7 +84,7 @@ extern "C" {
|
|||
* \retval PSA_ERROR_INSUFFICIENT_MEMORY
|
||||
* \retval PSA_ERROR_INSUFFICIENT_STORAGE
|
||||
* \retval PSA_ERROR_STORAGE_FAILURE
|
||||
* \retval PSA_ERROR_OCCUPIED_SLOT
|
||||
* \retval PSA_ERROR_ALREADY_EXISTS
|
||||
*/
|
||||
psa_status_t psa_save_persistent_key( const psa_key_id_t key,
|
||||
const psa_key_type_t type,
|
||||
|
|
@ -115,7 +115,7 @@ psa_status_t psa_save_persistent_key( const psa_key_id_t key,
|
|||
* \retval PSA_SUCCESS
|
||||
* \retval PSA_ERROR_INSUFFICIENT_MEMORY
|
||||
* \retval PSA_ERROR_STORAGE_FAILURE
|
||||
* \retval PSA_ERROR_EMPTY_SLOT
|
||||
* \retval PSA_ERROR_DOES_NOT_EXIST
|
||||
*/
|
||||
psa_status_t psa_load_persistent_key( psa_key_id_t key,
|
||||
psa_key_type_t *type,
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@ extern "C" {
|
|||
*
|
||||
* \retval PSA_SUCCESS
|
||||
* \retval PSA_ERROR_STORAGE_FAILURE
|
||||
* \retval PSA_ERROR_EMPTY_SLOT
|
||||
* \retval PSA_ERROR_DOES_NOT_EXIST
|
||||
*/
|
||||
psa_status_t psa_crypto_storage_load( const psa_key_id_t key, uint8_t *data,
|
||||
size_t data_size );
|
||||
|
|
@ -73,7 +73,7 @@ psa_status_t psa_crypto_storage_load( const psa_key_id_t key, uint8_t *data,
|
|||
* \retval PSA_SUCCESS
|
||||
* \retval PSA_ERROR_INSUFFICIENT_STORAGE
|
||||
* \retval PSA_ERROR_STORAGE_FAILURE
|
||||
* \retval PSA_ERROR_OCCUPIED_SLOT
|
||||
* \retval PSA_ERROR_ALREADY_EXISTS
|
||||
*/
|
||||
psa_status_t psa_crypto_storage_store( const psa_key_id_t key,
|
||||
const uint8_t *data,
|
||||
|
|
|
|||
|
|
@ -36,6 +36,7 @@
|
|||
#if defined(MBEDTLS_PLATFORM_C)
|
||||
#include "mbedtls/platform.h"
|
||||
#else
|
||||
#include <stdio.h>
|
||||
#define mbedtls_snprintf snprintf
|
||||
#endif
|
||||
|
||||
|
|
@ -118,7 +119,7 @@ psa_status_t psa_crypto_storage_store( const psa_key_id_t key,
|
|||
key_id_to_location( key, slot_location, MAX_LOCATION_LEN );
|
||||
|
||||
if( psa_is_key_present_in_storage( key ) == 1 )
|
||||
return( PSA_ERROR_OCCUPIED_SLOT );
|
||||
return( PSA_ERROR_ALREADY_EXISTS );
|
||||
|
||||
file = fopen( temp_location, "wb" );
|
||||
if( file == NULL )
|
||||
|
|
@ -186,7 +187,7 @@ psa_status_t psa_crypto_storage_get_data_length( const psa_key_id_t key,
|
|||
|
||||
file = fopen( slot_location, "rb" );
|
||||
if( file == NULL )
|
||||
return( PSA_ERROR_EMPTY_SLOT );
|
||||
return( PSA_ERROR_DOES_NOT_EXIST );
|
||||
|
||||
if( fseek( file, 0, SEEK_END ) != 0 )
|
||||
{
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@
|
|||
|
||||
#if defined(MBEDTLS_PSA_CRYPTO_STORAGE_ITS_C)
|
||||
|
||||
#include "psa/error.h"
|
||||
#include "psa/crypto.h"
|
||||
#include "psa_crypto_storage_backend.h"
|
||||
#include "psa/internal_trusted_storage.h"
|
||||
|
|
@ -35,39 +36,7 @@
|
|||
#include "mbedtls/platform.h"
|
||||
#endif
|
||||
|
||||
static psa_status_t its_to_psa_error( psa_its_status_t ret )
|
||||
{
|
||||
switch( ret )
|
||||
{
|
||||
case PSA_ITS_SUCCESS:
|
||||
return( PSA_SUCCESS );
|
||||
|
||||
case PSA_ITS_ERROR_UID_NOT_FOUND:
|
||||
return( PSA_ERROR_EMPTY_SLOT );
|
||||
|
||||
case PSA_ITS_ERROR_STORAGE_FAILURE:
|
||||
return( PSA_ERROR_STORAGE_FAILURE );
|
||||
|
||||
case PSA_ITS_ERROR_INSUFFICIENT_SPACE:
|
||||
return( PSA_ERROR_INSUFFICIENT_STORAGE );
|
||||
|
||||
case PSA_ITS_ERROR_OFFSET_INVALID:
|
||||
case PSA_ITS_ERROR_INCORRECT_SIZE:
|
||||
case PSA_ITS_ERROR_INVALID_ARGUMENTS:
|
||||
return( PSA_ERROR_INVALID_ARGUMENT );
|
||||
|
||||
case PSA_ITS_ERROR_FLAGS_NOT_SUPPORTED:
|
||||
return( PSA_ERROR_NOT_SUPPORTED );
|
||||
|
||||
case PSA_ITS_ERROR_WRITE_ONCE:
|
||||
return( PSA_ERROR_OCCUPIED_SLOT );
|
||||
|
||||
default:
|
||||
return( PSA_ERROR_UNKNOWN_ERROR );
|
||||
}
|
||||
}
|
||||
|
||||
static psa_its_uid_t psa_its_identifier_of_slot( psa_key_id_t key )
|
||||
static psa_storage_uid_t psa_its_identifier_of_slot( psa_key_id_t key )
|
||||
{
|
||||
return( key );
|
||||
}
|
||||
|
|
@ -75,31 +44,28 @@ static psa_its_uid_t psa_its_identifier_of_slot( psa_key_id_t key )
|
|||
psa_status_t psa_crypto_storage_load( const psa_key_id_t key, uint8_t *data,
|
||||
size_t data_size )
|
||||
{
|
||||
psa_its_status_t ret;
|
||||
psa_status_t status;
|
||||
psa_its_uid_t data_identifier = psa_its_identifier_of_slot( key );
|
||||
struct psa_its_info_t data_identifier_info;
|
||||
psa_storage_uid_t data_identifier = psa_its_identifier_of_slot( key );
|
||||
struct psa_storage_info_t data_identifier_info;
|
||||
|
||||
ret = psa_its_get_info( data_identifier, &data_identifier_info );
|
||||
status = its_to_psa_error( ret );
|
||||
if( status != PSA_SUCCESS )
|
||||
status = psa_its_get_info( data_identifier, &data_identifier_info );
|
||||
if( status != PSA_SUCCESS )
|
||||
return( status );
|
||||
|
||||
ret = psa_its_get( data_identifier, 0, data_size, data );
|
||||
status = its_to_psa_error( ret );
|
||||
status = psa_its_get( data_identifier, 0, data_size, data );
|
||||
|
||||
return( status );
|
||||
}
|
||||
|
||||
int psa_is_key_present_in_storage( const psa_key_id_t key )
|
||||
{
|
||||
psa_its_status_t ret;
|
||||
psa_its_uid_t data_identifier = psa_its_identifier_of_slot( key );
|
||||
struct psa_its_info_t data_identifier_info;
|
||||
psa_status_t ret;
|
||||
psa_storage_uid_t data_identifier = psa_its_identifier_of_slot( key );
|
||||
struct psa_storage_info_t data_identifier_info;
|
||||
|
||||
ret = psa_its_get_info( data_identifier, &data_identifier_info );
|
||||
|
||||
if( ret == PSA_ITS_ERROR_UID_NOT_FOUND )
|
||||
if( ret == PSA_ERROR_DOES_NOT_EXIST )
|
||||
return( 0 );
|
||||
return( 1 );
|
||||
}
|
||||
|
|
@ -108,23 +74,20 @@ psa_status_t psa_crypto_storage_store( const psa_key_id_t key,
|
|||
const uint8_t *data,
|
||||
size_t data_length )
|
||||
{
|
||||
psa_its_status_t ret;
|
||||
psa_status_t status;
|
||||
psa_its_uid_t data_identifier = psa_its_identifier_of_slot( key );
|
||||
struct psa_its_info_t data_identifier_info;
|
||||
psa_storage_uid_t data_identifier = psa_its_identifier_of_slot( key );
|
||||
struct psa_storage_info_t data_identifier_info;
|
||||
|
||||
if( psa_is_key_present_in_storage( key ) == 1 )
|
||||
return( PSA_ERROR_OCCUPIED_SLOT );
|
||||
return( PSA_ERROR_ALREADY_EXISTS );
|
||||
|
||||
ret = psa_its_set( data_identifier, data_length, data, 0 );
|
||||
status = its_to_psa_error( ret );
|
||||
status = psa_its_set( data_identifier, data_length, data, 0 );
|
||||
if( status != PSA_SUCCESS )
|
||||
{
|
||||
return( PSA_ERROR_STORAGE_FAILURE );
|
||||
}
|
||||
|
||||
ret = psa_its_get_info( data_identifier, &data_identifier_info );
|
||||
status = its_to_psa_error( ret );
|
||||
status = psa_its_get_info( data_identifier, &data_identifier_info );
|
||||
if( status != PSA_SUCCESS )
|
||||
{
|
||||
goto exit;
|
||||
|
|
@ -144,19 +107,19 @@ exit:
|
|||
|
||||
psa_status_t psa_destroy_persistent_key( const psa_key_id_t key )
|
||||
{
|
||||
psa_its_status_t ret;
|
||||
psa_its_uid_t data_identifier = psa_its_identifier_of_slot( key );
|
||||
struct psa_its_info_t data_identifier_info;
|
||||
psa_status_t ret;
|
||||
psa_storage_uid_t data_identifier = psa_its_identifier_of_slot( key );
|
||||
struct psa_storage_info_t data_identifier_info;
|
||||
|
||||
ret = psa_its_get_info( data_identifier, &data_identifier_info );
|
||||
if( ret == PSA_ITS_ERROR_UID_NOT_FOUND )
|
||||
if( ret == PSA_ERROR_DOES_NOT_EXIST )
|
||||
return( PSA_SUCCESS );
|
||||
|
||||
if( psa_its_remove( data_identifier ) != PSA_ITS_SUCCESS )
|
||||
if( psa_its_remove( data_identifier ) != PSA_SUCCESS )
|
||||
return( PSA_ERROR_STORAGE_FAILURE );
|
||||
|
||||
ret = psa_its_get_info( data_identifier, &data_identifier_info );
|
||||
if( ret != PSA_ITS_ERROR_UID_NOT_FOUND )
|
||||
if( ret != PSA_ERROR_DOES_NOT_EXIST )
|
||||
return( PSA_ERROR_STORAGE_FAILURE );
|
||||
|
||||
return( PSA_SUCCESS );
|
||||
|
|
@ -165,13 +128,11 @@ psa_status_t psa_destroy_persistent_key( const psa_key_id_t key )
|
|||
psa_status_t psa_crypto_storage_get_data_length( const psa_key_id_t key,
|
||||
size_t *data_length )
|
||||
{
|
||||
psa_its_status_t ret;
|
||||
psa_status_t status;
|
||||
psa_its_uid_t data_identifier = psa_its_identifier_of_slot( key );
|
||||
struct psa_its_info_t data_identifier_info;
|
||||
psa_storage_uid_t data_identifier = psa_its_identifier_of_slot( key );
|
||||
struct psa_storage_info_t data_identifier_info;
|
||||
|
||||
ret = psa_its_get_info( data_identifier, &data_identifier_info );
|
||||
status = its_to_psa_error( ret );
|
||||
status = psa_its_get_info( data_identifier, &data_identifier_info );
|
||||
if( status != PSA_SUCCESS )
|
||||
return( status );
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue