F-9182 - Free PKCS7 state on error paths in the sign verify examples

pull/604/head
Aidan Garske 2026-09-10 11:10:02 -07:00
parent c425242730
commit b58bee5952
1 changed files with 20 additions and 0 deletions

View File

@ -109,6 +109,7 @@ static int PKCS7_SignVerifyEx(WOLFTPM2_DEV* dev, int tpmDevId,
{
int rc;
wc_PKCS7 pkcs7;
int pkcs7Init = 0;
wc_HashAlg hash;
byte hashBuf[TPM_MAX_DIGEST_SIZE];
word32 hashSz;
@ -155,6 +156,7 @@ static int PKCS7_SignVerifyEx(WOLFTPM2_DEV* dev, int tpmDevId,
/* Generate and verify PKCS#7 files containing data using TPM key */
rc = wc_PKCS7_Init(&pkcs7, NULL, tpmDevId);
if (rc != 0) goto exit;
pkcs7Init = 1;
rc = wc_PKCS7_InitWithCert(&pkcs7, derCert, derCertSz);
if (rc != 0) goto exit;
@ -177,6 +179,7 @@ static int PKCS7_SignVerifyEx(WOLFTPM2_DEV* dev, int tpmDevId,
if (rc != 0) goto exit;
wc_PKCS7_Free(&pkcs7);
pkcs7Init = 0;
printf("PKCS7 Header %d\n", outputHeadSz);
TPM2_PrintBin(outputHead, outputHeadSz);
@ -232,6 +235,7 @@ static int PKCS7_SignVerifyEx(WOLFTPM2_DEV* dev, int tpmDevId,
/* Test verify with TPM */
rc = wc_PKCS7_Init(&pkcs7, NULL, tpmDevId);
if (rc != 0) goto exit;
pkcs7Init = 1;
rc = wc_PKCS7_InitWithCert(&pkcs7, NULL, 0);
if (rc != 0) goto exit;
@ -241,12 +245,14 @@ static int PKCS7_SignVerifyEx(WOLFTPM2_DEV* dev, int tpmDevId,
if (rc != 0) goto exit;
wc_PKCS7_Free(&pkcs7);
pkcs7Init = 0;
printf("PKCS7 Container Verified (using TPM)\n");
/* Test verify with software */
rc = wc_PKCS7_Init(&pkcs7, NULL, INVALID_DEVID);
if (rc != 0) goto exit;
pkcs7Init = 1;
rc = wc_PKCS7_InitWithCert(&pkcs7, NULL, 0);
if (rc != 0) goto exit;
pkcs7.contentSz = dataChunkSz;
@ -254,10 +260,14 @@ static int PKCS7_SignVerifyEx(WOLFTPM2_DEV* dev, int tpmDevId,
outputHead, outputHeadSz, outputFoot, outputFootSz);
if (rc != 0) goto exit;
wc_PKCS7_Free(&pkcs7);
pkcs7Init = 0;
printf("PKCS7 Container Verified (using software)\n");
exit:
if (pkcs7Init) {
wc_PKCS7_Free(&pkcs7);
}
return rc;
}
#endif /* ENABLE_PKCS7EX_EXAMPLE */
@ -268,6 +278,7 @@ static int PKCS7_SignVerify(WOLFTPM2_DEV* dev, int tpmDevId,
{
int rc;
wc_PKCS7 pkcs7;
int pkcs7Init = 0;
byte data[] = "My encoded DER cert.";
byte output[MAX_PKCS7_SIZE];
int outputSz;
@ -280,6 +291,7 @@ static int PKCS7_SignVerify(WOLFTPM2_DEV* dev, int tpmDevId,
/* Generate and verify PKCS#7 files containing data using TPM key */
rc = wc_PKCS7_Init(&pkcs7, NULL, tpmDevId);
if (rc != 0) goto exit;
pkcs7Init = 1;
rc = wc_PKCS7_InitWithCert(&pkcs7, derCert, derCertSz);
if (rc != 0) goto exit;
@ -296,6 +308,7 @@ static int PKCS7_SignVerify(WOLFTPM2_DEV* dev, int tpmDevId,
rc = wc_PKCS7_EncodeSignedData(&pkcs7, output, sizeof(output));
if (rc <= 0) goto exit;
wc_PKCS7_Free(&pkcs7);
pkcs7Init = 0;
outputSz = rc;
printf("PKCS7 Signed Container %d\n", outputSz);
@ -321,26 +334,33 @@ static int PKCS7_SignVerify(WOLFTPM2_DEV* dev, int tpmDevId,
/* Test verify with TPM */
rc = wc_PKCS7_Init(&pkcs7, NULL, tpmDevId);
if (rc != 0) goto exit;
pkcs7Init = 1;
rc = wc_PKCS7_InitWithCert(&pkcs7, NULL, 0);
if (rc != 0) goto exit;
rc = wc_PKCS7_VerifySignedData(&pkcs7, output, outputSz);
if (rc != 0) goto exit;
wc_PKCS7_Free(&pkcs7);
pkcs7Init = 0;
printf("PKCS7 Container Verified (using TPM)\n");
/* Test verify with software */
rc = wc_PKCS7_Init(&pkcs7, NULL, INVALID_DEVID);
if (rc != 0) goto exit;
pkcs7Init = 1;
rc = wc_PKCS7_InitWithCert(&pkcs7, NULL, 0);
if (rc != 0) goto exit;
rc = wc_PKCS7_VerifySignedData(&pkcs7, output, outputSz);
if (rc != 0) goto exit;
wc_PKCS7_Free(&pkcs7);
pkcs7Init = 0;
printf("PKCS7 Container Verified (using software)\n");
exit:
if (pkcs7Init) {
wc_PKCS7_Free(&pkcs7);
}
return rc;
}