mirror of
				https://github.com/Mbed-TLS/mbedtls.git
				synced 2025-10-24 13:32:59 +03:00 
			
		
		
		
	This makes it easier to ensure that crypto_spe.h is included everywhere it needs to be, and that it's included early enough to do its job (it must be included before any mention of psa_xxx() functions with external linkage, because it defines macros to rename these functions). Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
		
			
				
	
	
		
			83 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			83 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.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 */
 |