attr_info = attr->get_value(attr);
attr_cast = (tcg_pts_attr_req_func_comp_evid_t*)attr;
- DBG1(DBG_IMC, "IMV requests evidence for %d functional components",
+ DBG1(DBG_IMC, "evidence requested for %d functional components",
attr_cast->get_count(attr_cast));
e = attr_cast->create_enumerator(attr_cast);
while (e->enumerate(e, &flags, &depth, &name))
{
+ name->log(name, " ");
negotiated_caps = pts->get_proto_caps(pts);
- DBG1(DBG_IMC, "Requested Evidence flags: %d, depth: %d,"
- " vendor_id: %d, qualifier %d, name: %d",
- flags, depth, name->get_vendor_id(name),
- name->get_qualifier(name), name->get_name(name));
-
if (flags & PTS_REQ_FUNC_COMP_FLAG_TTC)
{
attr = ietf_attr_pa_tnc_error_create(PEN_TCG,
"zero. Measuring top level component only.");
return FALSE;
}
- if (name->get_vendor_id(name) != PEN_ITA)
- {
- DBG1(DBG_IMC, "current version of Attestation IMC supports"
- "only functional component namings by ITA");
- return FALSE;
- }
/* Check if Unknown or Wildcard was set for qualifier */
if (name->get_qualifier(name) & PTS_QUALIFIER_WILDCARD)
{
tcg_pts_attr_req_func_comp_evid_t *attr_cast;
enumerator_t *enumerator;
- char flags[8], *platform_info;
+ char *platform_info;
pts_component_t *comp;
pts_comp_func_name_t *comp_name;
- int vid, name, qualifier, type;
- enum_name_t *names, *types;
+ int vid, name, qualifier;
+ u_int8_t flags;
bool first = TRUE;
attestation_state->set_handshake_state(attestation_state,
{
break;
}
+ DBG2(DBG_IMV, "evidence request by");
while (enumerator->enumerate(enumerator, &vid, &name, &qualifier))
{
comp_name = pts_comp_func_name_create(vid, name, qualifier);
+ comp_name->log(comp_name, " ");
- names = pts_components->get_comp_func_names(pts_components, vid);
- types = pts_components->get_qualifier_type_names(pts_components, vid);
- if (names && types)
- {
- type = pts_components->get_qualifier(pts_components,
- comp_name, flags);
- DBG2(DBG_TNC, "%N component evidence request '%N' [%s] '%N'",
- pen_names, vid, names, name, flags, types, type);
- }
- else
- {
- DBG2(DBG_TNC, "0x%06x component evidence request 0x%08x 0x%02x",
- vid, name, qualifier);
- }
comp = pts_components->create(pts_components, comp_name);
if (!comp)
{
- DBG2(DBG_TNC, " functional component not registered");
+ DBG2(DBG_TNC, " not registered: removed from request");
comp_name->destroy(comp_name);
continue;
}
attr->set_noskip_flag(attr, TRUE);
first = FALSE;
}
+ flags = comp->get_evidence_flags(comp);
+ /* TODO check flags against negotiated_caps */
attr_cast = (tcg_pts_attr_req_func_comp_evid_t *)attr;
- attr_cast->add_component(attr, comp->get_evidence_flags(comp),
- 0, comp_name);
+ attr_cast->add_component(attr_cast, flags, 0, comp_name);
}
enumerator->destroy(enumerator);
* for more details.
*/
+#include "libpts.h"
#include "pts/components/pts_comp_func_name.h"
#include <debug.h>
/**
* PTS Component Functional Name Vendor ID
*/
- u_int32_t vendor_id;
+ u_int32_t vid;
/**
* PTS Component Functional Name
METHOD(pts_comp_func_name_t, get_vendor_id, u_int32_t,
private_pts_comp_func_name_t *this)
{
- return this->vendor_id;
+ return this->vid;
}
METHOD(pts_comp_func_name_t, get_name, u_int32_t,
static bool equals(private_pts_comp_func_name_t *this,
private_pts_comp_func_name_t *other)
{
- if (this->vendor_id != other->vendor_id ||
- this->name != other->name)
+ if (this->vid != other->vid || this->name != other->name)
{
return FALSE;
}
return &clone->public;
}
+METHOD(pts_comp_func_name_t, log_, void,
+ private_pts_comp_func_name_t *this, char *label)
+{
+ enum_name_t *names, *types;
+ char flags[8];
+ int type;
+
+ names = pts_components->get_comp_func_names(pts_components, this->vid);
+ types = pts_components->get_qualifier_type_names(pts_components, this->vid);
+ type = pts_components->get_qualifier(pts_components, &this->public, flags);
+
+ if (names && types)
+ {
+ DBG2(DBG_TNC, "%s%N functional component '%N' [%s] '%N'",
+ label, pen_names, this->vid, names, this->name, flags, types, type);
+ }
+ else
+ {
+ DBG2(DBG_TNC, "%s0x%06x functional component 0x%08x 0x%02x",
+ label, this->vid, this->name, this->qualifier);
+ }
+}
+
METHOD(pts_comp_func_name_t, destroy, void,
private_pts_comp_func_name_t *this)
{
/**
* See header
*/
-pts_comp_func_name_t* pts_comp_func_name_create(u_int32_t vendor_id,
- u_int32_t name,
+pts_comp_func_name_t* pts_comp_func_name_create(u_int32_t vid, u_int32_t name,
u_int8_t qualifier)
{
private_pts_comp_func_name_t *this;
.get_qualifier = _get_qualifier,
.equals = (bool(*)(pts_comp_func_name_t*,pts_comp_func_name_t*))equals,
.clone = _clone_,
+ .log = _log_,
.destroy = _destroy,
},
- .vendor_id = vendor_id,
+ .vid = vid,
.name = name,
.qualifier = qualifier,
);
*/
pts_comp_func_name_t* (*clone)(pts_comp_func_name_t *this);
+ /**
+ * Write PTS Component Functional Name information to the standard logfile
+ *
+ * @param label Label added to log output
+ */
+ void (*log)(pts_comp_func_name_t *this, char *label);
+
/**
* Destroys a pts_component_t object.
*/
/**
* Create a PTS Component Functional Name object
*
- * @param vendor_id PTS Component Functional Name Vendor ID
+ * @param vid PTS Component Functional Name Vendor ID
* @param name PTS Component Functional Name
* @param PTS Component Functional Name Qualifier
*/
-pts_comp_func_name_t* pts_comp_func_name_create(u_int32_t vendor_id,
- u_int32_t name,
+pts_comp_func_name_t* pts_comp_func_name_create(u_int32_t vid, u_int32_t name,
u_int8_t qualifier);
#endif /** PTS_FUNC_COMP_NAME_H_ @}*/
entry->components = linked_list_create();
this->list->insert_last(this->list, entry);
- DBG2(DBG_TNC, "added %N functional component namespace",
+ DBG2(DBG_PTS, "added %N functional component namespace",
pen_names, vendor_id);
}
component->create = create;
entry->components->insert_last(entry->components, component);
- DBG2(DBG_TNC, "added %N functional component \"%N\"",
+ DBG2(DBG_PTS, "added %N functional component '%N'",
pen_names, vendor_id,
get_comp_func_names(this, vendor_id), name);
}
{
this->list->remove_at(this->list, enumerator);
vendor_entry_destroy(entry);
- DBG2(DBG_TNC, "removed %N functional component namespace",
+ DBG2(DBG_PTS, "removed %N functional component namespace",
pen_names, vendor_id);
}
}
type = qualifier & ((1 << size) - 1);
/* determine flags */
+ size = PTS_QUALIFIER_SIZE - size;
flag = (1 << (PTS_QUALIFIER_SIZE - 1));
if (flags)
{
- for (i = 0 ; i < PTS_QUALIFIER_SIZE - size; i++)
+ for (i = 0 ; i < size; i++)
{
flags[i] = (qualifier & flag) ?
entry->qualifier_flag_names[i] : '.';