in samplecode/psi/MessageHandler/MessageHandler.cpp [337:420]
string MessageHandler::handleAttestationResult(Messages::AttestationMessage msg) {
Log("Received Attestation result");
ra_samp_response_header_t *p_att_result_msg_full = NULL;
this->assembleAttestationMSG(msg, &p_att_result_msg_full);
sample_ra_att_result_msg_t *p_att_result_msg_body = (sample_ra_att_result_msg_t *) ((uint8_t*) p_att_result_msg_full + sizeof(ra_samp_response_header_t));
sgx_status_t status;
sgx_status_t ret;
sgx_ra_context_t context = msg.context();
uint32_t id = 0;
uint8_t salt[SALT_SIZE];
uint8_t mac[SGX_MAC_SIZE];
ret = verify_att_result_mac(this->enclave->getID(),
&status,
context,
(uint8_t*)&p_att_result_msg_body->platform_info_blob,
sizeof(ias_platform_info_blob_t),
(uint8_t*)&p_att_result_msg_body->mac);
if ((SGX_SUCCESS != ret) || (SGX_SUCCESS != status)) {
Log("Error: INTEGRITY FAILED - attestation result message MK based cmac failed", log::error);
SafeFree(p_att_result_msg_full);
return generateAttestationFailed(context, id);
}
if (0 != p_att_result_msg_full->status[0] || 0 != p_att_result_msg_full->status[1]) {
Log("Error, attestation mac result message MK based cmac failed", log::error);
SafeFree(p_att_result_msg_full);
return generateAttestationFailed(context, id);
} else {
ret = verify_secret_data(this->enclave->getID(),
&status,
context,
p_att_result_msg_body->secret.payload,
p_att_result_msg_body->secret.payload_size,
p_att_result_msg_body->secret.payload_tag,
MAX_VERIFICATION_RESULT,
salt,
mac,
&id);
SafeFree(p_att_result_msg_full);
if (SGX_SUCCESS != ret) {
Log("Error, attestation result message secret using SK based AESGCM failed", log::error);
Log("Error on ret , code : %08X\n",ret);
print_error_message(ret);
return generateAttestationFailed(context, id);
} else if (SGX_SUCCESS != status) {
Log("Error, attestation result message secret using SK based AESGCM failed", log::error);
Log("Error on status, code : %08X\n",status);
print_error_message(status);
return generateAttestationFailed(context, id);
} else {
Log("Send attestation okay");
Messages::MessagePsiSalt msg;
msg.set_type(RA_PSI_SLAT);
msg.set_size(0);
msg.set_state(1);
msg.set_context(context);
msg.set_id(id);
for (int i = 0; i < SALT_SIZE; i++) {
msg.add_salt(salt[i]);
}
for (int i = 0; i < SGX_MAC_SIZE; i++) {
msg.add_mac(mac[i]);
}
return nm->serialize(msg);
}
}
return "";
}