mirror of
				https://github.com/cuberite/polarssl.git
				synced 2025-10-30 03:00:21 -04:00 
			
		
		
		
	Fix functions in MD layer to check return codes
This commit is contained in:
		
							parent
							
								
									5f872df26a
								
							
						
					
					
						commit
						0dd4fa0f45
					
				
							
								
								
									
										101
									
								
								library/md.c
									
									
									
									
									
								
							
							
						
						
									
										101
									
								
								library/md.c
									
									
									
									
									
								
							| @ -250,9 +250,7 @@ int mbedtls_md_starts( mbedtls_md_context_t *ctx ) | |||||||
|     if( ctx == NULL || ctx->md_info == NULL ) |     if( ctx == NULL || ctx->md_info == NULL ) | ||||||
|         return( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); |         return( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); | ||||||
| 
 | 
 | ||||||
|     ctx->md_info->starts_func( ctx->md_ctx ); |     return( ctx->md_info->starts_func( ctx->md_ctx ) ); | ||||||
| 
 |  | ||||||
|     return( 0 ); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int mbedtls_md_update( mbedtls_md_context_t *ctx, const unsigned char *input, size_t ilen ) | int mbedtls_md_update( mbedtls_md_context_t *ctx, const unsigned char *input, size_t ilen ) | ||||||
| @ -260,9 +258,7 @@ int mbedtls_md_update( mbedtls_md_context_t *ctx, const unsigned char *input, si | |||||||
|     if( ctx == NULL || ctx->md_info == NULL ) |     if( ctx == NULL || ctx->md_info == NULL ) | ||||||
|         return( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); |         return( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); | ||||||
| 
 | 
 | ||||||
|     ctx->md_info->update_func( ctx->md_ctx, input, ilen ); |     return( ctx->md_info->update_func( ctx->md_ctx, input, ilen ) ); | ||||||
| 
 |  | ||||||
|     return( 0 ); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int mbedtls_md_finish( mbedtls_md_context_t *ctx, unsigned char *output ) | int mbedtls_md_finish( mbedtls_md_context_t *ctx, unsigned char *output ) | ||||||
| @ -270,9 +266,7 @@ int mbedtls_md_finish( mbedtls_md_context_t *ctx, unsigned char *output ) | |||||||
|     if( ctx == NULL || ctx->md_info == NULL ) |     if( ctx == NULL || ctx->md_info == NULL ) | ||||||
|         return( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); |         return( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); | ||||||
| 
 | 
 | ||||||
|     ctx->md_info->finish_func( ctx->md_ctx, output ); |     return( ctx->md_info->finish_func( ctx->md_ctx, output ) ); | ||||||
| 
 |  | ||||||
|     return( 0 ); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int mbedtls_md( const mbedtls_md_info_t *md_info, const unsigned char *input, size_t ilen, | int mbedtls_md( const mbedtls_md_info_t *md_info, const unsigned char *input, size_t ilen, | ||||||
| @ -281,9 +275,7 @@ int mbedtls_md( const mbedtls_md_info_t *md_info, const unsigned char *input, si | |||||||
|     if( md_info == NULL ) |     if( md_info == NULL ) | ||||||
|         return( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); |         return( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); | ||||||
| 
 | 
 | ||||||
|     md_info->digest_func( input, ilen, output ); |     return( md_info->digest_func( input, ilen, output ) ); | ||||||
| 
 |  | ||||||
|     return( 0 ); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #if defined(MBEDTLS_FS_IO) | #if defined(MBEDTLS_FS_IO) | ||||||
| @ -306,10 +298,12 @@ int mbedtls_md_file( const mbedtls_md_info_t *md_info, const char *path, unsigne | |||||||
|     if( ( ret = mbedtls_md_setup( &ctx, md_info, 0 ) ) != 0 ) |     if( ( ret = mbedtls_md_setup( &ctx, md_info, 0 ) ) != 0 ) | ||||||
|         goto cleanup; |         goto cleanup; | ||||||
| 
 | 
 | ||||||
|     md_info->starts_func( ctx.md_ctx ); |     if( ( ret = md_info->starts_func( ctx.md_ctx ) ) != 0 ) | ||||||
|  |         goto cleanup; | ||||||
| 
 | 
 | ||||||
|     while( ( n = fread( buf, 1, sizeof( buf ), f ) ) > 0 ) |     while( ( n = fread( buf, 1, sizeof( buf ), f ) ) > 0 ) | ||||||
|         md_info->update_func( ctx.md_ctx, buf, n ); |         if( ( ret = md_info->update_func( ctx.md_ctx, buf, n ) ) != 0 ) | ||||||
|  |             goto cleanup; | ||||||
| 
 | 
 | ||||||
|     if( ferror( f ) != 0 ) |     if( ferror( f ) != 0 ) | ||||||
|     { |     { | ||||||
| @ -317,7 +311,7 @@ int mbedtls_md_file( const mbedtls_md_info_t *md_info, const char *path, unsigne | |||||||
|         goto cleanup; |         goto cleanup; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     md_info->finish_func( ctx.md_ctx, output ); |     ret = md_info->finish_func( ctx.md_ctx, output ); | ||||||
| 
 | 
 | ||||||
| cleanup: | cleanup: | ||||||
|     fclose( f ); |     fclose( f ); | ||||||
| @ -329,6 +323,7 @@ cleanup: | |||||||
| 
 | 
 | ||||||
| int mbedtls_md_hmac_starts( mbedtls_md_context_t *ctx, const unsigned char *key, size_t keylen ) | int mbedtls_md_hmac_starts( mbedtls_md_context_t *ctx, const unsigned char *key, size_t keylen ) | ||||||
| { | { | ||||||
|  |     int ret; | ||||||
|     unsigned char sum[MBEDTLS_MD_MAX_SIZE]; |     unsigned char sum[MBEDTLS_MD_MAX_SIZE]; | ||||||
|     unsigned char *ipad, *opad; |     unsigned char *ipad, *opad; | ||||||
|     size_t i; |     size_t i; | ||||||
| @ -338,9 +333,12 @@ int mbedtls_md_hmac_starts( mbedtls_md_context_t *ctx, const unsigned char *key, | |||||||
| 
 | 
 | ||||||
|     if( keylen > (size_t) ctx->md_info->block_size ) |     if( keylen > (size_t) ctx->md_info->block_size ) | ||||||
|     { |     { | ||||||
|         ctx->md_info->starts_func( ctx->md_ctx ); |         if( ( ret = ctx->md_info->starts_func( ctx->md_ctx ) ) != 0 ) | ||||||
|         ctx->md_info->update_func( ctx->md_ctx, key, keylen ); |             goto cleanup; | ||||||
|         ctx->md_info->finish_func( ctx->md_ctx, sum ); |         if( ( ret = ctx->md_info->update_func( ctx->md_ctx, key, keylen ) ) != 0 ) | ||||||
|  |             goto cleanup; | ||||||
|  |         if( ( ret = ctx->md_info->finish_func( ctx->md_ctx, sum ) ) != 0 ) | ||||||
|  |             goto cleanup; | ||||||
| 
 | 
 | ||||||
|         keylen = ctx->md_info->size; |         keylen = ctx->md_info->size; | ||||||
|         key = sum; |         key = sum; | ||||||
| @ -358,12 +356,15 @@ int mbedtls_md_hmac_starts( mbedtls_md_context_t *ctx, const unsigned char *key, | |||||||
|         opad[i] = (unsigned char)( opad[i] ^ key[i] ); |         opad[i] = (unsigned char)( opad[i] ^ key[i] ); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     if( ( ret = ctx->md_info->starts_func( ctx->md_ctx ) ) != 0 ) | ||||||
|  |         goto cleanup; | ||||||
|  |     ret = ctx->md_info->update_func( ctx->md_ctx, ipad, | ||||||
|  |                                      ctx->md_info->block_size ); | ||||||
|  | 
 | ||||||
|  | cleanup: | ||||||
|     mbedtls_zeroize( sum, sizeof( sum ) ); |     mbedtls_zeroize( sum, sizeof( sum ) ); | ||||||
| 
 | 
 | ||||||
|     ctx->md_info->starts_func( ctx->md_ctx ); |     return( ret ); | ||||||
|     ctx->md_info->update_func( ctx->md_ctx, ipad, ctx->md_info->block_size ); |  | ||||||
| 
 |  | ||||||
|     return( 0 ); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int mbedtls_md_hmac_update( mbedtls_md_context_t *ctx, const unsigned char *input, size_t ilen ) | int mbedtls_md_hmac_update( mbedtls_md_context_t *ctx, const unsigned char *input, size_t ilen ) | ||||||
| @ -371,13 +372,12 @@ int mbedtls_md_hmac_update( mbedtls_md_context_t *ctx, const unsigned char *inpu | |||||||
|     if( ctx == NULL || ctx->md_info == NULL || ctx->hmac_ctx == NULL ) |     if( ctx == NULL || ctx->md_info == NULL || ctx->hmac_ctx == NULL ) | ||||||
|         return( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); |         return( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); | ||||||
| 
 | 
 | ||||||
|     ctx->md_info->update_func( ctx->md_ctx, input, ilen ); |     return( ctx->md_info->update_func( ctx->md_ctx, input, ilen ) ); | ||||||
| 
 |  | ||||||
|     return( 0 ); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int mbedtls_md_hmac_finish( mbedtls_md_context_t *ctx, unsigned char *output ) | int mbedtls_md_hmac_finish( mbedtls_md_context_t *ctx, unsigned char *output ) | ||||||
| { | { | ||||||
|  |     int ret; | ||||||
|     unsigned char tmp[MBEDTLS_MD_MAX_SIZE]; |     unsigned char tmp[MBEDTLS_MD_MAX_SIZE]; | ||||||
|     unsigned char *opad; |     unsigned char *opad; | ||||||
| 
 | 
 | ||||||
| @ -386,17 +386,22 @@ int mbedtls_md_hmac_finish( mbedtls_md_context_t *ctx, unsigned char *output ) | |||||||
| 
 | 
 | ||||||
|     opad = (unsigned char *) ctx->hmac_ctx + ctx->md_info->block_size; |     opad = (unsigned char *) ctx->hmac_ctx + ctx->md_info->block_size; | ||||||
| 
 | 
 | ||||||
|     ctx->md_info->finish_func( ctx->md_ctx, tmp ); |     if( ( ret = ctx->md_info->finish_func( ctx->md_ctx, tmp ) ) != 0 ) | ||||||
|     ctx->md_info->starts_func( ctx->md_ctx ); |         return( ret ); | ||||||
|     ctx->md_info->update_func( ctx->md_ctx, opad, ctx->md_info->block_size ); |     if( ( ret = ctx->md_info->starts_func( ctx->md_ctx ) ) != 0 ) | ||||||
|     ctx->md_info->update_func( ctx->md_ctx, tmp, ctx->md_info->size ); |         return( ret ); | ||||||
|     ctx->md_info->finish_func( ctx->md_ctx, output ); |     if( ( ret = ctx->md_info->update_func( ctx->md_ctx, opad, | ||||||
| 
 |                                            ctx->md_info->block_size ) ) != 0 ) | ||||||
|     return( 0 ); |         return( ret ); | ||||||
|  |     if( ( ret = ctx->md_info->update_func( ctx->md_ctx, tmp, | ||||||
|  |                                            ctx->md_info->size ) ) != 0 ) | ||||||
|  |         return( ret ); | ||||||
|  |     return( ctx->md_info->finish_func( ctx->md_ctx, output ) ); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int mbedtls_md_hmac_reset( mbedtls_md_context_t *ctx ) | int mbedtls_md_hmac_reset( mbedtls_md_context_t *ctx ) | ||||||
| { | { | ||||||
|  |     int ret; | ||||||
|     unsigned char *ipad; |     unsigned char *ipad; | ||||||
| 
 | 
 | ||||||
|     if( ctx == NULL || ctx->md_info == NULL || ctx->hmac_ctx == NULL ) |     if( ctx == NULL || ctx->md_info == NULL || ctx->hmac_ctx == NULL ) | ||||||
| @ -404,15 +409,16 @@ int mbedtls_md_hmac_reset( mbedtls_md_context_t *ctx ) | |||||||
| 
 | 
 | ||||||
|     ipad = (unsigned char *) ctx->hmac_ctx; |     ipad = (unsigned char *) ctx->hmac_ctx; | ||||||
| 
 | 
 | ||||||
|     ctx->md_info->starts_func( ctx->md_ctx ); |     if( ( ret = ctx->md_info->starts_func( ctx->md_ctx ) ) != 0 ) | ||||||
|     ctx->md_info->update_func( ctx->md_ctx, ipad, ctx->md_info->block_size ); |         return( ret ); | ||||||
| 
 |     return( ctx->md_info->update_func( ctx->md_ctx, ipad, | ||||||
|     return( 0 ); |                                        ctx->md_info->block_size ) ); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int mbedtls_md_hmac( const mbedtls_md_info_t *md_info, const unsigned char *key, size_t keylen, | int mbedtls_md_hmac( const mbedtls_md_info_t *md_info, | ||||||
|                 const unsigned char *input, size_t ilen, |                      const unsigned char *key, size_t keylen, | ||||||
|                 unsigned char *output ) |                      const unsigned char *input, size_t ilen, | ||||||
|  |                      unsigned char *output ) | ||||||
| { | { | ||||||
|     mbedtls_md_context_t ctx; |     mbedtls_md_context_t ctx; | ||||||
|     int ret; |     int ret; | ||||||
| @ -423,15 +429,18 @@ int mbedtls_md_hmac( const mbedtls_md_info_t *md_info, const unsigned char *key, | |||||||
|     mbedtls_md_init( &ctx ); |     mbedtls_md_init( &ctx ); | ||||||
| 
 | 
 | ||||||
|     if( ( ret = mbedtls_md_setup( &ctx, md_info, 1 ) ) != 0 ) |     if( ( ret = mbedtls_md_setup( &ctx, md_info, 1 ) ) != 0 ) | ||||||
|         return( ret ); |         goto cleanup; | ||||||
| 
 | 
 | ||||||
|     mbedtls_md_hmac_starts( &ctx, key, keylen ); |     if( ( ret = mbedtls_md_hmac_starts( &ctx, key, keylen ) ) != 0 ) | ||||||
|     mbedtls_md_hmac_update( &ctx, input, ilen ); |         goto cleanup; | ||||||
|     mbedtls_md_hmac_finish( &ctx, output ); |     if( ( ret = mbedtls_md_hmac_update( &ctx, input, ilen ) ) != 0 ) | ||||||
|  |         goto cleanup; | ||||||
|  |     ret = mbedtls_md_hmac_finish( &ctx, output ); | ||||||
| 
 | 
 | ||||||
|  | cleanup: | ||||||
|     mbedtls_md_free( &ctx ); |     mbedtls_md_free( &ctx ); | ||||||
| 
 | 
 | ||||||
|     return( 0 ); |     return( ret ); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int mbedtls_md_process( mbedtls_md_context_t *ctx, const unsigned char *data ) | int mbedtls_md_process( mbedtls_md_context_t *ctx, const unsigned char *data ) | ||||||
| @ -439,9 +448,7 @@ int mbedtls_md_process( mbedtls_md_context_t *ctx, const unsigned char *data ) | |||||||
|     if( ctx == NULL || ctx->md_info == NULL ) |     if( ctx == NULL || ctx->md_info == NULL ) | ||||||
|         return( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); |         return( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); | ||||||
| 
 | 
 | ||||||
|     ctx->md_info->process_func( ctx->md_ctx, data ); |     return( ctx->md_info->process_func( ctx->md_ctx, data ) ); | ||||||
| 
 |  | ||||||
|     return( 0 ); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| unsigned char mbedtls_md_get_size( const mbedtls_md_info_t *md_info ) | unsigned char mbedtls_md_get_size( const mbedtls_md_info_t *md_info ) | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Andres Amaya Garcia
						Andres Amaya Garcia