mirror of https://github.com/ARMmbed/mbed-os.git
				
				
				
			Big commit after code review from andesag01
cleanup in include files (unrequired removed + other moved to aes_alt.h) hcryp_aes moved to mbedtls_aes_context to allow multi instances remove ctx->nr, ctx->buf doxygen comments are removed (kept in .h file) function _ALT are removed (full module _ALT) handle error returned by HAL_CRYPxx functions aes is symetric, remove the dupplicated set_key_enc and set_key_dec buffer, and factorize the call to set_key functionpull/3691/head
							parent
							
								
									fe1e7aac98
								
							
						
					
					
						commit
						d73088a90e
					
				| 
						 | 
				
			
			@ -17,34 +17,63 @@
 | 
			
		|||
 *  limitations under the License.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "mbedtls/aes.h"
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_AES_ALT)
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include "cmsis.h"
 | 
			
		||||
#include "string.h"
 | 
			
		||||
#include "aes.h"
 | 
			
		||||
CRYP_HandleTypeDef hcryp_aes;
 | 
			
		||||
static int aes_set_key( mbedtls_aes_context *ctx, const unsigned char *key, unsigned int keybits )
 | 
			
		||||
{
 | 
			
		||||
    switch( keybits )
 | 
			
		||||
    {
 | 
			
		||||
        case 128:
 | 
			
		||||
          ctx->hcryp_aes.Init.KeySize = CRYP_KEYSIZE_128B;
 | 
			
		||||
          memcpy(ctx->aes_key, key, 16);
 | 
			
		||||
          break;
 | 
			
		||||
        case 192:
 | 
			
		||||
          ctx->hcryp_aes.Init.KeySize = CRYP_KEYSIZE_192B;
 | 
			
		||||
          memcpy(ctx->aes_key, key, 24);
 | 
			
		||||
          break;
 | 
			
		||||
        case 256:
 | 
			
		||||
          ctx->hcryp_aes.Init.KeySize = CRYP_KEYSIZE_256B;
 | 
			
		||||
          memcpy(ctx->aes_key, key, 32);
 | 
			
		||||
          break;
 | 
			
		||||
       default : return( MBEDTLS_ERR_AES_INVALID_KEY_LENGTH );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* Deinitializes the CRYP peripheral */
 | 
			
		||||
    if (HAL_CRYP_DeInit(&ctx->hcryp_aes) == HAL_ERROR)
 | 
			
		||||
        return (HAL_ERROR);
 | 
			
		||||
 | 
			
		||||
    ctx->hcryp_aes.Init.DataType = CRYP_DATATYPE_8B;
 | 
			
		||||
    ctx->hcryp_aes.Instance = CRYP;
 | 
			
		||||
    /* Enable CRYP clock */
 | 
			
		||||
    __HAL_RCC_CRYP_CLK_ENABLE();
 | 
			
		||||
 | 
			
		||||
    ctx->hcryp_aes.Init.pKey = ctx->aes_key;
 | 
			
		||||
    if (HAL_CRYP_Init(&ctx->hcryp_aes) == HAL_ERROR)
 | 
			
		||||
        return (HAL_ERROR);
 | 
			
		||||
 | 
			
		||||
    /* allow multi-instance of CRYP use: save context for CRYP HW module CR */
 | 
			
		||||
    ctx->ctx_save_cr = ctx->hcryp_aes.Instance->CR;
 | 
			
		||||
    return(0);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Implementation that should never be optimized out by the compiler */
 | 
			
		||||
static void mbedtls_zeroize( void *v, size_t n ) {
 | 
			
		||||
    volatile unsigned char *p = (unsigned char*)v; while( n-- ) *p++ = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * \brief          Initialize AES context
 | 
			
		||||
 *
 | 
			
		||||
 * \param ctx      AES context to be initialized
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
void mbedtls_aes_init( mbedtls_aes_context *ctx )
 | 
			
		||||
{
 | 
			
		||||
    memset( ctx, 0, sizeof( mbedtls_aes_context ) );
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * \brief          Clear AES context
 | 
			
		||||
 *
 | 
			
		||||
 * \param ctx      AES context to be cleared
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
void mbedtls_aes_free( mbedtls_aes_context *ctx )
 | 
			
		||||
{
 | 
			
		||||
    if( ctx == NULL )
 | 
			
		||||
| 
						 | 
				
			
			@ -56,163 +85,55 @@ void mbedtls_aes_free( mbedtls_aes_context *ctx )
 | 
			
		|||
    __HAL_RCC_CRYP_RELEASE_RESET();
 | 
			
		||||
 | 
			
		||||
    mbedtls_zeroize( ctx, sizeof( mbedtls_aes_context ) );
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * \brief          AES key schedule (encryption)
 | 
			
		||||
 *
 | 
			
		||||
 * \param ctx      AES context to be initialized
 | 
			
		||||
 * \param key      encryption key
 | 
			
		||||
 * \param keybits  must be 128, 192 or 256
 | 
			
		||||
 *
 | 
			
		||||
 * \return         0 if successful, or MBEDTLS_ERR_AES_INVALID_KEY_LENGTH
 | 
			
		||||
 */
 | 
			
		||||
#if defined(MBEDTLS_AES_SETKEY_ENC_ALT)
 | 
			
		||||
 | 
			
		||||
int mbedtls_aes_setkey_enc( mbedtls_aes_context *ctx, const unsigned char *key,
 | 
			
		||||
                            unsigned int keybits )
 | 
			
		||||
{
 | 
			
		||||
    switch( keybits )
 | 
			
		||||
    {
 | 
			
		||||
        case 128:
 | 
			
		||||
          ctx->nr = 10;
 | 
			
		||||
          memcpy(ctx->aes_enc_key, key, 16);
 | 
			
		||||
          hcryp_aes.Init.KeySize = CRYP_KEYSIZE_128B;
 | 
			
		||||
          break;
 | 
			
		||||
        case 192:
 | 
			
		||||
          ctx->nr = 12;
 | 
			
		||||
          memcpy(ctx->aes_enc_key, key, 24);
 | 
			
		||||
          hcryp_aes.Init.KeySize = CRYP_KEYSIZE_192B;
 | 
			
		||||
          break;
 | 
			
		||||
        case 256:
 | 
			
		||||
          ctx->nr = 14;
 | 
			
		||||
          memcpy(ctx->aes_enc_key, key, 32);
 | 
			
		||||
          hcryp_aes.Init.KeySize = CRYP_KEYSIZE_256B;
 | 
			
		||||
          break;
 | 
			
		||||
       default : return( MBEDTLS_ERR_AES_INVALID_KEY_LENGTH );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* Deinitializes the CRYP peripheral */
 | 
			
		||||
    HAL_CRYP_DeInit(&hcryp_aes);
 | 
			
		||||
 | 
			
		||||
    hcryp_aes.Init.DataType = CRYP_DATATYPE_8B;
 | 
			
		||||
 | 
			
		||||
    hcryp_aes.Instance = CRYP;
 | 
			
		||||
    /* Enable CRYP clock */
 | 
			
		||||
    __HAL_RCC_CRYP_CLK_ENABLE();
 | 
			
		||||
 | 
			
		||||
    hcryp_aes.Init.pKey = ctx->aes_enc_key;
 | 
			
		||||
    HAL_CRYP_Init(&hcryp_aes);
 | 
			
		||||
    
 | 
			
		||||
    return(0);
 | 
			
		||||
    int ret_val = 0;
 | 
			
		||||
    ret_val = aes_set_key(ctx, key, keybits);
 | 
			
		||||
    return(ret_val);
 | 
			
		||||
}
 | 
			
		||||
#endif /* MBEDTLS_AES_SETKEY_END_ALT */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * \brief          AES key schedule (decryption)
 | 
			
		||||
 *
 | 
			
		||||
 * \param ctx      AES context to be initialized
 | 
			
		||||
 * \param key      decryption key
 | 
			
		||||
 * \param keybits  must be 128, 192 or 256
 | 
			
		||||
 *
 | 
			
		||||
 * \return         0 if successful, or MBEDTLS_ERR_AES_INVALID_KEY_LENGTH
 | 
			
		||||
 */
 | 
			
		||||
#if defined(MBEDTLS_AES_SETKEY_DEC_ALT)
 | 
			
		||||
int mbedtls_aes_setkey_dec( mbedtls_aes_context *ctx, const unsigned char *key,
 | 
			
		||||
                            unsigned int keybits )
 | 
			
		||||
{
 | 
			
		||||
    switch( keybits )
 | 
			
		||||
    {
 | 
			
		||||
      case 128:
 | 
			
		||||
        ctx->nr = 10;
 | 
			
		||||
        memcpy(ctx->aes_dec_key, key, 16);
 | 
			
		||||
        hcryp_aes.Init.KeySize = CRYP_KEYSIZE_128B;
 | 
			
		||||
        break;
 | 
			
		||||
      case 192:
 | 
			
		||||
        ctx->nr = 12;
 | 
			
		||||
        memcpy(ctx->aes_dec_key, key, 24);
 | 
			
		||||
        hcryp_aes.Init.KeySize = CRYP_KEYSIZE_192B;
 | 
			
		||||
        break;
 | 
			
		||||
      case 256:
 | 
			
		||||
        ctx->nr = 14;
 | 
			
		||||
        memcpy(ctx->aes_dec_key, key, 32);
 | 
			
		||||
        hcryp_aes.Init.KeySize = CRYP_KEYSIZE_256B;
 | 
			
		||||
        break;
 | 
			
		||||
      default : return( MBEDTLS_ERR_AES_INVALID_KEY_LENGTH );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* Deinitializes the CRYP peripheral */
 | 
			
		||||
    HAL_CRYP_DeInit(&hcryp_aes);
 | 
			
		||||
    /* Enable CRYP clock */
 | 
			
		||||
    hcryp_aes.Init.DataType = CRYP_DATATYPE_8B;
 | 
			
		||||
 | 
			
		||||
    hcryp_aes.Instance = CRYP;
 | 
			
		||||
    /* Enable CRYP clock */
 | 
			
		||||
    __HAL_RCC_CRYP_CLK_ENABLE();
 | 
			
		||||
 | 
			
		||||
    hcryp_aes.Init.pKey = ctx->aes_dec_key;
 | 
			
		||||
    
 | 
			
		||||
    HAL_CRYP_Init(&hcryp_aes);
 | 
			
		||||
    
 | 
			
		||||
    return( 0 );
 | 
			
		||||
    int ret_val = 0;
 | 
			
		||||
    ret_val = aes_set_key(ctx, key, keybits);
 | 
			
		||||
    return( ret_val );
 | 
			
		||||
}
 | 
			
		||||
#endif /* MBEDTLS_AES_SETKEY_DEC_ALT */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * \brief          AES-ECB block encryption/decryption
 | 
			
		||||
 *
 | 
			
		||||
 * \param ctx      AES context
 | 
			
		||||
 * \param mode     MBEDTLS_AES_ENCRYPT or MBEDTLS_AES_DECRYPT
 | 
			
		||||
 * \param input    16-byte input block
 | 
			
		||||
 * \param output   16-byte output block
 | 
			
		||||
 *
 | 
			
		||||
 * \return         0 if successful
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
int mbedtls_aes_crypt_ecb( mbedtls_aes_context *ctx,
 | 
			
		||||
                    int mode,
 | 
			
		||||
                    const unsigned char input[16],
 | 
			
		||||
                    unsigned char output[16] )
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    if ((ctx->nr != 10) && (ctx->nr != 12) && (ctx->nr != 14))
 | 
			
		||||
        return(MBEDTLS_ERR_AES_INVALID_KEY_LENGTH);
 | 
			
		||||
    /* allow multi-instance of CRYP use: restore context for CRYP hw module */
 | 
			
		||||
    ctx->hcryp_aes.Instance->CR = ctx->ctx_save_cr;
 | 
			
		||||
 | 
			
		||||
    /*------------------ AES Decryption ------------------*/
 | 
			
		||||
    if(mode == MBEDTLS_AES_DECRYPT) /* AES decryption */
 | 
			
		||||
    {
 | 
			
		||||
        ctx->hcryp_aes.Init.DataType = CRYP_DATATYPE_8B;
 | 
			
		||||
        ctx->hcryp_aes.Init.pKey = ctx->aes_key;
 | 
			
		||||
        mbedtls_aes_decrypt( ctx, input, output );
 | 
			
		||||
    }
 | 
			
		||||
    /*------------------ AES Encryption ------------------*/
 | 
			
		||||
    else /* AES encryption */
 | 
			
		||||
    {
 | 
			
		||||
        ctx->hcryp_aes.Init.DataType = CRYP_DATATYPE_8B;
 | 
			
		||||
        ctx->hcryp_aes.Init.pKey = ctx->aes_key;
 | 
			
		||||
        mbedtls_aes_encrypt( ctx, input, output );
 | 
			
		||||
    }
 | 
			
		||||
    /* allow multi-instance of CRYP use: save context for CRYP HW module CR */
 | 
			
		||||
    ctx->ctx_save_cr = ctx->hcryp_aes.Instance->CR;
 | 
			
		||||
 | 
			
		||||
    return( 0 );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_CIPHER_MODE_CBC)
 | 
			
		||||
/**
 | 
			
		||||
 * \brief          AES-CBC buffer encryption/decryption
 | 
			
		||||
 *                 Length should be a multiple of the block
 | 
			
		||||
 *                 size (16 bytes)
 | 
			
		||||
 *
 | 
			
		||||
 * \note           Upon exit, the content of the IV is updated so that you can
 | 
			
		||||
 *                 call the function same function again on the following
 | 
			
		||||
 *                 block(s) of data and get the same result as if it was
 | 
			
		||||
 *                 encrypted in one call. This allows a "streaming" usage.
 | 
			
		||||
 *                 If on the other hand you need to retain the contents of the
 | 
			
		||||
 *                 IV, you should either save it manually or use the cipher
 | 
			
		||||
 *                 module instead.
 | 
			
		||||
 *
 | 
			
		||||
 * \param ctx      AES context
 | 
			
		||||
 * \param mode     MBEDTLS_AES_ENCRYPT or MBEDTLS_AES_DECRYPT
 | 
			
		||||
 * \param length   length of the input data
 | 
			
		||||
 * \param iv       initialization vector (updated after use)
 | 
			
		||||
 * \param input    buffer holding the input data
 | 
			
		||||
 * \param output   buffer holding the output data
 | 
			
		||||
 *
 | 
			
		||||
 * \return         0 if successful, or MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
int mbedtls_aes_crypt_cbc( mbedtls_aes_context *ctx,
 | 
			
		||||
                    int mode,
 | 
			
		||||
                    size_t length,
 | 
			
		||||
| 
						 | 
				
			
			@ -224,56 +145,23 @@ int mbedtls_aes_crypt_cbc( mbedtls_aes_context *ctx,
 | 
			
		|||
    if( length % 16 )
 | 
			
		||||
        return( MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH );
 | 
			
		||||
 | 
			
		||||
    switch( ctx->nr )
 | 
			
		||||
    {
 | 
			
		||||
        case 10: hcryp_aes.Init.KeySize = CRYP_KEYSIZE_128B; break;
 | 
			
		||||
        case 12: hcryp_aes.Init.KeySize = CRYP_KEYSIZE_192B; break;
 | 
			
		||||
        case 14: hcryp_aes.Init.KeySize = CRYP_KEYSIZE_256B; break;
 | 
			
		||||
        default : return MBEDTLS_ERR_AES_INVALID_KEY_LENGTH;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    if( mode == MBEDTLS_AES_DECRYPT )
 | 
			
		||||
    {
 | 
			
		||||
        hcryp_aes.Init.pInitVect = &iv[0]; // used in process, not in the init 
 | 
			
		||||
        ctx->hcryp_aes.Init.pInitVect = &iv[0]; // used in process, not in the init 
 | 
			
		||||
 | 
			
		||||
        status = HAL_CRYP_AESCBC_Decrypt(&hcryp_aes, (uint8_t *)input, length, (uint8_t *)output, 10);
 | 
			
		||||
        status = HAL_CRYP_AESCBC_Decrypt(&ctx->hcryp_aes, (uint8_t *)input, length, (uint8_t *)output, 10);
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        hcryp_aes.Init.pInitVect = &iv[0]; // used in process, not in the init 
 | 
			
		||||
        ctx->hcryp_aes.Init.pInitVect = &iv[0]; // used in process, not in the init 
 | 
			
		||||
        
 | 
			
		||||
        status = HAL_CRYP_AESCBC_Encrypt(&hcryp_aes, (uint8_t *)input, length, (uint8_t *)output, 10);
 | 
			
		||||
        status = HAL_CRYP_AESCBC_Encrypt(&ctx->hcryp_aes, (uint8_t *)input, length, (uint8_t *)output, 10);
 | 
			
		||||
    }
 | 
			
		||||
    return( status );
 | 
			
		||||
}
 | 
			
		||||
#endif /* MBEDTLS_CIPHER_MODE_CBC */
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_CIPHER_MODE_CFB)
 | 
			
		||||
/**
 | 
			
		||||
 * \brief          AES-CFB128 buffer encryption/decryption.
 | 
			
		||||
 *
 | 
			
		||||
 * Note: Due to the nature of CFB you should use the same key schedule for
 | 
			
		||||
 * both encryption and decryption. So a context initialized with
 | 
			
		||||
 * mbedtls_aes_setkey_enc() for both MBEDTLS_AES_ENCRYPT and MBEDTLS_AES_DECRYPT.
 | 
			
		||||
 *
 | 
			
		||||
 * \note           Upon exit, the content of the IV is updated so that you can
 | 
			
		||||
 *                 call the function same function again on the following
 | 
			
		||||
 *                 block(s) of data and get the same result as if it was
 | 
			
		||||
 *                 encrypted in one call. This allows a "streaming" usage.
 | 
			
		||||
 *                 If on the other hand you need to retain the contents of the
 | 
			
		||||
 *                 IV, you should either save it manually or use the cipher
 | 
			
		||||
 *                 module instead.
 | 
			
		||||
 *
 | 
			
		||||
 * \param ctx      AES context
 | 
			
		||||
 * \param mode     MBEDTLS_AES_ENCRYPT or MBEDTLS_AES_DECRYPT
 | 
			
		||||
 * \param length   length of the input data
 | 
			
		||||
 * \param iv_off   offset in IV (updated after use)
 | 
			
		||||
 * \param iv       initialization vector (updated after use)
 | 
			
		||||
 * \param input    buffer holding the input data
 | 
			
		||||
 * \param output   buffer holding the output data
 | 
			
		||||
 *
 | 
			
		||||
 * \return         0 if successful
 | 
			
		||||
 */
 | 
			
		||||
int mbedtls_aes_crypt_cfb128( mbedtls_aes_context *ctx,
 | 
			
		||||
                       int mode,
 | 
			
		||||
                       size_t length,
 | 
			
		||||
| 
						 | 
				
			
			@ -318,30 +206,6 @@ int mbedtls_aes_crypt_cfb128( mbedtls_aes_context *ctx,
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * \brief          AES-CFB8 buffer encryption/decryption.
 | 
			
		||||
 *
 | 
			
		||||
 * Note: Due to the nature of CFB you should use the same key schedule for
 | 
			
		||||
 * both encryption and decryption. So a context initialized with
 | 
			
		||||
 * mbedtls_aes_setkey_enc() for both MBEDTLS_AES_ENCRYPT and MBEDTLS_AES_DECRYPT.
 | 
			
		||||
 *
 | 
			
		||||
 * \note           Upon exit, the content of the IV is updated so that you can
 | 
			
		||||
 *                 call the function same function again on the following
 | 
			
		||||
 *                 block(s) of data and get the same result as if it was
 | 
			
		||||
 *                 encrypted in one call. This allows a "streaming" usage.
 | 
			
		||||
 *                 If on the other hand you need to retain the contents of the
 | 
			
		||||
 *                 IV, you should either save it manually or use the cipher
 | 
			
		||||
 *                 module instead.
 | 
			
		||||
 *
 | 
			
		||||
 * \param ctx      AES context
 | 
			
		||||
 * \param mode     MBEDTLS_AES_ENCRYPT or MBEDTLS_AES_DECRYPT
 | 
			
		||||
 * \param length   length of the input data
 | 
			
		||||
 * \param iv       initialization vector (updated after use)
 | 
			
		||||
 * \param input    buffer holding the input data
 | 
			
		||||
 * \param output   buffer holding the output data
 | 
			
		||||
 *
 | 
			
		||||
 * \return         0 if successful
 | 
			
		||||
 */
 | 
			
		||||
int mbedtls_aes_crypt_cfb8( mbedtls_aes_context *ctx,
 | 
			
		||||
                    int mode,
 | 
			
		||||
                    size_t length,
 | 
			
		||||
| 
						 | 
				
			
			@ -374,28 +238,6 @@ int mbedtls_aes_crypt_cfb8( mbedtls_aes_context *ctx,
 | 
			
		|||
#endif /*MBEDTLS_CIPHER_MODE_CFB */
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_CIPHER_MODE_CTR)
 | 
			
		||||
/**
 | 
			
		||||
 * \brief               AES-CTR buffer encryption/decryption
 | 
			
		||||
 *
 | 
			
		||||
 * Warning: You have to keep the maximum use of your counter in mind!
 | 
			
		||||
 *
 | 
			
		||||
 * Note: Due to the nature of CTR you should use the same key schedule for
 | 
			
		||||
 * both encryption and decryption. So a context initialized with
 | 
			
		||||
 * mbedtls_aes_setkey_enc() for both MBEDTLS_AES_ENCRYPT and MBEDTLS_AES_DECRYPT.
 | 
			
		||||
 *
 | 
			
		||||
 * \param ctx           AES context
 | 
			
		||||
 * \param length        The length of the data
 | 
			
		||||
 * \param nc_off        The offset in the current stream_block (for resuming
 | 
			
		||||
 *                      within current cipher stream). The offset pointer to
 | 
			
		||||
 *                      should be 0 at the start of a stream.
 | 
			
		||||
 * \param nonce_counter The 128-bit nonce and counter.
 | 
			
		||||
 * \param stream_block  The saved stream-block for resuming. Is overwritten
 | 
			
		||||
 *                      by the function.
 | 
			
		||||
 * \param input         The input data stream
 | 
			
		||||
 * \param output        The output data stream
 | 
			
		||||
 *
 | 
			
		||||
 * \return         0 if successful
 | 
			
		||||
 */
 | 
			
		||||
int mbedtls_aes_crypt_ctr( mbedtls_aes_context *ctx,
 | 
			
		||||
                       size_t length,
 | 
			
		||||
                       size_t *nc_off,
 | 
			
		||||
| 
						 | 
				
			
			@ -428,40 +270,23 @@ int mbedtls_aes_crypt_ctr( mbedtls_aes_context *ctx,
 | 
			
		|||
}
 | 
			
		||||
#endif /* MBEDTLS_CIPHER_MODE_CTR */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * \brief           Internal AES block encryption function
 | 
			
		||||
 *                  (Only exposed to allow overriding it,
 | 
			
		||||
 *                  see MBEDTLS_AES_ENCRYPT_ALT)
 | 
			
		||||
 *
 | 
			
		||||
 * \param ctx       AES context
 | 
			
		||||
 * \param input     Plaintext block
 | 
			
		||||
 * \param output    Output (ciphertext) block
 | 
			
		||||
 */
 | 
			
		||||
void mbedtls_aes_encrypt( mbedtls_aes_context *ctx,
 | 
			
		||||
                          const unsigned char input[16],
 | 
			
		||||
                          unsigned char output[16] )
 | 
			
		||||
{
 | 
			
		||||
    
 | 
			
		||||
    HAL_CRYP_AESECB_Encrypt(&hcryp_aes, (uint8_t *)input, 16, (uint8_t *)output, 10);
 | 
			
		||||
    if (HAL_CRYP_AESECB_Encrypt(&ctx->hcryp_aes, (uint8_t *)input, 16, (uint8_t *)output, 10) !=0)
 | 
			
		||||
        mbedtls_printf( "HAL_CRYP_AESECB_Encrypt timeout\n" );
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * \brief           Internal AES block decryption function
 | 
			
		||||
 *                  (Only exposed to allow overriding it,
 | 
			
		||||
 *                  see MBEDTLS_AES_DECRYPT_ALT)
 | 
			
		||||
 *
 | 
			
		||||
 * \param ctx       AES context
 | 
			
		||||
 * \param input     Ciphertext block
 | 
			
		||||
 * \param output    Output (plaintext) block
 | 
			
		||||
 */
 | 
			
		||||
void mbedtls_aes_decrypt( mbedtls_aes_context *ctx,
 | 
			
		||||
                          const unsigned char input[16],
 | 
			
		||||
                          unsigned char output[16] )
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    HAL_CRYP_AESECB_Decrypt(&hcryp_aes, (uint8_t *)input, 16, (uint8_t *)output, 10);
 | 
			
		||||
 | 
			
		||||
    if(HAL_CRYP_AESECB_Decrypt(&ctx->hcryp_aes, (uint8_t *)input, 16, (uint8_t *)output, 10))
 | 
			
		||||
        mbedtls_printf( "HAL_CRYP_AESECB_Decrypt timeout\n" );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -22,6 +22,8 @@
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_AES_ALT)
 | 
			
		||||
#include "mbedtls/platform.h"
 | 
			
		||||
#include "mbedtls/config.h"
 | 
			
		||||
 | 
			
		||||
#include "cmsis.h"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -38,11 +40,9 @@ extern "C" {
 | 
			
		|||
 */
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
    int nr;                        /*!<  number of rounds  */
 | 
			
		||||
    uint32_t *rk;                  /*!<  AES round keys    */
 | 
			
		||||
    uint32_t buf[68];              /*!<  unaligned data    */
 | 
			
		||||
    unsigned char aes_enc_key[32]; /* Encryption key */
 | 
			
		||||
    unsigned char aes_dec_key[32]; /* Decryption key */
 | 
			
		||||
    unsigned char      aes_key[32]; /* Decryption key */
 | 
			
		||||
    CRYP_HandleTypeDef hcryp_aes;
 | 
			
		||||
    uint32_t           ctx_save_cr; /* save context for multi-instance */
 | 
			
		||||
}
 | 
			
		||||
mbedtls_aes_context;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue