Finalized State class implementations for Attestation IMV/C
authorSansar Choinyambuu <schoinya@hsr.ch>
Wed, 17 Aug 2011 14:36:11 +0000 (16:36 +0200)
committerAndreas Steffen <andreas.steffen@strongswan.org>
Thu, 8 Sep 2011 10:08:10 +0000 (12:08 +0200)
src/libimcv/plugins/imc_attestation/imc_attestation_state.c
src/libimcv/plugins/imc_attestation/imc_attestation_state.h
src/libimcv/plugins/imv_attestation/imv_attestation_state.c
src/libimcv/plugins/imv_attestation/imv_attestation_state.h

index 19a8a1b..9ea722e 100644 (file)
@@ -38,6 +38,11 @@ struct private_imc_attestation_state_t {
         * TNCCS connection state
         */
        TNC_ConnectionState state;
         * TNCCS connection state
         */
        TNC_ConnectionState state;
+       
+       /**
+        * IMC Attestation handshake state
+        */
+       imc_attestation_handshake_state_t handshake_state;
 
 };
 
 
 };
 
@@ -59,6 +64,18 @@ METHOD(imc_state_t, destroy, void,
        free(this);
 }
 
        free(this);
 }
 
+METHOD(imc_attestation_state_t, get_handshake_state, imc_attestation_handshake_state_t,
+       private_imc_attestation_state_t *this)
+{
+       return this->handshake_state;
+}
+
+METHOD(imc_attestation_state_t, set_handshake_state, void,
+       private_imc_attestation_state_t *this, imc_attestation_handshake_state_t new_state)
+{
+       this->handshake_state = new_state;
+}
+
 /**
  * Described in header.
  */
 /**
  * Described in header.
  */
@@ -73,9 +90,12 @@ imc_state_t *imc_attestation_state_create(TNC_ConnectionID connection_id)
                                .change_state = _change_state,
                                .destroy = _destroy,
                        },
                                .change_state = _change_state,
                                .destroy = _destroy,
                        },
+                       .get_handshake_state = _get_handshake_state,
+                       .set_handshake_state = _set_handshake_state,
                },
                .state = TNC_CONNECTION_STATE_CREATE,
                .connection_id = connection_id,
                },
                .state = TNC_CONNECTION_STATE_CREATE,
                .connection_id = connection_id,
+               .handshake_state = IMC_ATTESTATION_STATE_INIT,
        );
        
        return &this->public.interface;
        );
        
        return &this->public.interface;
index a615238..1bc2235 100644 (file)
 #include <library.h>
 
 typedef struct imc_attestation_state_t imc_attestation_state_t;
 #include <library.h>
 
 typedef struct imc_attestation_state_t imc_attestation_state_t;
+typedef enum imc_attestation_handshake_state_t imc_attestation_handshake_state_t;
+
+/**
+ * IMC Attestation Handshake States (state machine)
+ */
+enum imc_attestation_handshake_state_t {
+       IMC_ATTESTATION_STATE_INIT,
+       IMC_ATTESTATION_STATE_REQ_PROTO_CAP,
+       IMC_ATTESTATION_STATE_REQ_MEAS_ALGO,
+       IMC_ATTESTATION_STATE_GET_TPM_INFO,
+       IMC_ATTESTATION_STATE_GET_AIK,
+       IMC_ATTESTATION_STATE_REQ_FUNCT_COMP_EVID,
+       IMC_ATTESTATION_STATE_GEN_ATTEST_EVID,
+       IMC_ATTESTATION_STATE_REQ_FILE_METADATA,
+       IMC_ATTESTATION_STATE_REQ_FILE_MEAS,
+       IMC_ATTESTATION_STATE_REQ_IML,
+};
 
 /**
  * Internal state of an imc_attestation_t connection instance
 
 /**
  * Internal state of an imc_attestation_t connection instance
@@ -36,13 +53,26 @@ struct imc_attestation_state_t {
         * imc_state_t interface
         */
        imc_state_t interface;
         * imc_state_t interface
         */
        imc_state_t interface;
+       
+       /**
+        * get state of the handshake
+        *
+        * @return                              the handshake state of IMC
+        */
+       imc_attestation_handshake_state_t (*get_handshake_state)(imc_attestation_state_t *this);
+       
+       /**
+        * get state of the handshake
+        *
+        * @param new_state                     the handshake state of IMC
+        */
+       void (*set_handshake_state)(imc_attestation_state_t *this, imc_attestation_handshake_state_t new_state);
 };
 
 /**
  * Create an imc_attestation_state_t instance
  *
  * @param id           connection ID
 };
 
 /**
  * Create an imc_attestation_state_t instance
  *
  * @param id           connection ID
- * @param rounds       total number of IMC re-measurements
  */
 imc_state_t* imc_attestation_state_create(TNC_ConnectionID id);
 
  */
 imc_state_t* imc_attestation_state_create(TNC_ConnectionID id);
 
