object oriented approach to pts functional components

This commit is contained in:
Andreas Steffen
2011-11-28 21:20:23 +01:00
parent c6beb16689
commit 051dfbd654
26 changed files with 1371 additions and 419 deletions
@@ -266,7 +266,7 @@ bool imv_attestation_process(pa_tnc_attr_t *attr, linked_list_t *attr_list,
bool pcr_info_inclided, component_meas_error = FALSE;
pts_attr_simple_comp_evid_flag_t flags;
u_int32_t depth, comp_vendor_id, extended_pcr;
u_int8_t family, measurement_type;
u_int8_t measurement_type;
pts_qualifier_t qualifier;
pts_ita_funct_comp_name_t name;
pts_meas_algorithms_t hash_algorithm;
@@ -21,7 +21,6 @@
typedef struct private_imv_attestation_state_t private_imv_attestation_state_t;
typedef struct file_meas_request_t file_meas_request_t;
typedef struct comp_evid_request_t comp_evid_request_t;
/**
* PTS File/Directory Measurement request entry
@@ -32,15 +31,6 @@ struct file_meas_request_t {
bool is_dir;
};
/**
* Functional Component Evidence Request entry
*/
struct comp_evid_request_t {
u_int32_t vendor_id;
pts_qualifier_t qualifier;
pts_ita_funct_comp_name_t name;
};
/**
* Private data of an imv_attestation_state_t object.
*/
@@ -273,31 +263,23 @@ METHOD(imv_attestation_state_t, get_file_meas_request_count, int,
METHOD(imv_attestation_state_t, add_comp_evid_request, void,
private_imv_attestation_state_t *this, funct_comp_evid_req_entry_t *entry)
{
comp_evid_request_t *request;
pts_comp_func_name_t *request;
request = malloc_thing(comp_evid_request_t);
request->vendor_id = entry->vendor_id;
request->qualifier = entry->qualifier;
request->name = entry->name;
request = entry->name->clone(entry->name);
this->comp_evid_requests->insert_last(this->comp_evid_requests, request);
}
METHOD(imv_attestation_state_t, check_off_comp_evid_request, bool,
private_imv_attestation_state_t *this, u_int32_t vendor_id,
pts_qualifier_t qualifier, pts_ita_funct_comp_name_t comp_name)
private_imv_attestation_state_t *this, pts_comp_func_name_t *name)
{
enumerator_t *enumerator;
comp_evid_request_t *request;
pts_comp_func_name_t *request;
bool found = FALSE;
enumerator = this->comp_evid_requests->create_enumerator(this->comp_evid_requests);
while (enumerator->enumerate(enumerator, &request))
{
if (request->vendor_id == vendor_id &&
request->qualifier.kernel == qualifier.kernel &&
request->qualifier.sub_component == qualifier.sub_component &&
request->qualifier.type == qualifier.type &&
request->name == comp_name)
if (name->equals(name, request))
{
found = TRUE;
this->comp_evid_requests->remove_at(this->comp_evid_requests, enumerator);
@@ -81,8 +81,8 @@ struct imv_attestation_state_t {
* @param is_dir TRUE if directory
* @return unique request ID
*/
u_int16_t (*add_file_meas_request)(imv_attestation_state_t *this, int file_id,
bool is_dir);
u_int16_t (*add_file_meas_request)(imv_attestation_state_t *this,
int file_id, bool is_dir);
/**
* Returns the number of pending file/directory measurement requests
@@ -100,7 +100,7 @@ struct imv_attestation_state_t {
* @return TRUE if request ID found, FALSE otherwise
*/
bool (*check_off_file_meas_request)(imv_attestation_state_t *this,
u_int16_t id, int *file_id, bool *is_dir);
u_int16_t id, int *file_id, bool *is_dir);
/**
* Add an entry to the list of pending Function Component Evidences
@@ -108,26 +108,23 @@ struct imv_attestation_state_t {
* @param entry Functional Component Evidence Request
*/
void (*add_comp_evid_request)(imv_attestation_state_t *this,
funct_comp_evid_req_entry_t *entry);
funct_comp_evid_req_entry_t *entry);
/**
* Returns the number of pending Function Component Evidences
*
* @return number of pending evidences
* @return Number of pending evidences
*/
int (*get_comp_evid_request_count)(imv_attestation_state_t *this);
/**
* Check for presence of Component Evidence Request and remove if exists
*
* @param vendor_id Functional Component Name Vendor ID
* @param qualifier Qualifier of the requested Functional Component
* @param comp_name Name of the requested Functional Component
* @param name Name of the requested Functional Component
* @return TRUE if component request found, FALSE otherwise
*/
bool (*check_off_comp_evid_request)(imv_attestation_state_t *this,
u_int32_t vendor_id, pts_qualifier_t qualifier,
pts_ita_funct_comp_name_t comp_name);
pts_comp_func_name_t *name);
/**
* Indicates if a file measurement error occurred