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 
237  Response<Models::TpmAttestationResult> AttestTpm(
238  std::vector<uint8_t> const& dataToAttest,
239  AttestTpmOptions const& options = AttestTpmOptions{},
240  Azure::Core::Context const& context = Azure::Core::Context{}) const;
241 
242  private:
243  Azure::Core::Url m_endpoint;
244  std::string m_apiVersion;
245  std::shared_ptr<Azure::Core::Http::_internal::HttpPipeline> m_pipeline;
246  AttestationTokenValidationOptions m_tokenValidationOptions;
247  std::vector<Models::AttestationSigner> m_attestationSigners;
248  Azure::Core::Tracing::_internal::TracingContextFactory m_tracingFactory;
249 
257  std::string const& endpoint,
258  std::shared_ptr<Core::Credentials::TokenCredential const> credential,
259  AttestationClientOptions options = AttestationClientOptions{});
260 
267  void RetrieveResponseValidationCollateral(
268  Azure::Core::Context const& context = Azure::Core::Context{});
269  };
270 
271 }}} // namespace Azure::Security::Attestation
Defines the Azure Attestation API types.
Defines the supported options to create a Attestation clients.
Definition: attestation_client.hpp:117
AttestationClient(AttestationClient const &attestationClient)=default
Construct a new Attestation Client object from an existing attestation client.
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:290
virtual ~AttestationClient()=default
Destructor.
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:112
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:83
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:166
Response< Models::TpmAttestationResult > AttestTpm(std::vector< uint8_t > const &dataToAttest, AttestTpmOptions const &options=AttestTpmOptions{}, Azure::Core::Context const &context=Azure::Core::Context{}) const
Sends TPM-based attestation data to the service. The TPM attestation protocol is defined here
Definition: attestation_client.cpp:206
Response< Models::OpenIdMetadata > GetOpenIdMetadata(Azure::Core::Context const &context=Azure::Core::Context::ApplicationContext) const
Definition: attestation_client.cpp:61
Azure SDK abstractions.
Definition: attestation_administration_client.hpp:13
Define the options to create an Attestation client.
Definition: attestation_client_options.hpp:94