index 3c278a6..2c1a104 100644 (file)
@@ -39,6 +39,11 @@ struct private_imv_attestation_state_t {
         * TNCCS connection state
         */
        TNC_ConnectionState state;
         * TNCCS connection state
         */
        TNC_ConnectionState state;
+       
+       /**
+        * IMV Attestation handshake state
+        */
+       imv_attestation_handshake_state_t handshake_state;
 
        /**
         * IMV action recommendation
 
        /**
         * IMV action recommendation
@@ -148,6 +153,18 @@ METHOD(imv_state_t, destroy, void,
        free(this);
 }
 
        free(this);
 }
 
+METHOD(imv_attestation_state_t, get_handshake_state, imv_attestation_handshake_state_t,
+       private_imv_attestation_state_t *this)
+{
+       return this->handshake_state;
+}
+
+METHOD(imv_attestation_state_t, set_handshake_state, void,
+       private_imv_attestation_state_t *this, imv_attestation_handshake_state_t new_state)
+{
+       this->handshake_state = new_state;
+}
+
 /**
  * Described in header.
  */
 /**
  * Described in header.
  */
@@ -165,13 +182,14 @@ imv_state_t *imv_attestation_state_create(TNC_ConnectionID connection_id)
                                .get_reason_string = _get_reason_string,
                                .destroy = _destroy,
                        },
                                .get_reason_string = _get_reason_string,
                                .destroy = _destroy,
                        },
+                       .get_handshake_state = _get_handshake_state,
+                       .set_handshake_state = _set_handshake_state,
                },
                .state = TNC_CONNECTION_STATE_CREATE,
                },
                .state = TNC_CONNECTION_STATE_CREATE,
+               .handshake_state = IMC_ATTESTATION_STATE_INIT,
                .rec = TNC_IMV_ACTION_RECOMMENDATION_NO_RECOMMENDATION,
                .eval = TNC_IMV_EVALUATION_RESULT_DONT_KNOW,
        );
        
        return &this->public.interface;
 }
                .rec = TNC_IMV_ACTION_RECOMMENDATION_NO_RECOMMENDATION,
                .eval = TNC_IMV_EVALUATION_RESULT_DONT_KNOW,
        );
        
        return &this->public.interface;
 }
-
-
index b289884..94307fd 100644 (file)
 #include <library.h>
 
 typedef struct imv_attestation_state_t imv_attestation_state_t;
 #include <library.h>
 
 typedef struct imv_attestation_state_t imv_attestation_state_t;
+typedef enum imv_attestation_handshake_state_t imv_attestation_handshake_state_t;
+
+/**
+ * IMV Attestation Handshake States (state machine)
+ */
+enum imv_attestation_handshake_state_t {
+       IMV_ATTESTATION_STATE_INIT,
+       IMV_ATTESTATION_STATE_PROTO_CAP,
+       IMV_ATTESTATION_STATE_MEAS_ALGO,
+       IMV_ATTESTATION_STATE_TPM_INFO,
+       IMV_ATTESTATION_STATE_AIK,
+       IMV_ATTESTATION_STATE_SIMPLE_COMP_EVID,
+       IMV_ATTESTATION_STATE_SIMPLE_EVID_FINAL,
+       IMV_ATTESTATION_STATE_FILE_METADATA,
+       IMV_ATTESTATION_STATE_FILE_MEAS,
+       IMV_ATTESTATION_STATE_IML,
+};
 
 /**
  * Internal state of an imv_attestation_t connection instance
 
 /**
  * Internal state of an imv_attestation_t connection instance
@@ -38,8 +55,18 @@ struct imv_attestation_state_t {
        imv_state_t interface;
 
        /**
        imv_state_t interface;
 
        /**
-        * Add any setters and getters here
+        * get state of the handshake
+        *
+        * @return                              the handshake state of IMV
+        */
+       imv_attestation_handshake_state_t (*get_handshake_state)(imv_attestation_state_t *this);
+       
+       /**
+        * get state of the handshake
+        *
+        * @param new_state                     the handshake state of IMV
         */
         */
+       void (*set_handshake_state)(imv_attestation_state_t *this, imv_attestation_handshake_state_t new_state);
 };
 
 /**
 };
 
 /**