cancel
Showing results for 
Search instead for 
Did you mean: 

HAL_CRYPEx_AES() maximum number of output bytes?

dsorber
Associate

I am using an STM32L4S9ZIJX part and attempting to encrypt a 256KB buffer (actually 262,144 - 16 = 262,128 bytes) using AES256 CTR mode in polling mode.

I created a wrapper function to perform the encryption:

 

int encrypt_CTR_mode(uint8_t* key, uint8_t* IV, uint8_t* plaintext, uint32_t pt_length, uint8_t* ciphertext) { // Deinit old parameters if (HAL_CRYP_DeInit(&hcryp) != HAL_OK) { LOG(error, "ERROR: HAL_CRYP_DeInit() failed\n"); return -1; } // Setup new params hcryp.Init.DataType = CRYP_DATATYPE_32B; hcryp.Init.KeySize = CRYP_KEYSIZE_256B; hcryp.Init.OperatingMode = CRYP_ALGOMODE_ENCRYPT; hcryp.Init.ChainingMode = CRYP_CHAINMODE_AES_CTR; hcryp.Init.KeyWriteFlag = CRYP_KEY_WRITE_ENABLE; hcryp.Init.pKey = key; hcryp.Init.pInitVect = IV; // Init new parameters if (HAL_CRYP_Init(&hcryp) != HAL_OK) { LOG(error, "ERROR: HAL_CRYP_Init() failed\n"); return -1; } // Encrypt plaintext HAL_StatusTypeDef rc; rc = HAL_CRYPEx_AES(&hcryp, plaintext, pt_length, ciphertext, 5000); if (rc != HAL_OK) { LOG(error, "ERROR: HAL_CRYPEx_AES() -- %d\n", rc); return -1; } return 0; }
View more

 

 

The function returns successfully but I only get 65,520 (0xFFF0) output bytes even though I'm passing in 262,128 to HAL_CRYPEx_AES().  Is there some limitation for the maximum output length of HAL_CRYPEx_AES()?  I can't find any such limitation documented.

 

 

2 REPLIES 2
dsorber
Associate

Whoops... I see my problem: HAL_CRYPEx_AES() size parameter is a uint16_t.

Thankfully the source is exposed, and deeper hcryp->CrypInCount is uint32_t

You could perhaps also decompose the data into blocks

Tips, Buy me a coffee, or three.. PayPal Venmo
Up vote any posts that you find helpful, it shows what's working..