wait for the finalization of the Functional Component measurements
authorAndreas Steffen <andreas.steffen@strongswan.org>
Fri, 13 Jul 2012 08:06:43 +0000 (10:06 +0200)
committerAndreas Steffen <andreas.steffen@strongswan.org>
Fri, 13 Jul 2012 08:06:43 +0000 (10:06 +0200)
src/libpts/plugins/imv_attestation/imv_attestation_build.c
src/libpts/plugins/imv_attestation/imv_attestation_state.c
src/libpts/plugins/imv_attestation/imv_attestation_state.h

index 4f2cc1e..a44e933 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011 Sansar Choinyambuu
+ * Copyright (C) 2011-2012 Sansar Choinyambuu, Andreas Steffen
  * HSR Hochschule fuer Technik Rapperswil
  *
  * This program is free software; you can redistribute it and/or modify it
@@ -290,8 +290,11 @@ bool imv_attestation_build(linked_list_t *attr_list,
                        break;
                }
                case IMV_ATTESTATION_STATE_EVID_FINAL:
-                       attestation_state->set_handshake_state(attestation_state,
+                       if (attestation_state->components_finalized(attestation_state))
+                       {
+                               attestation_state->set_handshake_state(attestation_state,
                                                                                IMV_ATTESTATION_STATE_END);
+                       }
                        break;
                case IMV_ATTESTATION_STATE_END:
                        break;
index 00ec146..a093e63 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011 Sansar Choinyambuu
+ * Copyright (C) 2011-2012 Sansar Choinyambuu, Andreas Steffen
  * HSR Hochschule fuer Technik Rapperswil
  *
  * This program is free software; you can redistribute it and/or modify it
@@ -360,6 +360,12 @@ METHOD(imv_attestation_state_t, finalize_components, void,
        }
 }
 
+METHOD(imv_attestation_state_t, components_finalized, bool,
+       private_imv_attestation_state_t *this)
+{
+       return this->components->get_count(this->components) == 0;
+}
+
 /**
  * Described in header.
  */
@@ -392,6 +398,7 @@ imv_state_t *imv_attestation_state_create(TNC_ConnectionID connection_id)
                        .add_component = _add_component,
                        .get_component = _get_component,
                        .finalize_components = _finalize_components,
+                       .components_finalized = _components_finalized,
                        .get_measurement_error = _get_measurement_error,
                        .set_measurement_error = _set_measurement_error,
                },
index 3e08f46..1fd983b 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011 Sansar Choinyambuu
+ * Copyright (C) 2011-2012 Sansar Choinyambuu, Andreas Steffen
  * HSR Hochschule fuer Technik Rapperswil
  *
  * This program is free software; you can redistribute it and/or modify it
@@ -127,6 +127,11 @@ struct imv_attestation_state_t {
        void (*finalize_components)(imv_attestation_state_t *this);
 
        /**
+        * Have the Functional Component measurements been finalized?
+        */
+       bool (*components_finalized)(imv_attestation_state_t *this);
+
+       /**
         * Indicates if a file measurement error occurred
         *
         * @return                                      TRUE in case of measurement error