@@ -879,6 +879,59 @@ TPM_RC TPM2_GetCapability(GetCapability_In* in, GetCapability_Out* out)
879879 TPM2_Packet_ParseU32 (& packet , & out -> capabilityData .capability );
880880
881881 switch (out -> capabilityData .capability ) {
882+ case TPM_CAP_ALGS :
883+ {
884+ TPML_ALG_PROPERTY * algorithms =
885+ & out -> capabilityData .data .algorithms ;
886+ TPM2_Packet_ParseU32 (& packet , & algorithms -> count );
887+ for (i = 0 ; i < (int )algorithms -> count ; i ++ ) {
888+ TPM2_Packet_ParseU16 (& packet ,
889+ & algorithms -> algProperties [i ].alg );
890+ TPM2_Packet_ParseU32 (& packet ,
891+ & algorithms -> algProperties [i ].algProperties );
892+ }
893+ break ;
894+ }
895+ case TPM_CAP_HANDLES :
896+ {
897+ TPML_HANDLE * handles =
898+ & out -> capabilityData .data .handles ;
899+ TPM2_Packet_ParseU32 (& packet , & handles -> count );
900+ for (i = 0 ; i < (int )handles -> count ; i ++ ) {
901+ TPM2_Packet_ParseU32 (& packet , & handles -> handle [i ]);
902+ }
903+ break ;
904+ }
905+ case TPM_CAP_COMMANDS :
906+ {
907+ TPML_CCA * cmdAttribs =
908+ & out -> capabilityData .data .command ;
909+ TPM2_Packet_ParseU32 (& packet , & cmdAttribs -> count );
910+ for (i = 0 ; i < (int )cmdAttribs -> count ; i ++ ) {
911+ TPM2_Packet_ParseU32 (& packet ,
912+ & cmdAttribs -> commandAttributes [i ]);
913+ }
914+ break ;
915+ }
916+ case TPM_CAP_PP_COMMANDS :
917+ case TPM_CAP_AUDIT_COMMANDS :
918+ {
919+ TPML_CC * cmdCodes =
920+ & out -> capabilityData .data .ppCommands ;
921+ TPM2_Packet_ParseU32 (& packet , & cmdCodes -> count );
922+ for (i = 0 ; i < (int )cmdCodes -> count ; i ++ ) {
923+ TPM2_Packet_ParseU32 (& packet ,
924+ & cmdCodes -> commandCodes [i ]);
925+ }
926+ break ;
927+ }
928+ case TPM_CAP_PCRS :
929+ {
930+ TPML_PCR_SELECTION * assignedPCR =
931+ & out -> capabilityData .data .assignedPCR ;
932+ TPM2_Packet_ParsePCR (& packet , assignedPCR );
933+ break ;
934+ }
882935 case TPM_CAP_TPM_PROPERTIES :
883936 {
884937 TPML_TAGGED_TPM_PROPERTY * prop =
@@ -892,13 +945,56 @@ TPM_RC TPM2_GetCapability(GetCapability_In* in, GetCapability_Out* out)
892945 }
893946 break ;
894947 }
895- case TPM_CAP_HANDLES :
948+ case TPM_CAP_PCR_PROPERTIES :
896949 {
897- TPML_HANDLE * handles =
898- & out -> capabilityData .data .handles ;
899- TPM2_Packet_ParseU32 (& packet , & handles -> count );
900- for (i = 0 ; i < (int )handles -> count ; i ++ ) {
901- TPM2_Packet_ParseU32 (& packet , & handles -> handle [i ]);
950+ TPML_TAGGED_PCR_PROPERTY * pcrProp =
951+ & out -> capabilityData .data .pcrProperties ;
952+ TPM2_Packet_ParseU32 (& packet , & pcrProp -> count );
953+ break ;
954+ }
955+ case TPM_CAP_ECC_CURVES :
956+ {
957+ TPML_ECC_CURVE * eccCurves =
958+ & out -> capabilityData .data .eccCurves ;
959+ TPM2_Packet_ParseU32 (& packet , & eccCurves -> count );
960+ for (i = 0 ; i < (int )eccCurves -> count ; i ++ ) {
961+ TPM2_Packet_ParseU16 (& packet ,
962+ & eccCurves -> eccCurves [i ]);
963+ }
964+ break ;
965+ }
966+ case TPM_CAP_AUTH_POLICIES :
967+ {
968+ TPML_TAGGED_POLICY * authPol =
969+ & out -> capabilityData .data .authPolicies ;
970+ TPM2_Packet_ParseU32 (& packet , & authPol -> count );
971+ for (i = 0 ; i < (int )authPol -> count ; i ++ ) {
972+ int digSz ;
973+ TPMS_TAGGED_POLICY * pol = & authPol -> policies [i ];
974+ TPM2_Packet_ParseU32 (& packet , & pol -> handle );
975+ TPM2_Packet_ParseU16 (& packet , & pol -> policyHash .hashAlg );
976+ digSz = (int )TPM2_GetHashDigestSize (
977+ pol -> policyHash .hashAlg );
978+ if (digSz > (int )sizeof (pol -> policyHash .digest )) {
979+ digSz = (int )sizeof (pol -> policyHash .digest );
980+ }
981+ TPM2_Packet_ParseBytes (& packet ,
982+ pol -> policyHash .digest .H , digSz );
983+ }
984+ break ;
985+ }
986+ case TPM_CAP_ACT :
987+ {
988+ TPML_ACT_DATA * actData =
989+ & out -> capabilityData .data .actData ;
990+ TPM2_Packet_ParseU32 (& packet , & actData -> count );
991+ for (i = 0 ; i < (int )actData -> count ; i ++ ) {
992+ TPM2_Packet_ParseU32 (& packet ,
993+ & actData -> actData [i ].handle );
994+ TPM2_Packet_ParseU32 (& packet ,
995+ & actData -> actData [i ].timeout );
996+ TPM2_Packet_ParseU32 (& packet ,
997+ & actData -> actData [i ].attributes );
902998 }
903999 break ;
9041000 }
@@ -916,12 +1012,6 @@ TPM_RC TPM2_GetCapability(GetCapability_In* in, GetCapability_Out* out)
9161012 out -> capabilityData .data .vendor .size );
9171013 break ;
9181014 }
919- case TPM_CAP_PCRS :
920- {
921- TPM2_Packet_ParsePCR (& packet ,
922- & out -> capabilityData .data .assignedPCR );
923- break ;
924- }
9251015 default :
9261016 #ifdef DEBUG_WOLFTPM
9271017 printf ("Unknown capability type 0x%x\n" ,
0 commit comments