Skip to content

Commit f567d36

Browse files
committed
F-2978 - https://fenrir.wolfssl.com/finding/2978 - Add userWithAuth to KeySeal template default attributes
1 parent 0fe4603 commit f567d36

File tree

5 files changed

+22
-3
lines changed

5 files changed

+22
-3
lines changed

examples/boot/secret_seal.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,8 @@ int TPM2_Boot_SecretSeal_Example(void* userCtx, int argc, char *argv[])
268268

269269
/* Create a new key for sealing using signing auth for external key */
270270
wolfTPM2_GetKeyTemplate_KeySeal(&sealTemplate, pcrAlg);
271+
/* Clear userWithAuth - policy-only access */
272+
sealTemplate.objectAttributes &= ~TPMA_OBJECT_userWithAuth;
271273
sealTemplate.authPolicy.size = policyDigestSz;
272274
XMEMCPY(sealTemplate.authPolicy.buffer, policyDigest, policyDigestSz);
273275
rc = wolfTPM2_CreateKeySeal_ex(&dev, &sealBlob, &storage.handle,

examples/seal/seal_pcr.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,8 @@ int TPM2_Seal_PCR_Example(void* userCtx, int argc, char *argv[])
216216

217217
/* Step 2: Create seal template with PCR policy */
218218
wolfTPM2_GetKeyTemplate_KeySeal(&sealTemplate, pcrAlg);
219-
/* Do NOT set TPMA_OBJECT_userWithAuth - policy-only access */
219+
/* Clear userWithAuth - policy-only access */
220+
sealTemplate.objectAttributes &= ~TPMA_OBJECT_userWithAuth;
220221
sealTemplate.authPolicy.size = policyDigestSz;
221222
XMEMCPY(sealTemplate.authPolicy.buffer, policyDigest, policyDigestSz);
222223

examples/seal/seal_policy_auth.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,8 @@ int TPM2_Seal_PolicyAuth_Example(void* userCtx, int argc, char *argv[])
265265

266266
/* Step 3: Create seal template with PolicyAuthorize digest */
267267
wolfTPM2_GetKeyTemplate_KeySeal(&sealTemplate, pcrAlg);
268-
/* Do NOT set TPMA_OBJECT_userWithAuth - policy-only access */
268+
/* Clear userWithAuth - policy-only access */
269+
sealTemplate.objectAttributes &= ~TPMA_OBJECT_userWithAuth;
269270
sealTemplate.authPolicy.size = policyDigestSz;
270271
XMEMCPY(sealTemplate.authPolicy.buffer, policyDigest, policyDigestSz);
271272

src/tpm2_wrap.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7347,7 +7347,7 @@ int wolfTPM2_GetKeyTemplate_KeySeal(TPMT_PUBLIC* publicTemplate, TPM_ALG_ID name
73477347
publicTemplate->nameAlg = nameAlg;
73487348
publicTemplate->objectAttributes = (
73497349
TPMA_OBJECT_fixedTPM | TPMA_OBJECT_fixedParent |
7350-
TPMA_OBJECT_noDA);
7350+
TPMA_OBJECT_userWithAuth | TPMA_OBJECT_noDA);
73517351
publicTemplate->parameters.keyedHashDetail.scheme.scheme = TPM_ALG_NULL;
73527352
return TPM_RC_SUCCESS;
73537353
}

tests/unit_tests.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1405,6 +1405,20 @@ static void test_TPM2_SchemeSerialize(void)
14051405
printf("Test TPM Wrapper:\tSchemeSerialize:\t\tPassed\n");
14061406
}
14071407

1408+
static void test_KeySealTemplate(void)
1409+
{
1410+
int rc;
1411+
TPMT_PUBLIC tmpl;
1412+
1413+
rc = wolfTPM2_GetKeyTemplate_KeySeal(&tmpl, TPM_ALG_SHA256);
1414+
AssertIntEQ(rc, TPM_RC_SUCCESS);
1415+
1416+
/* Template must include userWithAuth so password-based unseal works */
1417+
AssertIntNE(tmpl.objectAttributes & TPMA_OBJECT_userWithAuth, 0);
1418+
1419+
printf("Test TPM Wrapper:\tKeySealTemplate:\t\tPassed\n");
1420+
}
1421+
14081422
static void test_GetAlgId(void)
14091423
{
14101424
TPM_ALG_ID alg = TPM2_GetAlgId("SHA256");
@@ -2157,6 +2171,7 @@ int unit_tests(int argc, char *argv[])
21572171
test_wolfTPM2_ComputeName();
21582172
#endif
21592173
test_TPM2_SchemeSerialize();
2174+
test_KeySealTemplate();
21602175
test_GetAlgId();
21612176
test_wolfTPM2_ReadPublicKey();
21622177
test_wolfTPM2_CSR();

0 commit comments

Comments
 (0)