azure-security-attestation
attestation_client.hpp
1 // Copyright (c) Microsoft Corporation. All rights reserved.
2 // SPDX-License-Identifier: MIT
3 
4 #pragma once
5 
8 #include <azure/core/context.hpp>
9 #include <azure/core/internal/tracing/service_tracing.hpp>
10 #include <azure/core/url.hpp>
11 #include <string>
12 
13 namespace Azure { namespace Core { namespace Http { namespace _internal {
14  class HttpPipeline;
15 }}}} // namespace Azure::Core::Http::_internal
16 
17 namespace Azure { namespace Security { namespace Attestation {
18 
117  class AttestationClient final {
118 
119  public:
132  static AttestationClient Create(
133  std::string const& endpoint,
134  std::shared_ptr<Core::Credentials::TokenCredential const> credential,
136  Azure::Core::Context const& constext = Azure::Core::Context{});
137 
151  static AttestationClient Create(
152  std::string const& endpoint,
154  Azure::Core::Context const& constext = Azure::Core::Context{});
155 
160  virtual ~AttestationClient() = default;
161 
166  AttestationClient(AttestationClient const& attestationClient) = default;
167 
168  std::string const Endpoint() const { return m_endpoint.GetAbsoluteUrl(); }
169 
178  Response<Models::OpenIdMetadata> GetOpenIdMetadata(
179  Azure::Core::Context const& context = Azure::Core::Context::ApplicationContext) const;
180 
187  Response<Models::TokenValidationCertificateResult> GetTokenValidationCertificates(
188  Azure::Core::Context const& context = Azure::Core::Context{}) const;
189 
202  Response<Models::AttestationToken<Models::AttestationResult>> AttestSgxEnclave(
203  std::vector<uint8_t> const& sgxQuoteToAttest,
204  AttestSgxEnclaveOptions options = AttestSgxEnclaveOptions{},
205  Azure::Core::Context const& context = Azure::Core::Context{}) const;
206 
220  Response<Models::AttestationToken<Models::AttestationResult>> AttestOpenEnclave(
221  std::vector<uint8_t> const& openEnclaveReportToAttest,
222  AttestOpenEnclaveOptions options = AttestOpenEnclaveOptions{},
223  Azure::Core::Context const& context = Azure::Core::Context{}) const;
224 
244  Response<Models::TpmAttestationResult> AttestTpm(
245  AttestTpmOptions const& options,
246  Azure::Core::Context const& context = Azure::Core::Context{}) const;
247 
248  private:
249  Azure::Core::Url m_endpoint;
250  std::string m_apiVersion;
251  std::shared_ptr<Azure::Core::Http::_internal::HttpPipeline> m_pipeline;
252  AttestationTokenValidationOptions m_tokenValidationOptions;
253  std::vector<Models::AttestationSigner> m_attestationSigners;
254  Azure::Core::Tracing::_internal::TracingContextFactory m_tracingFactory;
255 
263  std::string const& endpoint,
264  std::shared_ptr<Core::Credentials::TokenCredential const> credential,
265  AttestationClientOptions options = AttestationClientOptions{});
266 
273  void RetrieveResponseValidationCollateral(
274  Azure::Core::Context const& context = Azure::Core::Context{});
275  };
276 
277 }}} // namespace Azure::Security::Attestation
attestation_client_models.hpp
Defines the Azure Attestation API types.
Azure::Security::Attestation::AttestationClient::GetOpenIdMetadata
Response< Models::OpenIdMetadata > GetOpenIdMetadata(Azure::Core::Context const &context=Azure::Core::Context::ApplicationContext) const
Definition: attestation_client.cpp:53
Azure::Security::Attestation::AttestationClient::AttestationClient
AttestationClient(AttestationClient const &attestationClient)=default
Construct a new Attestation Client object from an existing attestation client.
Azure::Security::Attestation::AttestationClientOptions
Define the options to create an Attestation client.
Definition: attestation_client_options.hpp:94
Azure::Security::Attestation::AttestationClient::AttestOpenEnclave
Response< Models::AttestationToken< Models::AttestationResult > > AttestOpenEnclave(std::vector< uint8_t > const &openEnclaveReportToAttest, AttestOpenEnclaveOptions options=AttestOpenEnclaveOptions{}, Azure::Core::Context const &context=Azure::Core::Context{}) const
Attest an OpenEnclave report, returning an attestation token representing the result of the attestati...
Definition: attestation_client.cpp:158
Azure
Azure SDK abstractions.
Definition: attestation_administration_client.hpp:13
Azure::Security::Attestation::AttestationClient::GetTokenValidationCertificates
Response< Models::TokenValidationCertificateResult > GetTokenValidationCertificates(Azure::Core::Context const &context=Azure::Core::Context{}) const
Retrieve the attestation signing certificates for this attestation instance.
Definition: attestation_client.cpp:75
attestation_client_options.hpp
Defines the supported options to create a Attestation clients.
Azure::Security::Attestation::AttestationClient::Create
static AttestationClient Create(std::string const &endpoint, std::shared_ptr< Core::Credentials::TokenCredential const > credential, AttestationClientOptions const &options=AttestationClientOptions{}, Azure::Core::Context const &constext=Azure::Core::Context{})
Construct a new Attestation Client object.
Definition: attestation_client.cpp:281
Azure::Security::Attestation::AttestationClient::AttestTpm
Response< Models::TpmAttestationResult > AttestTpm(AttestTpmOptions const &options, Azure::Core::Context const &context=Azure::Core::Context{}) const
Perform a single leg.
Definition: attestation_client.cpp:198
Azure::Security::Attestation::AttestationClient
Definition: attestation_client.hpp:117
Azure::Security::Attestation::AttestationClient::~AttestationClient
virtual ~AttestationClient()=default
Destructor.
Azure::Security::Attestation::AttestationClient::AttestSgxEnclave
Response< Models::AttestationToken< Models::AttestationResult > > AttestSgxEnclave(std::vector< uint8_t > const &sgxQuoteToAttest, AttestSgxEnclaveOptions options=AttestSgxEnclaveOptions{}, Azure::Core::Context const &context=Azure::Core::Context{}) const
Attest an SGX enclave, returning an attestation token representing the result of the attestation oper...
Definition: attestation_client.cpp:104