mirror of
				https://github.com/Mbed-TLS/mbedtls.git
				synced 2025-10-28 23:14:56 +03:00 
			
		
		
		
	Make sure MBEDTLS_PSA_CRYPTO_CLIENT is defined when MBEDTLS_PSA_CRYPTO_C is defined and guard PSA client code only with MBEDTLS_PSA_CRYPTO_CLIENT. The definition of MBEDTLS_PSA_CRYPTO_CLIENT is done in crypto_types.h before the definition of psa_key_attributes_t. That way as PSA crypto client code is related to key attributes we can be quite confident that MBEDTLS_PSA_CRYPTO_CLIENT will be defined when needed. Signed-off-by: Ronald Cron <ronald.cron@arm.com>
		
			
				
	
	
		
			84 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  *  PSA crypto client code
 | |
|  */
 | |
| /*
 | |
|  *  Copyright The Mbed TLS Contributors
 | |
|  *  SPDX-License-Identifier: Apache-2.0
 | |
|  *
 | |
|  *  Licensed under the Apache License, Version 2.0 (the "License"); you may
 | |
|  *  not use this file except in compliance with the License.
 | |
|  *  You may obtain a copy of the License at
 | |
|  *
 | |
|  *  http://www.apache.org/licenses/LICENSE-2.0
 | |
|  *
 | |
|  *  Unless required by applicable law or agreed to in writing, software
 | |
|  *  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | |
|  *  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | |
|  *  See the License for the specific language governing permissions and
 | |
|  *  limitations under the License.
 | |
|  */
 | |
| 
 | |
| #include "common.h"
 | |
| #include "psa_crypto_service_integration.h"
 | |
| #include "psa/crypto.h"
 | |
| 
 | |
| #if defined(MBEDTLS_PSA_CRYPTO_CLIENT)
 | |
| 
 | |
| #include <string.h>
 | |
| #include "mbedtls/platform.h"
 | |
| #if !defined(MBEDTLS_PLATFORM_C)
 | |
| #define mbedtls_calloc calloc
 | |
| #define mbedtls_free   free
 | |
| #endif
 | |
| 
 | |
| void psa_reset_key_attributes( psa_key_attributes_t *attributes )
 | |
| {
 | |
|     mbedtls_free( attributes->domain_parameters );
 | |
|     memset( attributes, 0, sizeof( *attributes ) );
 | |
| }
 | |
| 
 | |
| psa_status_t psa_set_key_domain_parameters( psa_key_attributes_t *attributes,
 | |
|                                             psa_key_type_t type,
 | |
|                                             const uint8_t *data,
 | |
|                                             size_t data_length )
 | |
| {
 | |
|     uint8_t *copy = NULL;
 | |
| 
 | |
|     if( data_length != 0 )
 | |
|     {
 | |
|         copy = mbedtls_calloc( 1, data_length );
 | |
|         if( copy == NULL )
 | |
|             return( PSA_ERROR_INSUFFICIENT_MEMORY );
 | |
|         memcpy( copy, data, data_length );
 | |
|     }
 | |
|     /* After this point, this function is guaranteed to succeed, so it
 | |
|      * can start modifying `*attributes`. */
 | |
| 
 | |
|     if( attributes->domain_parameters != NULL )
 | |
|     {
 | |
|         mbedtls_free( attributes->domain_parameters );
 | |
|         attributes->domain_parameters = NULL;
 | |
|         attributes->domain_parameters_size = 0;
 | |
|     }
 | |
| 
 | |
|     attributes->domain_parameters = copy;
 | |
|     attributes->domain_parameters_size = data_length;
 | |
|     attributes->core.type = type;
 | |
|     return( PSA_SUCCESS );
 | |
| }
 | |
| 
 | |
| psa_status_t psa_get_key_domain_parameters(
 | |
|     const psa_key_attributes_t *attributes,
 | |
|     uint8_t *data, size_t data_size, size_t *data_length )
 | |
| {
 | |
|     if( attributes->domain_parameters_size > data_size )
 | |
|         return( PSA_ERROR_BUFFER_TOO_SMALL );
 | |
|     *data_length = attributes->domain_parameters_size;
 | |
|     if( attributes->domain_parameters_size != 0 )
 | |
|         memcpy( data, attributes->domain_parameters,
 | |
|                 attributes->domain_parameters_size );
 | |
|     return( PSA_SUCCESS );
 | |
| }
 | |
| 
 | |
| #endif /* MBEDTLS_PSA_CRYPTO_CLIENT */
 |