mirror of https://github.com/wolfSSL/wolfTPM.git
F-9182 - Free PKCS7 state on error paths in the sign verify examples
parent
c425242730
commit
b58bee5952
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue