aboutsummaryrefslogtreecommitdiffstats
path: root/src/libimcv/tcg/pts/tcg_pts_attr_aik.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libimcv/tcg/pts/tcg_pts_attr_aik.c')
-rw-r--r--src/libimcv/tcg/pts/tcg_pts_attr_aik.c21
1 files changed, 17 insertions, 4 deletions
diff --git a/src/libimcv/tcg/pts/tcg_pts_attr_aik.c b/src/libimcv/tcg/pts/tcg_pts_attr_aik.c
index 17a8db5d6..ad1ad7e8a 100644
--- a/src/libimcv/tcg/pts/tcg_pts_attr_aik.c
+++ b/src/libimcv/tcg/pts/tcg_pts_attr_aik.c
@@ -1,5 +1,6 @@
/*
- * Copyright (C) 2011-2012 Sansar Choinyambuu, Andreas Steffen
+ * Copyright (C) 2011-2012 Sansar Choinyambuu
+ * Copyright (C) 2011-2014 Andreas Steffen
* HSR Hochschule fuer Technik Rapperswil
*
* This program is free software; you can redistribute it and/or modify it
@@ -54,7 +55,12 @@ struct private_tcg_pts_attr_aik_t {
pen_type_t type;
/**
- * Attribute value
+ * Length of attribute value
+ */
+ size_t length;
+
+ /**
+ * Attribute value or segment
*/
chunk_t value;
@@ -124,6 +130,7 @@ METHOD(pa_tnc_attr_t, build, void,
writer->write_uint8(writer, flags);
writer->write_data (writer, aik_blob);
this->value = writer->extract_buf(writer);
+ this->length = this->value.len;
writer->destroy(writer);
free(aik_blob.ptr);
}
@@ -136,10 +143,15 @@ METHOD(pa_tnc_attr_t, process, status_t,
certificate_type_t type;
chunk_t aik_blob;
+ *offset = 0;
+
+ if (this->value.len < this->length)
+ {
+ return NEED_MORE;
+ }
if (this->value.len < PTS_AIK_SIZE)
{
DBG1(DBG_TNC, "insufficient data for Attestation Identity Key");
- *offset = 0;
return FAILED;
}
reader = bio_reader_create(this->value);
@@ -218,7 +230,7 @@ pa_tnc_attr_t *tcg_pts_attr_aik_create(certificate_t *aik)
/**
* Described in header.
*/
-pa_tnc_attr_t *tcg_pts_attr_aik_create_from_data(chunk_t data)
+pa_tnc_attr_t *tcg_pts_attr_aik_create_from_data(size_t length, chunk_t data)
{
private_tcg_pts_attr_aik_t *this;
@@ -237,6 +249,7 @@ pa_tnc_attr_t *tcg_pts_attr_aik_create_from_data(chunk_t data)
.get_aik = _get_aik,
},
.type = { PEN_TCG, TCG_PTS_AIK },
+ .length = length,
.value = chunk_clone(data),
.ref = 1,
);