@@ -1040,23 +1040,33 @@ int wh_Client_AesCbcRequest(whClientContext* ctx, Aes* aes, int enc,
10401040{
10411041 whMessageCrypto_AesCbcRequest * req ;
10421042 uint8_t * dataPtr ;
1043+ uint16_t blocks ;
1044+ uint32_t key_len ;
1045+ const uint8_t * key ;
1046+ whKeyId key_id ;
1047+ uint8_t * iv ;
1048+ uint32_t iv_len ;
1049+ uint8_t * req_in ;
1050+ uint8_t * req_key ;
1051+ uint8_t * req_iv ;
1052+ uint32_t req_len ;
10431053
10441054 if ((ctx == NULL ) || (aes == NULL ) || ((len % AES_BLOCK_SIZE ) != 0 ) ||
10451055 (in == NULL )) {
10461056 return WH_ERROR_BADARGS ;
10471057 }
10481058
1049- uint16_t blocks = len / AES_BLOCK_SIZE ;
1059+ blocks = len / AES_BLOCK_SIZE ;
10501060
10511061 if (blocks == 0 ) {
10521062 return WH_ERROR_OK ;
10531063 }
10541064
1055- uint32_t key_len = aes -> keylen ;
1056- const uint8_t * key = (const uint8_t * )(aes -> devKey );
1057- whKeyId key_id = WH_DEVCTX_TO_KEYID (aes -> devCtx );
1058- uint8_t * iv = (uint8_t * )aes -> reg ;
1059- uint32_t iv_len = AES_IV_SIZE ;
1065+ key_len = aes -> keylen ;
1066+ key = (const uint8_t * )(aes -> devKey );
1067+ key_id = WH_DEVCTX_TO_KEYID (aes -> devCtx );
1068+ iv = (uint8_t * )aes -> reg ;
1069+ iv_len = AES_IV_SIZE ;
10601070
10611071 dataPtr = wh_CommClient_GetDataPtr (ctx -> comm );
10621072 if (dataPtr == NULL ) {
@@ -1065,11 +1075,11 @@ int wh_Client_AesCbcRequest(whClientContext* ctx, Aes* aes, int enc,
10651075
10661076 req = (whMessageCrypto_AesCbcRequest * )_createCryptoRequest (
10671077 dataPtr , WC_CIPHER_AES_CBC , ctx -> cryptoAffinity );
1068- uint8_t * req_in = (uint8_t * )(req + 1 );
1069- uint8_t * req_key = req_in + len ;
1070- uint8_t * req_iv = req_key + key_len ;
1071- uint32_t req_len = sizeof (whMessageCrypto_GenericRequestHeader ) +
1072- sizeof (* req ) + len + key_len + iv_len ;
1078+ req_in = (uint8_t * )(req + 1 );
1079+ req_key = req_in + len ;
1080+ req_iv = req_key + key_len ;
1081+ req_len = sizeof (whMessageCrypto_GenericRequestHeader ) +
1082+ sizeof (* req ) + len + key_len + iv_len ;
10731083
10741084 if (req_len > WOLFHSM_CFG_COMM_DATA_LEN ) {
10751085 return WH_ERROR_BADARGS ;
@@ -1110,7 +1120,7 @@ int wh_Client_AesCbcResponse(whClientContext* ctx, Aes* aes, uint8_t* out,
11101120 uint16_t res_len = 0 ;
11111121 whMessageCrypto_AesCbcResponse * res ;
11121122
1113- if ((ctx == NULL ) || (aes == NULL )) {
1123+ if ((ctx == NULL ) || (aes == NULL ) || ( out == NULL ) ) {
11141124 return WH_ERROR_BADARGS ;
11151125 }
11161126
@@ -1124,15 +1134,13 @@ int wh_Client_AesCbcResponse(whClientContext* ctx, Aes* aes, uint8_t* out,
11241134 ret = _getCryptoResponse (dataPtr , WC_CIPHER_AES_CBC , (uint8_t * * )& res );
11251135 if (ret == WH_ERROR_OK ) {
11261136 uint8_t * res_out = (uint8_t * )(res + 1 );
1127- if (out != NULL ) {
1128- memcpy (out , res_out , res -> sz );
1129- /* For encryption, update the IV with the last ciphertext
1130- * block for CBC chaining */
1131- if (res -> sz >= AES_BLOCK_SIZE ) {
1132- uint32_t last_offset =
1133- ((res -> sz / AES_BLOCK_SIZE ) - 1 ) * AES_BLOCK_SIZE ;
1134- memcpy ((uint8_t * )aes -> reg , out + last_offset , AES_IV_SIZE );
1135- }
1137+ memcpy (out , res_out , res -> sz );
1138+ /* For encryption, update the IV with the last ciphertext
1139+ * block for CBC chaining */
1140+ if (res -> sz >= AES_BLOCK_SIZE ) {
1141+ uint32_t last_offset =
1142+ ((res -> sz / AES_BLOCK_SIZE ) - 1 ) * AES_BLOCK_SIZE ;
1143+ memcpy ((uint8_t * )aes -> reg , out + last_offset , AES_IV_SIZE );
11361144 }
11371145 if (out_size != NULL ) {
11381146 * out_size = res -> sz ;
0 commit comments