Finalized State class implementations for Attestation IMV/C
This commit is contained in:
committed by
Andreas Steffen
parent
887cd7d253
commit
12c0a261cc
@@ -39,6 +39,11 @@ struct private_imc_attestation_state_t {
|
|||||||
*/
|
*/
|
||||||
TNC_ConnectionState state;
|
TNC_ConnectionState state;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* IMC Attestation handshake state
|
||||||
|
*/
|
||||||
|
imc_attestation_handshake_state_t handshake_state;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
METHOD(imc_state_t, get_connection_id, TNC_ConnectionID,
|
METHOD(imc_state_t, get_connection_id, TNC_ConnectionID,
|
||||||
@@ -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,
|
.change_state = _change_state,
|
||||||
.destroy = _destroy,
|
.destroy = _destroy,
|
||||||
},
|
},
|
||||||
|
.get_handshake_state = _get_handshake_state,
|
||||||
|
.set_handshake_state = _set_handshake_state,
|
||||||
},
|
},
|
||||||
.state = TNC_CONNECTION_STATE_CREATE,
|
.state = TNC_CONNECTION_STATE_CREATE,
|
||||||
.connection_id = connection_id,
|
.connection_id = connection_id,
|
||||||
|
.handshake_state = IMC_ATTESTATION_STATE_INIT,
|
||||||
);
|
);
|
||||||
|
|
||||||
return &this->public.interface;
|
return &this->public.interface;
|
||||||
|
|||||||
@@ -26,6 +26,23 @@
|
|||||||
#include <library.h>
|
#include <library.h>
|
||||||
|
|
||||||
typedef struct imc_attestation_state_t imc_attestation_state_t;
|
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
|
* Create an imc_attestation_state_t instance
|
||||||
*
|
*
|
||||||
* @param id connection ID
|
* @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);
|
||||||
|
|
||||||
|
|||||||
@@ -40,6 +40,11 @@ struct private_imv_attestation_state_t {
|
|||||||
*/
|
*/
|
||||||
TNC_ConnectionState 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,
|
.get_reason_string = _get_reason_string,
|
||||||
.destroy = _destroy,
|
.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,
|
.rec = TNC_IMV_ACTION_RECOMMENDATION_NO_RECOMMENDATION,
|
||||||
.eval = TNC_IMV_EVALUATION_RESULT_DONT_KNOW,
|
.eval = TNC_IMV_EVALUATION_RESULT_DONT_KNOW,
|
||||||
);
|
);
|
||||||
|
|
||||||
return &this->public.interface;
|
return &this->public.interface;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -26,6 +26,23 @@
|
|||||||
#include <library.h>
|
#include <library.h>
|
||||||
|
|
||||||
typedef struct imv_attestation_state_t imv_attestation_state_t;
|
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);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user