Replaced Tag File Path by Instance ID field
This update reflects the latest changes in the TCG TNC SWID Messages and Attributes for IF-M specification
This commit is contained in:
@@ -188,7 +188,7 @@ static bool add_swid_inventory(imc_state_t *state, imc_msg_t *msg,
|
||||
{
|
||||
tcg_swid_attr_tag_inv_t *swid_attr;
|
||||
swid_tag_t *tag;
|
||||
chunk_t encoding, tag_file_path;
|
||||
chunk_t encoding, instance_id;
|
||||
|
||||
/* At least one TCG Tag Inventory attribute is sent */
|
||||
attr_size = PA_TNC_ATTR_HEADER_SIZE + TCG_SWID_TAG_INV_MIN_SIZE;
|
||||
@@ -197,9 +197,9 @@ static bool add_swid_inventory(imc_state_t *state, imc_msg_t *msg,
|
||||
enumerator = swid_inventory->create_enumerator(swid_inventory);
|
||||
while (enumerator->enumerate(enumerator, &tag))
|
||||
{
|
||||
tag_file_path = tag->get_tag_file_path(tag);
|
||||
instance_id = tag->get_instance_id(tag);
|
||||
encoding = tag->get_encoding(tag);
|
||||
entry_size = 2 + tag_file_path.len + 4 + encoding.len;
|
||||
entry_size = 2 + instance_id.len + 4 + encoding.len;
|
||||
|
||||
/* Check for oversize tags that cannot be transported */
|
||||
if (PA_TNC_ATTR_HEADER_SIZE + TCG_SWID_TAG_INV_MIN_SIZE +
|
||||
@@ -241,7 +241,7 @@ static bool add_swid_inventory(imc_state_t *state, imc_msg_t *msg,
|
||||
{
|
||||
tcg_swid_attr_tag_id_inv_t *swid_id_attr;
|
||||
swid_tag_id_t *tag_id;
|
||||
chunk_t tag_creator, unique_sw_id, tag_file_path;
|
||||
chunk_t tag_creator, unique_sw_id, instance_id;
|
||||
|
||||
/* At least one TCG Tag ID Inventory attribute is sent */
|
||||
attr_size = PA_TNC_ATTR_HEADER_SIZE + TCG_SWID_TAG_ID_INV_MIN_SIZE;
|
||||
@@ -252,9 +252,9 @@ static bool add_swid_inventory(imc_state_t *state, imc_msg_t *msg,
|
||||
while (enumerator->enumerate(enumerator, &tag_id))
|
||||
{
|
||||
tag_creator = tag_id->get_tag_creator(tag_id);
|
||||
unique_sw_id = tag_id->get_unique_sw_id(tag_id, &tag_file_path);
|
||||
unique_sw_id = tag_id->get_unique_sw_id(tag_id, &instance_id);
|
||||
entry_size = 2 + tag_creator.len + 2 + unique_sw_id.len +
|
||||
2 + tag_file_path.len;
|
||||
2 + instance_id.len;
|
||||
|
||||
if (attr_size + entry_size > max_attr_size)
|
||||
{
|
||||
|
||||
@@ -34,9 +34,9 @@ struct private_swid_tag_t {
|
||||
chunk_t encoding;
|
||||
|
||||
/**
|
||||
* Optional Tag File Path
|
||||
* Optional Tag Identifier Instance ID
|
||||
*/
|
||||
chunk_t tag_file_path;
|
||||
chunk_t instance_id;
|
||||
|
||||
/**
|
||||
* Reference count
|
||||
@@ -50,10 +50,10 @@ METHOD(swid_tag_t, get_encoding, chunk_t,
|
||||
return this->encoding;
|
||||
}
|
||||
|
||||
METHOD(swid_tag_t, get_tag_file_path, chunk_t,
|
||||
METHOD(swid_tag_t, get_instance_id, chunk_t,
|
||||
private_swid_tag_t *this)
|
||||
{
|
||||
return this->tag_file_path;
|
||||
return this->instance_id;
|
||||
}
|
||||
|
||||
METHOD(swid_tag_t, get_ref, swid_tag_t*,
|
||||
@@ -69,7 +69,7 @@ METHOD(swid_tag_t, destroy, void,
|
||||
if (ref_put(&this->ref))
|
||||
{
|
||||
free(this->encoding.ptr);
|
||||
free(this->tag_file_path.ptr);
|
||||
free(this->instance_id.ptr);
|
||||
free(this);
|
||||
}
|
||||
}
|
||||
@@ -77,14 +77,14 @@ METHOD(swid_tag_t, destroy, void,
|
||||
/**
|
||||
* See header
|
||||
*/
|
||||
swid_tag_t *swid_tag_create(chunk_t encoding, chunk_t tag_file_path)
|
||||
swid_tag_t *swid_tag_create(chunk_t encoding, chunk_t instance_id)
|
||||
{
|
||||
private_swid_tag_t *this;
|
||||
|
||||
INIT(this,
|
||||
.public = {
|
||||
.get_encoding = _get_encoding,
|
||||
.get_tag_file_path = _get_tag_file_path,
|
||||
.get_instance_id = _get_instance_id,
|
||||
.get_ref = _get_ref,
|
||||
.destroy = _destroy,
|
||||
},
|
||||
@@ -92,9 +92,9 @@ swid_tag_t *swid_tag_create(chunk_t encoding, chunk_t tag_file_path)
|
||||
.ref = 1,
|
||||
);
|
||||
|
||||
if (tag_file_path.len > 0)
|
||||
if (instance_id.len > 0)
|
||||
{
|
||||
this->tag_file_path = chunk_clone(tag_file_path);
|
||||
this->instance_id = chunk_clone(instance_id);
|
||||
}
|
||||
|
||||
return &this->public;
|
||||
|
||||
@@ -39,11 +39,11 @@ struct swid_tag_t {
|
||||
chunk_t (*get_encoding)(swid_tag_t *this);
|
||||
|
||||
/**
|
||||
* Get th Optional Tag File Path
|
||||
* Get the optional Tag Identifier Instance ID
|
||||
*
|
||||
* @return Optional Tag File Path
|
||||
* @return Optional Tag Identifier Instance ID
|
||||
*/
|
||||
chunk_t (*get_tag_file_path)(swid_tag_t *this);
|
||||
chunk_t (*get_instance_id)(swid_tag_t *this);
|
||||
|
||||
/**
|
||||
* Get a new reference to the swid_tag object
|
||||
@@ -63,8 +63,8 @@ struct swid_tag_t {
|
||||
* Creates a swid_tag_t object
|
||||
*
|
||||
* @param encoding XML encoding of SWID tag
|
||||
* @param tag_file_path Tag File Path or empty chunk
|
||||
* @param instance_id Tag Identifier Instance ID or empty chunk
|
||||
*/
|
||||
swid_tag_t* swid_tag_create(chunk_t encoding, chunk_t tag_file_path);
|
||||
swid_tag_t* swid_tag_create(chunk_t encoding, chunk_t instance_id);
|
||||
|
||||
#endif /** SWID_TAG_H_ @}*/
|
||||
|
||||
@@ -39,9 +39,9 @@ struct private_swid_tag_id_t {
|
||||
chunk_t unique_sw_id;
|
||||
|
||||
/**
|
||||
* Tag File Path
|
||||
* Optional Tag Identifier Instance ID
|
||||
*/
|
||||
chunk_t tag_file_path;
|
||||
chunk_t instance_id;
|
||||
|
||||
/**
|
||||
* Reference count
|
||||
@@ -56,11 +56,11 @@ METHOD(swid_tag_id_t, get_tag_creator, chunk_t,
|
||||
}
|
||||
|
||||
METHOD(swid_tag_id_t, get_unique_sw_id, chunk_t,
|
||||
private_swid_tag_id_t *this, chunk_t *tag_file_path)
|
||||
private_swid_tag_id_t *this, chunk_t *instance_id)
|
||||
{
|
||||
if (tag_file_path)
|
||||
if (instance_id)
|
||||
{
|
||||
*tag_file_path = this->tag_file_path;
|
||||
*instance_id = this->instance_id;
|
||||
}
|
||||
return this->unique_sw_id;
|
||||
}
|
||||
@@ -79,7 +79,7 @@ METHOD(swid_tag_id_t, destroy, void,
|
||||
{
|
||||
free(this->tag_creator.ptr);
|
||||
free(this->unique_sw_id.ptr);
|
||||
free(this->tag_file_path.ptr);
|
||||
free(this->instance_id.ptr);
|
||||
free(this);
|
||||
}
|
||||
}
|
||||
@@ -88,7 +88,7 @@ METHOD(swid_tag_id_t, destroy, void,
|
||||
* See header
|
||||
*/
|
||||
swid_tag_id_t *swid_tag_id_create(chunk_t tag_creator, chunk_t unique_sw_id,
|
||||
chunk_t tag_file_path)
|
||||
chunk_t instance_id)
|
||||
{
|
||||
private_swid_tag_id_t *this;
|
||||
|
||||
@@ -104,9 +104,9 @@ swid_tag_id_t *swid_tag_id_create(chunk_t tag_creator, chunk_t unique_sw_id,
|
||||
.ref = 1,
|
||||
);
|
||||
|
||||
if (tag_file_path.len > 0)
|
||||
if (instance_id.len > 0)
|
||||
{
|
||||
this->tag_file_path = chunk_clone(tag_file_path);
|
||||
this->instance_id = chunk_clone(instance_id);
|
||||
}
|
||||
|
||||
return &this->public;
|
||||
|
||||
@@ -41,10 +41,10 @@ struct swid_tag_id_t {
|
||||
/**
|
||||
* Get the Unique Software ID and optional Tag File Path
|
||||
*
|
||||
* @param Optional Tag File Path
|
||||
* @param instance_id Optional Tag Identifier Instance ID
|
||||
* @return Unique Software ID
|
||||
*/
|
||||
chunk_t (*get_unique_sw_id)(swid_tag_id_t *this, chunk_t *tag_file_path);
|
||||
chunk_t (*get_unique_sw_id)(swid_tag_id_t *this, chunk_t *instance_id);
|
||||
|
||||
/**
|
||||
* Get a new reference to the swid_tag_id object
|
||||
@@ -65,9 +65,9 @@ struct swid_tag_id_t {
|
||||
*
|
||||
* @param tag_creator Tag Creator
|
||||
* @param unique_sw_id Unique Software ID
|
||||
* @param tag_file_path Tag File Path or empty chunk
|
||||
* @param instance_id Tag Identifier Instance ID or empty chunk
|
||||
*/
|
||||
swid_tag_id_t* swid_tag_id_create(chunk_t tag_creator, chunk_t unique_sw_id,
|
||||
chunk_t tag_file_path);
|
||||
chunk_t instance_id);
|
||||
|
||||
#endif /** SWID_TAG_ID_H_ @}*/
|
||||
|
||||
@@ -42,7 +42,7 @@ typedef struct private_tcg_swid_attr_tag_id_inv_t private_tcg_swid_attr_tag_id_i
|
||||
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
* | Unique Software ID Length |Unique Software ID (var length)|
|
||||
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
* | Tag File Path Length | Tag File Path (var. length) |
|
||||
* | Instance ID Length | Instance ID (variable length) |
|
||||
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
*/
|
||||
|
||||
@@ -128,7 +128,7 @@ METHOD(pa_tnc_attr_t, build, void,
|
||||
{
|
||||
bio_writer_t *writer;
|
||||
swid_tag_id_t *tag_id;
|
||||
chunk_t tag_creator, unique_sw_id, tag_file_path;
|
||||
chunk_t tag_creator, unique_sw_id, instance_id;
|
||||
enumerator_t *enumerator;
|
||||
|
||||
if (this->value.ptr)
|
||||
@@ -147,10 +147,10 @@ METHOD(pa_tnc_attr_t, build, void,
|
||||
while (enumerator->enumerate(enumerator, &tag_id))
|
||||
{
|
||||
tag_creator = tag_id->get_tag_creator(tag_id);
|
||||
unique_sw_id = tag_id->get_unique_sw_id(tag_id, &tag_file_path);
|
||||
unique_sw_id = tag_id->get_unique_sw_id(tag_id, &instance_id);
|
||||
writer->write_data16(writer, tag_creator);
|
||||
writer->write_data16(writer, unique_sw_id);
|
||||
writer->write_data16(writer, tag_file_path);
|
||||
writer->write_data16(writer, instance_id);
|
||||
}
|
||||
enumerator->destroy(enumerator);
|
||||
|
||||
@@ -164,7 +164,7 @@ METHOD(pa_tnc_attr_t, process, status_t,
|
||||
bio_reader_t *reader;
|
||||
uint32_t tag_id_count;
|
||||
uint8_t reserved;
|
||||
chunk_t tag_creator, unique_sw_id, tag_file_path;
|
||||
chunk_t tag_creator, unique_sw_id, instance_id;
|
||||
swid_tag_id_t *tag_id;
|
||||
|
||||
if (this->value.len < TCG_SWID_TAG_ID_INV_MIN_SIZE)
|
||||
@@ -198,14 +198,14 @@ METHOD(pa_tnc_attr_t, process, status_t,
|
||||
}
|
||||
*offset += 2 + unique_sw_id.len;
|
||||
|
||||
if (!reader->read_data16(reader, &tag_file_path))
|
||||
if (!reader->read_data16(reader, &instance_id))
|
||||
{
|
||||
DBG1(DBG_TNC, "insufficient data for Tag File Path");
|
||||
DBG1(DBG_TNC, "insufficient data for Instance ID");
|
||||
return FAILED;
|
||||
}
|
||||
*offset += 2 + tag_file_path.len;
|
||||
*offset += 2 + instance_id.len;
|
||||
|
||||
tag_id = swid_tag_id_create(tag_creator, unique_sw_id, tag_file_path);
|
||||
tag_id = swid_tag_id_create(tag_creator, unique_sw_id, instance_id);
|
||||
this->inventory->add(this->inventory, tag_id);
|
||||
}
|
||||
reader->destroy(reader);
|
||||
|
||||
@@ -38,7 +38,7 @@ typedef struct private_tcg_swid_attr_tag_inv_t private_tcg_swid_attr_tag_inv_t;
|
||||
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
* | Last EID |
|
||||
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
* | Tag File Path Length | Tag File Path (var length) |
|
||||
* | Instance ID Length | Instance ID (var. length) |
|
||||
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
* | Tag Length |
|
||||
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
@@ -145,7 +145,7 @@ METHOD(pa_tnc_attr_t, build, void,
|
||||
enumerator = this->inventory->create_enumerator(this->inventory);
|
||||
while (enumerator->enumerate(enumerator, &tag))
|
||||
{
|
||||
writer->write_data16(writer, tag->get_tag_file_path(tag));
|
||||
writer->write_data16(writer, tag->get_instance_id(tag));
|
||||
writer->write_data32(writer, tag->get_encoding(tag));
|
||||
}
|
||||
enumerator->destroy(enumerator);
|
||||
@@ -160,7 +160,7 @@ METHOD(pa_tnc_attr_t, process, status_t,
|
||||
bio_reader_t *reader;
|
||||
uint32_t tag_count;
|
||||
uint8_t reserved;
|
||||
chunk_t tag_encoding, tag_file_path;
|
||||
chunk_t tag_encoding, instance_id;
|
||||
swid_tag_t *tag;
|
||||
|
||||
if (this->value.len < TCG_SWID_TAG_INV_MIN_SIZE)
|
||||
@@ -180,12 +180,12 @@ METHOD(pa_tnc_attr_t, process, status_t,
|
||||
|
||||
while (tag_count--)
|
||||
{
|
||||
if (!reader->read_data16(reader, &tag_file_path))
|
||||
if (!reader->read_data16(reader, &instance_id))
|
||||
{
|
||||
DBG1(DBG_TNC, "insufficient data for Tag File Path");
|
||||
DBG1(DBG_TNC, "insufficient data for Instance ID");
|
||||
return FAILED;
|
||||
}
|
||||
*offset += 2 + tag_file_path.len;
|
||||
*offset += 2 + instance_id.len;
|
||||
|
||||
if (!reader->read_data32(reader, &tag_encoding))
|
||||
{
|
||||
@@ -194,7 +194,7 @@ METHOD(pa_tnc_attr_t, process, status_t,
|
||||
}
|
||||
*offset += 4 + tag_encoding.len;
|
||||
|
||||
tag = swid_tag_create(tag_encoding, tag_file_path);
|
||||
tag = swid_tag_create(tag_encoding, instance_id);
|
||||
this->inventory->add(this->inventory, tag);
|
||||
}
|
||||
reader->destroy(reader);
|
||||
|
||||
Reference in New Issue
Block a user