@@ -12493,6 +12493,7 @@ int wc_PKCS7_DecodeEnvelopedData(wc_PKCS7* pkcs7, byte* in,
1249312493 }
1249412494
1249512495 #endif
12496+ pkcs7->totalEncryptedContentSz = 0;
1249612497 wc_PKCS7_ChangeState(pkcs7, WC_PKCS7_ENV_5);
1249712498 FALL_THROUGH;
1249812499
@@ -12628,6 +12629,10 @@ int wc_PKCS7_DecodeEnvelopedData(wc_PKCS7* pkcs7, byte* in,
1262812629 /* advance idx past encrypted content */
1262912630 localIdx += (word32)encryptedContentSz;
1263012631
12632+ /* keep track of total encrypted content size */
12633+ pkcs7->totalEncryptedContentSz +=
12634+ (word32)encryptedContentSz;
12635+
1263112636 if (localIdx + ASN_INDEF_END_SZ <= pkiMsgSz) {
1263212637 if (pkiMsg[localIdx] == ASN_EOC &&
1263312638 pkiMsg[localIdx+1] == ASN_EOC) {
@@ -12673,6 +12678,8 @@ int wc_PKCS7_DecodeEnvelopedData(wc_PKCS7* pkcs7, byte* in,
1267312678 } else {
1267412679 pkcs7->cachedEncryptedContentSz =
1267512680 (word32)encryptedContentTotalSz;
12681+ pkcs7->totalEncryptedContentSz =
12682+ (word32)encryptedContentTotalSz;
1267612683 pkcs7->cachedEncryptedContent = (byte*)XMALLOC(
1267712684 pkcs7->cachedEncryptedContentSz, pkcs7->heap,
1267812685 DYNAMIC_TYPE_PKCS7);
@@ -12734,7 +12741,7 @@ int wc_PKCS7_DecodeEnvelopedData(wc_PKCS7* pkcs7, byte* in,
1273412741 pkcs7->cachedEncryptedContentSz = 0;
1273512742 }
1273612743
12737- ret = encryptedContentSz - padLen;
12744+ ret = (int)pkcs7->totalEncryptedContentSz - padLen;
1273812745 #ifndef NO_PKCS7_STREAM
1273912746 pkcs7->stream->aad = NULL;
1274012747 pkcs7->stream->aadSz = 0;
0 commit comments