@@ -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+
890935static 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