Refactoring to tpm_tss_quote_info object
This commit is contained in:
@@ -1,7 +1,8 @@
|
||||
AM_CPPFLAGS = \
|
||||
-I$(top_srcdir)/src/libstrongswan \
|
||||
-I$(top_srcdir)/src/libtncif \
|
||||
-I$(top_srcdir)/src/libimcv
|
||||
-I$(top_srcdir)/src/libimcv \
|
||||
-I$(top_srcdir)/src/libtpmtss
|
||||
|
||||
AM_CFLAGS = \
|
||||
$(PLUGIN_CFLAGS)
|
||||
|
||||
@@ -421,10 +421,10 @@ bool imc_attestation_process(pa_tnc_attr_t *attr, imc_msg_t *msg,
|
||||
}
|
||||
case TCG_PTS_GEN_ATTEST_EVID:
|
||||
{
|
||||
pts_simple_evid_final_flag_t flags;
|
||||
pts_meas_algorithms_t comp_hash_algorithm;
|
||||
pts_comp_evidence_t *evid;
|
||||
chunk_t pcr_composite, quote_sig;
|
||||
tpm_quote_mode_t quote_mode;
|
||||
tpm_tss_quote_info_t *quote_info;
|
||||
chunk_t quote_sig;
|
||||
bool use_quote2, use_version_info;
|
||||
|
||||
/* Send cached Component Evidence entries */
|
||||
@@ -440,22 +440,18 @@ bool imc_attestation_process(pa_tnc_attr_t *attr, imc_msg_t *msg,
|
||||
use_version_info = lib->settings->get_bool(lib->settings,
|
||||
"%s.plugins.imc-attestation.use_version_info",
|
||||
FALSE, lib->ns);
|
||||
if (!pts->quote_tpm(pts, use_quote2, use_version_info,
|
||||
&pcr_composite, "e_sig))
|
||||
quote_mode = use_quote2 ? (use_version_info ?
|
||||
TPM_QUOTE2_VERSION_INFO :
|
||||
TPM_QUOTE2) :
|
||||
TPM_QUOTE;
|
||||
|
||||
if (!pts->quote(pts, "e_mode, "e_info, "e_sig))
|
||||
{
|
||||
DBG1(DBG_IMC, "error occurred during TPM quote operation");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* Send Simple Evidence Final attribute */
|
||||
flags = use_quote2 ? (use_version_info ?
|
||||
PTS_SIMPLE_EVID_FINAL_QUOTE_INFO2_CAP_VER :
|
||||
PTS_SIMPLE_EVID_FINAL_QUOTE_INFO2) :
|
||||
PTS_SIMPLE_EVID_FINAL_QUOTE_INFO;
|
||||
comp_hash_algorithm = PTS_MEAS_ALGO_SHA1;
|
||||
|
||||
attr = tcg_pts_attr_simple_evid_final_create(flags,
|
||||
comp_hash_algorithm, pcr_composite, quote_sig);
|
||||
attr = tcg_pts_attr_simple_evid_final_create(quote_info, quote_sig);
|
||||
msg->add_attribute(msg, attr);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ AM_CPPFLAGS = \
|
||||
-I$(top_srcdir)/src/libstrongswan \
|
||||
-I$(top_srcdir)/src/libtncif \
|
||||
-I$(top_srcdir)/src/libimcv \
|
||||
-I$(top_srcdir)/src/libtpmtss \
|
||||
-DPLUGINS=\""${attest_plugins}\""
|
||||
|
||||
AM_CFLAGS = \
|
||||
@@ -11,6 +12,7 @@ imcv_LTLIBRARIES = imv-attestation.la
|
||||
|
||||
imv_attestation_la_LIBADD = \
|
||||
$(top_builddir)/src/libimcv/libimcv.la \
|
||||
$(top_builddir)/src/libtpmtss/libtpmtss.la \
|
||||
$(top_builddir)/src/libstrongswan/libstrongswan.la
|
||||
|
||||
imv_attestation_la_SOURCES = imv_attestation.c \
|
||||
@@ -27,6 +29,7 @@ attest_SOURCES = attest.c \
|
||||
attest_db.h attest_db.c
|
||||
attest_LDADD = \
|
||||
$(top_builddir)/src/libimcv/libimcv.la \
|
||||
$(top_builddir)/src/libtpmtss/libtpmtss.la \
|
||||
$(top_builddir)/src/libstrongswan/libstrongswan.la
|
||||
attest.o : $(top_builddir)/config.status
|
||||
|
||||
|
||||
@@ -418,45 +418,31 @@ bool imv_attestation_process(pa_tnc_attr_t *attr, imv_msg_t *out_msg,
|
||||
case TCG_PTS_SIMPLE_EVID_FINAL:
|
||||
{
|
||||
tcg_pts_attr_simple_evid_final_t *attr_cast;
|
||||
uint8_t flags;
|
||||
pts_meas_algorithms_t comp_hash_algorithm;
|
||||
chunk_t pcr_comp, tpm_quote_sig, evid_sig;
|
||||
chunk_t pcr_composite, quote_info, result_buf;
|
||||
tpm_tss_quote_info_t *quote_info;
|
||||
chunk_t quoted = chunk_empty, quote_sig, evid_sig, result_buf;
|
||||
imv_workitem_t *workitem;
|
||||
imv_reason_string_t *reason_string;
|
||||
hash_algorithm_t digest_alg;
|
||||
enumerator_t *enumerator;
|
||||
bool use_quote2, use_ver_info;
|
||||
bio_writer_t *result;
|
||||
|
||||
attr_cast = (tcg_pts_attr_simple_evid_final_t*)attr;
|
||||
flags = attr_cast->get_quote_info(attr_cast, &comp_hash_algorithm,
|
||||
&pcr_comp, &tpm_quote_sig);
|
||||
attr_cast->get_quote_info(attr_cast, "e_info, "e_sig);
|
||||
|
||||
if (flags != PTS_SIMPLE_EVID_FINAL_NO)
|
||||
if (quote_info->get_quote_mode(quote_info) != TPM_QUOTE_NONE)
|
||||
{
|
||||
use_quote2 = (flags == PTS_SIMPLE_EVID_FINAL_QUOTE_INFO2 ||
|
||||
flags == PTS_SIMPLE_EVID_FINAL_QUOTE_INFO2_CAP_VER);
|
||||
use_ver_info = (flags == PTS_SIMPLE_EVID_FINAL_QUOTE_INFO2_CAP_VER);
|
||||
|
||||
/* Construct PCR Composite and TPM Quote Info structures */
|
||||
if (!pts->get_quote_info(pts, use_quote2, use_ver_info,
|
||||
comp_hash_algorithm, &pcr_composite, "e_info))
|
||||
if (!pts->get_quote(pts, quote_info, "ed))
|
||||
{
|
||||
DBG1(DBG_IMV, "unable to construct TPM Quote Info");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (!chunk_equals_const(pcr_comp, pcr_composite))
|
||||
{
|
||||
DBG1(DBG_IMV, "received PCR Composite does not match "
|
||||
"constructed one");
|
||||
DBG1(DBG_IMV, "unable to construct TPM Quote Info digest");
|
||||
attestation_state->set_measurement_error(attestation_state,
|
||||
IMV_ATTESTATION_ERROR_TPM_QUOTE_FAIL);
|
||||
goto quote_error;
|
||||
}
|
||||
DBG2(DBG_IMV, "received PCR Composite matches constructed one");
|
||||
digest_alg = quote_info->get_pcr_digest_alg(quote_info);
|
||||
|
||||
if (!pts->verify_quote_signature(pts, quote_info, tpm_quote_sig))
|
||||
if (!pts->verify_quote_signature(pts, digest_alg, quoted,
|
||||
quote_sig))
|
||||
{
|
||||
attestation_state->set_measurement_error(attestation_state,
|
||||
IMV_ATTESTATION_ERROR_TPM_QUOTE_FAIL);
|
||||
@@ -465,8 +451,7 @@ bool imv_attestation_process(pa_tnc_attr_t *attr, imv_msg_t *out_msg,
|
||||
DBG2(DBG_IMV, "TPM Quote Info signature verification successful");
|
||||
|
||||
quote_error:
|
||||
free(pcr_composite.ptr);
|
||||
free(quote_info.ptr);
|
||||
chunk_free("ed);
|
||||
|
||||
/**
|
||||
* Finalize any pending measurement registrations and check
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
AM_CPPFLAGS = \
|
||||
-I$(top_srcdir)/src/libstrongswan \
|
||||
-I$(top_srcdir)/src/libtncif \
|
||||
-I$(top_srcdir)/src/libtpmtss \
|
||||
-I$(top_srcdir)/src/libimcv
|
||||
|
||||
AM_CFLAGS = \
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
AM_CPPFLAGS = \
|
||||
-I$(top_srcdir)/src/libstrongswan \
|
||||
-I$(top_srcdir)/src/libtncif \
|
||||
-I$(top_srcdir)/src/libimcv
|
||||
-I$(top_srcdir)/src/libimcv \
|
||||
-I$(top_srcdir)/src/libtpmtss
|
||||
|
||||
AM_CFLAGS = \
|
||||
$(PLUGIN_CFLAGS)
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
AM_CPPFLAGS = \
|
||||
-I$(top_srcdir)/src/libstrongswan \
|
||||
-I$(top_srcdir)/src/libtncif \
|
||||
-I$(top_srcdir)/src/libimcv
|
||||
-I$(top_srcdir)/src/libimcv \
|
||||
-I$(top_srcdir)/src/libtpmtss
|
||||
|
||||
AM_CFLAGS = \
|
||||
$(PLUGIN_CFLAGS)
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
AM_CPPFLAGS = \
|
||||
-I$(top_srcdir)/src/libstrongswan \
|
||||
-I$(top_srcdir)/src/libtncif \
|
||||
-I$(top_srcdir)/src/libtpmtss \
|
||||
-I$(top_srcdir)/src/libimcv
|
||||
|
||||
AM_CFLAGS = \
|
||||
|
||||
Reference in New Issue
Block a user