@@ -4847,32 +4847,45 @@ static int DecryptDo(WOLFSSL* ssl, byte* plain, const byte* input,
48474847 XMEMCPY (ssl -> decrypt .nonce , ssl -> keys .aead_dec_imp_IV , AESGCM_IMP_IV_SZ );
48484848 XMEMCPY (ssl -> decrypt .nonce + AESGCM_IMP_IV_SZ , input , AESGCM_EXP_IV_SZ );
48494849
4850- if ((ret = aes_auth_fn (ssl -> decrypt .aes ,
4851- plain ,
4852- input + AESGCM_EXP_IV_SZ ,
4853- sz - AESGCM_EXP_IV_SZ - ssl -> specs .aead_mac_size ,
4854- ssl -> decrypt .nonce , AESGCM_NONCE_SZ ,
4855- ssl -> decrypt .additional , AEAD_AUTH_DATA_SZ ,
4856- NULL , 0 )) < 0 ) {
4857- #ifdef WOLFSSL_ASYNC_CRYPT
4858- if (ret == WC_NO_ERR_TRACE (WC_PENDING_E )) {
4859- ret = wolfSSL_AsyncPush (ssl , & ssl -> decrypt .aes -> asyncDev );
4850+ if (sz < AESGCM_EXP_IV_SZ + ssl -> specs .aead_mac_size ) {
4851+ ret = BUFFER_ERROR ;
4852+ }
4853+
4854+ if (ret == 0 ) {
4855+ ret = aes_auth_fn (ssl -> decrypt .aes ,
4856+ plain ,
4857+ input + AESGCM_EXP_IV_SZ ,
4858+ sz - AESGCM_EXP_IV_SZ - ssl -> specs .aead_mac_size ,
4859+ ssl -> decrypt .nonce , AESGCM_NONCE_SZ ,
4860+ ssl -> decrypt .additional , AEAD_AUTH_DATA_SZ ,
4861+ NULL , 0 );
4862+ if (ret < 0 ) {
4863+ #ifdef WOLFSSL_ASYNC_CRYPT
4864+ if (ret == WC_NO_ERR_TRACE (WC_PENDING_E )) {
4865+ ret = wolfSSL_AsyncPush (ssl , & ssl -> decrypt .aes -> asyncDev );
4866+ }
4867+ #endif
48604868 }
4861- #endif
48624869 }
48634870 }
48644871 break ;
48654872 #endif /* HAVE_AESGCM || HAVE_AESCCM */
48664873
48674874 #ifdef HAVE_ARIA
48684875 case wolfssl_aria_gcm :
4869- ret = wc_AriaDecrypt (ssl -> decrypt .aria ,
4870- plain ,
4871- (byte * )input + AESGCM_EXP_IV_SZ ,
4872- sz - AESGCM_EXP_IV_SZ - ssl -> specs .aead_mac_size ,
4873- ssl -> decrypt .nonce , AESGCM_NONCE_SZ ,
4874- ssl -> decrypt .additional , ssl -> specs .aead_mac_size ,
4875- NULL , 0 );
4876+ if (sz < AESGCM_EXP_IV_SZ + ssl -> specs .aead_mac_size ) {
4877+ ret = BUFFER_ERROR ;
4878+ }
4879+
4880+ if (ret == 0 ) {
4881+ ret = wc_AriaDecrypt (ssl -> decrypt .aria ,
4882+ plain ,
4883+ (byte * )input + AESGCM_EXP_IV_SZ ,
4884+ sz - AESGCM_EXP_IV_SZ - ssl -> specs .aead_mac_size ,
4885+ ssl -> decrypt .nonce , AESGCM_NONCE_SZ ,
4886+ ssl -> decrypt .additional , ssl -> specs .aead_mac_size ,
4887+ NULL , 0 );
4888+ }
48764889 break ;
48774890 #endif
48784891
0 commit comments