Skip to content

Commit 3e98b30

Browse files
committed
F-2978 - https://fenrir.wolfssl.com/finding/2978 - Add userWithAuth to KeySeal template default attributes
1 parent 27bada5 commit 3e98b30

5 files changed

Lines changed: 22 additions & 3 deletions

File tree

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
@@ -7275,7 +7275,7 @@ int wolfTPM2_GetKeyTemplate_KeySeal(TPMT_PUBLIC* publicTemplate, TPM_ALG_ID name
72757275
publicTemplate->nameAlg = nameAlg;
72767276
publicTemplate->objectAttributes = (
72777277
TPMA_OBJECT_fixedTPM | TPMA_OBJECT_fixedParent |
7278-
TPMA_OBJECT_noDA);
7278+
TPMA_OBJECT_userWithAuth | TPMA_OBJECT_noDA);
72797279
publicTemplate->parameters.keyedHashDetail.scheme.scheme = TPM_ALG_NULL;
72807280
return TPM_RC_SUCCESS;
72817281
}

tests/unit_tests.c

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

1099+
static void test_KeySealTemplate(void)
1100+
{
1101+
int rc;
1102+
TPMT_PUBLIC tmpl;
1103+
1104+
rc = wolfTPM2_GetKeyTemplate_KeySeal(&tmpl, TPM_ALG_SHA256);
1105+
AssertIntEQ(rc, TPM_RC_SUCCESS);
1106+
1107+
/* Template must include userWithAuth so password-based unseal works */
1108+
AssertIntNE(tmpl.objectAttributes & TPMA_OBJECT_userWithAuth, 0);
1109+
1110+
printf("Test TPM Wrapper:\tKeySealTemplate:\t\tPassed\n");
1111+
}
1112+
10991113
static void test_GetAlgId(void)
11001114
{
11011115
TPM_ALG_ID alg = TPM2_GetAlgId("SHA256");
@@ -1843,6 +1857,7 @@ int unit_tests(int argc, char *argv[])
18431857
test_wolfTPM2_ComputeName();
18441858
#endif
18451859
test_TPM2_SchemeSerialize();
1860+
test_KeySealTemplate();
18461861
test_GetAlgId();
18471862
test_wolfTPM2_ReadPublicKey();
18481863
test_wolfTPM2_CSR();

0 commit comments

Comments
 (0)