mirror of
				https://github.com/Mbed-TLS/mbedtls.git
				synced 2025-10-28 23:14:56 +03:00 
			
		
		
		
	This commit moves mbedtls_test_hook_error_add from error.c to helpers.c. Signed-off-by: Harry Ramsey <harry.ramsey@arm.com>
		
			
				
	
	
		
			156 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			156 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| /*
 | |
|  *  Error message information
 | |
|  *
 | |
|  *  Copyright The Mbed TLS Contributors
 | |
|  *  SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
 | |
|  */
 | |
| 
 | |
| #include "common.h"
 | |
| 
 | |
| #include "mbedtls/error.h"
 | |
| 
 | |
| #if defined(MBEDTLS_ERROR_C) || defined(MBEDTLS_ERROR_STRERROR_DUMMY)
 | |
| 
 | |
| #if defined(MBEDTLS_ERROR_C)
 | |
| 
 | |
| #include "mbedtls/platform.h"
 | |
| 
 | |
| #include <stdio.h>
 | |
| #include <string.h>
 | |
| 
 | |
| HEADER_INCLUDED
 | |
| 
 | |
| const char *mbedtls_high_level_strerr(int error_code)
 | |
| {
 | |
|     int high_level_error_code;
 | |
| 
 | |
|     if (error_code < 0) {
 | |
|         error_code = -error_code;
 | |
|     }
 | |
| 
 | |
|     /* Extract the high-level part from the error code. */
 | |
|     high_level_error_code = error_code & 0xFF80;
 | |
| 
 | |
|     switch (high_level_error_code) {
 | |
|     /* Begin Auto-Generated Code. */
 | |
|     HIGH_LEVEL_CODE_CHECKS
 | |
|         /* End Auto-Generated Code. */
 | |
| 
 | |
|         default:
 | |
|             break;
 | |
|     }
 | |
| 
 | |
|     return NULL;
 | |
| }
 | |
| 
 | |
| const char *mbedtls_low_level_strerr(int error_code)
 | |
| {
 | |
|     int low_level_error_code;
 | |
| 
 | |
|     if (error_code < 0) {
 | |
|         error_code = -error_code;
 | |
|     }
 | |
| 
 | |
|     /* Extract the low-level part from the error code. */
 | |
|     low_level_error_code = error_code & ~0xFF80;
 | |
| 
 | |
|     switch (low_level_error_code) {
 | |
|     /* Begin Auto-Generated Code. */
 | |
|     LOW_LEVEL_CODE_CHECKS
 | |
|         /* End Auto-Generated Code. */
 | |
| 
 | |
|         default:
 | |
|             break;
 | |
|     }
 | |
| 
 | |
|     return NULL;
 | |
| }
 | |
| 
 | |
| void mbedtls_strerror(int ret, char *buf, size_t buflen)
 | |
| {
 | |
|     size_t len;
 | |
|     int use_ret;
 | |
|     const char *high_level_error_description = NULL;
 | |
|     const char *low_level_error_description = NULL;
 | |
| 
 | |
|     if (buflen == 0) {
 | |
|         return;
 | |
|     }
 | |
| 
 | |
|     memset(buf, 0x00, buflen);
 | |
| 
 | |
|     if (ret < 0) {
 | |
|         ret = -ret;
 | |
|     }
 | |
| 
 | |
|     if (ret & 0xFF80) {
 | |
|         use_ret = ret & 0xFF80;
 | |
| 
 | |
|         // Translate high level error code.
 | |
|         high_level_error_description = mbedtls_high_level_strerr(ret);
 | |
| 
 | |
|         if (high_level_error_description == NULL) {
 | |
|             mbedtls_snprintf(buf, buflen, "UNKNOWN ERROR CODE (%04X)", (unsigned int) use_ret);
 | |
|         } else {
 | |
|             mbedtls_snprintf(buf, buflen, "%s", high_level_error_description);
 | |
|         }
 | |
| 
 | |
| #if defined(MBEDTLS_SSL_TLS_C)
 | |
|         // Early return in case of a fatal error - do not try to translate low
 | |
|         // level code.
 | |
|         if (use_ret == -(MBEDTLS_ERR_SSL_FATAL_ALERT_MESSAGE)) {
 | |
|             return;
 | |
|         }
 | |
| #endif /* MBEDTLS_SSL_TLS_C */
 | |
|     }
 | |
| 
 | |
|     use_ret = ret & ~0xFF80;
 | |
| 
 | |
|     if (use_ret == 0) {
 | |
|         return;
 | |
|     }
 | |
| 
 | |
|     // If high level code is present, make a concatenation between both
 | |
|     // error strings.
 | |
|     //
 | |
|     len = strlen(buf);
 | |
| 
 | |
|     if (len > 0) {
 | |
|         if (buflen - len < 5) {
 | |
|             return;
 | |
|         }
 | |
| 
 | |
|         mbedtls_snprintf(buf + len, buflen - len, " : ");
 | |
| 
 | |
|         buf += len + 3;
 | |
|         buflen -= len + 3;
 | |
|     }
 | |
| 
 | |
|     // Translate low level error code.
 | |
|     low_level_error_description = mbedtls_low_level_strerr(ret);
 | |
| 
 | |
|     if (low_level_error_description == NULL) {
 | |
|         mbedtls_snprintf(buf, buflen, "UNKNOWN ERROR CODE (%04X)", (unsigned int) use_ret);
 | |
|     } else {
 | |
|         mbedtls_snprintf(buf, buflen, "%s", low_level_error_description);
 | |
|     }
 | |
| }
 | |
| 
 | |
| #else /* MBEDTLS_ERROR_C */
 | |
| 
 | |
| /*
 | |
|  * Provide a dummy implementation when MBEDTLS_ERROR_C is not defined
 | |
|  */
 | |
| void mbedtls_strerror(int ret, char *buf, size_t buflen)
 | |
| {
 | |
|     ((void) ret);
 | |
| 
 | |
|     if (buflen > 0) {
 | |
|         buf[0] = '\0';
 | |
|     }
 | |
| }
 | |
| 
 | |
| #endif /* MBEDTLS_ERROR_C */
 | |
| 
 | |
| #endif /* MBEDTLS_ERROR_C || MBEDTLS_ERROR_STRERROR_DUMMY */
 |