Skip to content

Commit bfbd728

Browse files
committed
F-2982 - https://fenrir.wolfssl.com/finding/2982 - Add known-answer unit test for TPM2_HashNvPublic
1 parent 493c236 commit bfbd728

1 file changed

Lines changed: 46 additions & 0 deletions

File tree

tests/unit_tests.c

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -887,6 +887,51 @@ static void test_TPM2_ParamEncDec_Dispatch_Roundtrip(void)
887887
#endif
888888
}
889889

890+
/* Known-answer test for TPM2_HashNvPublic serialization and hashing.
891+
* Reference: independently computed SHA-256 over the marshaled NV public
892+
* area fields in TPM 2.0 canonical order. */
893+
static void test_TPM2_HashNvPublic(void)
894+
{
895+
#ifndef WOLFTPM2_NO_WOLFCRYPT
896+
int rc;
897+
TPMS_NV_PUBLIC nvPublic;
898+
byte nameBuffer[2 + WC_MAX_DIGEST_SIZE];
899+
UINT16 nameSize = 0;
900+
/* Expected Name: nameAlg(BE) || SHA256(nvIndex||nameAlg||attributes||
901+
* authPolicy.size||dataSize) */
902+
static const byte expectedName[] = {
903+
0x00, 0x0b, 0x95, 0x61, 0x47, 0xe5, 0x81, 0xbd, 0xe0, 0xad, 0x4d, 0x95,
904+
0x83, 0x8d, 0x2c, 0x6b, 0x7b, 0xa5, 0x1c, 0xc0, 0xad, 0x56, 0xd8, 0xec,
905+
0xb7, 0x30, 0x24, 0xfa, 0x34, 0xb9, 0x95, 0x8f, 0xee, 0x45
906+
};
907+
908+
XMEMSET(&nvPublic, 0, sizeof(nvPublic));
909+
nvPublic.nvIndex = 0x01500020;
910+
nvPublic.nameAlg = TPM_ALG_SHA256;
911+
nvPublic.attributes = TPMA_NV_AUTHWRITE | TPMA_NV_AUTHREAD | TPMA_NV_NO_DA;
912+
nvPublic.authPolicy.size = 0;
913+
nvPublic.dataSize = 32;
914+
915+
XMEMSET(nameBuffer, 0, sizeof(nameBuffer));
916+
rc = TPM2_HashNvPublic(&nvPublic, nameBuffer, &nameSize);
917+
AssertIntEQ(rc, TPM_RC_SUCCESS);
918+
AssertIntEQ(nameSize, (int)sizeof(expectedName));
919+
AssertIntEQ(0, XMEMCMP(nameBuffer, expectedName, sizeof(expectedName)));
920+
921+
/* Test NULL args */
922+
rc = TPM2_HashNvPublic(NULL, nameBuffer, &nameSize);
923+
AssertIntEQ(rc, BAD_FUNC_ARG);
924+
rc = TPM2_HashNvPublic(&nvPublic, NULL, &nameSize);
925+
AssertIntEQ(rc, BAD_FUNC_ARG);
926+
rc = TPM2_HashNvPublic(&nvPublic, nameBuffer, NULL);
927+
AssertIntEQ(rc, BAD_FUNC_ARG);
928+
929+
printf("Test TPM Wrapper:\tHashNvPublic:\t\tPassed\n");
930+
#else
931+
printf("Test TPM Wrapper:\tHashNvPublic:\t\tSkipped\n");
932+
#endif
933+
}
934+
890935
static void test_GetAlgId(void)
891936
{
892937
TPM_ALG_ID alg = TPM2_GetAlgId("SHA256");
@@ -1628,6 +1673,7 @@ int unit_tests(int argc, char *argv[])
16281673
test_TPM2_ParamDec_XOR_Roundtrip();
16291674
test_TPM2_ParamDec_AESCFB_Roundtrip();
16301675
test_TPM2_ParamEncDec_Dispatch_Roundtrip();
1676+
test_TPM2_HashNvPublic();
16311677
test_GetAlgId();
16321678
test_wolfTPM2_ReadPublicKey();
16331679
test_wolfTPM2_CSR();

0 commit comments

Comments
 (0)