From: Sansar Choinyambuu Date: Wed, 17 Aug 2011 14:36:11 +0000 (+0200) Subject: Finalized State class implementations for Attestation IMV/C X-Git-Tag: 4.6.0~494 X-Git-Url: https://git.strongswan.org/?p=strongswan.git;a=commitdiff_plain;h=12c0a261cc39e3e92bcc707d70644560e59fb791;hp=887cd7d2533006e5af15a765c3332c34b1271708 Finalized State class implementations for Attestation IMV/C --- diff --git a/src/libimcv/plugins/imc_attestation/imc_attestation_state.c b/src/libimcv/plugins/imc_attestation/imc_attestation_state.c index 19a8a1b..9ea722e 100644 --- a/src/libimcv/plugins/imc_attestation/imc_attestation_state.c +++ b/src/libimcv/plugins/imc_attestation/imc_attestation_state.c @@ -38,6 +38,11 @@ struct private_imc_attestation_state_t { * 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); } +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. */ @@ -73,9 +90,12 @@ imc_state_t *imc_attestation_state_create(TNC_ConnectionID connection_id) .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, + .handshake_state = IMC_ATTESTATION_STATE_INIT, ); return &this->public.interface; diff --git a/src/libimcv/plugins/imc_attestation/imc_attestation_state.h b/src/libimcv/plugins/imc_attestation/imc_attestation_state.h index a615238..1bc2235 100644 --- a/src/libimcv/plugins/imc_attestation/imc_attestation_state.h +++ b/src/libimcv/plugins/imc_attestation/imc_attestation_state.h @@ -26,6 +26,23 @@ #include 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 @@ -36,13 +53,26 @@ struct imc_attestation_state_t { * 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 - * @param rounds total number of IMC re-measurements */ imc_state_t* imc_attestation_state_create(TNC_ConnectionID id); diff --git a/src/libimcv/plugins/imv_attestation/imv_attestation_state.c b/src/libimcv/plugins/imv_attestation/imv_attestation_state.c index 3c278a6..2c1a104 100644 --- a/src/libimcv/plugins/imv_attestation/imv_attestation_state.c +++ b/src/libimcv/plugins/imv_attestation/imv_attestation_state.c @@ -39,6 +39,11 @@ struct private_imv_attestation_state_t { * TNCCS connection state */ TNC_ConnectionState state; + + /** + * IMV Attestation handshake state + */ + imv_attestation_handshake_state_t handshake_state; /** * IMV action recommendation @@ -148,6 +153,18 @@ METHOD(imv_state_t, destroy, void, 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. */ @@ -165,13 +182,14 @@ imv_state_t *imv_attestation_state_create(TNC_ConnectionID connection_id) .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, + .handshake_state = IMC_ATTESTATION_STATE_INIT, .rec = TNC_IMV_ACTION_RECOMMENDATION_NO_RECOMMENDATION, .eval = TNC_IMV_EVALUATION_RESULT_DONT_KNOW, ); return &this->public.interface; } - - diff --git a/src/libimcv/plugins/imv_attestation/imv_attestation_state.h b/src/libimcv/plugins/imv_attestation/imv_attestation_state.h index b289884..94307fd 100644 --- a/src/libimcv/plugins/imv_attestation/imv_attestation_state.h +++ b/src/libimcv/plugins/imv_attestation/imv_attestation_state.h @@ -26,6 +26,23 @@ #include 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 @@ -38,8 +55,18 @@ struct imv_attestation_state_t { 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); }; /**