occlum/demos/remote_attestation/lib/include/tee/ra_ias.h
Junxian Xiao 86d11e9d44 Refactor the remote attestation demo
This commits consists of three major changes:

1. Support a new interface to get the base64 quote only.
This is useful in the case that application sends the quote
to service provider server and get the final IAS report there.
The application itself doesn't depend on IAS in this case.

2. Improve the C++ programming style. Now, we only provide
C++ classes and limited C APIs(for configuration and sgx device).

3. Use the more general keywords as names prefix.

Signed-off-by: Junxian Xiao <junxian.xjx@antfin.com>
2020-06-23 16:59:33 +08:00

89 lines
2.7 KiB
C++

#ifndef REMOTE_ATTESTATION_LIB_INCLUDE_RA_IAS_H_
#define REMOTE_ATTESTATION_LIB_INCLUDE_RA_IAS_H_
#include <mutex>
#include <string>
#include "./sgx_uae_epid.h"
#include "./sgx_urts.h"
#include "./sgx_utils.h"
#include "curl/curl.h"
#include "tee/common/error.h"
#include "tee/common/type.h"
#define IAS_REPORT_CLASS_MEMBER(x) \
public: \
std::string& x() { \
return x##_; \
} \
const std::string& x() const { \
return x##_; \
} \
std::string* mutable_##x() { \
return &x##_; \
} \
void set_##x(const std::string& value) { \
x##_ = value; \
} \
void set_##x(const char* value) { \
x##_ = value; \
} \
void set_##x(const char* value, size_t size) { \
x##_ = value; \
} \
\
private: \
std::string x##_
namespace ra {
namespace occlum {
/// Data structure to hold the IAS sigrl API response
typedef struct {
std::string b64_sigrl;
} RaIasSigrl;
/// Data structure to hold the IAS sigrl API response
/// Use this class to simulate the protobuf class
/// don't need to introduce the protobuf dependency
class RaIasReport {
IAS_REPORT_CLASS_MEMBER(b64_signature);
IAS_REPORT_CLASS_MEMBER(signing_cert);
IAS_REPORT_CLASS_MEMBER(advisory_url);
IAS_REPORT_CLASS_MEMBER(advisory_ids);
IAS_REPORT_CLASS_MEMBER(response_body);
IAS_REPORT_CLASS_MEMBER(epid_pseudonym);
IAS_REPORT_CLASS_MEMBER(quote_status);
IAS_REPORT_CLASS_MEMBER(b16_platform_info_blob);
IAS_REPORT_CLASS_MEMBER(b64_quote_body);
};
/// HTTPS client for connecting to IAS
class RaIasClient {
public:
explicit RaIasClient(const RaIasServerCfg& ias_server);
~RaIasClient();
/// api: /sigrl/<gid>
TeeErrorCode GetSigRL(const sgx_epid_group_id_t& gid, std::string* sigrl);
/// api: /report
TeeErrorCode FetchReport(const std::string& quote, RaIasReport* ias_report);
private:
void InitIasConnection(const std::string& url);
CURL* curl_ = NULL;
curl_slist* headers_ = NULL;
std::string server_endpoint_;
static std::mutex init_mutex_;
};
} // namespace occlum
} // namespace ra
#endif // REMOTE_ATTESTATION_LIB_INCLUDE_RA_IAS_H_