Open Enclave  0.18.0
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
enclave.h
Go to the documentation of this file.
1 // Copyright (c) Open Enclave SDK contributors.
2 // Licensed under the MIT License.
3 
10 #ifndef _OE_ENCLAVE_H
11 #define _OE_ENCLAVE_H
12 
13 #ifdef _OE_HOST_H
14 #error "enclave.h and host.h must not be included in the same compilation unit."
15 #endif
16 
17 #include <openenclave/bits/asym_keys.h>
18 #include "bits/defs.h"
19 #include "bits/evidence.h"
20 #include "bits/exception.h"
21 #include "bits/fs.h"
22 #include "bits/module.h"
23 #include "bits/properties.h"
24 #include "bits/result.h"
25 #include "bits/security.h"
26 #include "bits/types.h"
27 
31 OE_EXTERNC_BEGIN
32 
37 #ifndef _WIN32
38 #define sscanf_s sscanf
39 #endif
40 
47 #if defined(_ARM_) || defined(_M_ARM) || defined(__arm__) || \
48  defined(__thumb__) || defined(__aarch64__)
49 #define __thread
50 #endif
51 
74  bool is_first_handler,
75  oe_vectored_exception_handler_t vectored_handler);
76 
88  oe_vectored_exception_handler_t vectored_handler);
89 
106 bool oe_is_within_enclave(const void* ptr, size_t size);
107 
124 bool oe_is_outside_enclave(const void* ptr, size_t size);
125 
139 void* oe_host_malloc(size_t size);
140 
164 void* oe_host_realloc(void* ptr, size_t size);
165 
180 void* oe_host_calloc(size_t nmemb, size_t size);
181 
191 void oe_host_free(void* ptr);
192 
207 char* oe_host_strndup(const char* str, size_t n);
208 
215 void oe_abort(void) OE_NO_RETURN;
216 
242 void __oe_assert_fail(
243  const char* expr,
244  const char* file,
245  int line,
246  const char* func);
257 #ifndef NDEBUG
258 #define oe_assert(EXPR) \
259  do \
260  { \
261  if (!(EXPR)) \
262  __oe_assert_fail(#EXPR, __FILE__, __LINE__, __FUNCTION__); \
263  } while (0)
264 #else
265 #define oe_assert(EXPR)
266 #endif
267 
268 #if (OE_API_VERSION < 2)
269 #error "Only OE_API_VERSION of 2 is supported"
270 #else
271 #define oe_get_report oe_get_report_v2
272 #endif
273 
298  uint32_t flags,
299  const uint8_t* report_data,
300  size_t report_data_size,
301  const void* opt_params,
302  size_t opt_params_size,
303  uint8_t** report_buffer,
304  size_t* report_buffer_size);
305 
311 void oe_free_report(uint8_t* report_buffer);
312 
313 #if (OE_API_VERSION < 2)
314 #error "Only OE_API_VERSION of 2 is supported"
315 #else
316 #define oe_get_target_info oe_get_target_info_v2
317 #endif
318 
340  const uint8_t* report,
341  size_t report_size,
342  void** target_info_buffer,
343  size_t* target_info_size);
344 
351 void oe_free_target_info(void* target_info);
352 
369  const uint8_t* report,
370  size_t report_size,
371  oe_report_t* parsed_report);
372 
391  const uint8_t* report,
392  size_t report_size,
393  oe_report_t* parsed_report);
394 
395 #if (OE_API_VERSION < 2)
396 #error "Only OE_API_VERSION of 2 is supported"
397 #else
398 #define oe_get_seal_key_by_policy oe_get_seal_key_by_policy_v2
399 #endif
400 
425  oe_seal_policy_t seal_policy,
426  uint8_t** key_buffer,
427  size_t* key_buffer_size,
428  uint8_t** key_info,
429  size_t* key_info_size);
430 
431 #if (OE_API_VERSION < 2)
432 #error "Only OE_API_VERSION of 2 is supported"
433 #else
434 #define oe_get_seal_key oe_get_seal_key_v2
435 #endif
436 
458  oe_seal_policy_t seal_policy,
459  const oe_asymmetric_key_params_t* key_params,
460  uint8_t** key_buffer,
461  size_t* key_buffer_size,
462  uint8_t** key_info,
463  size_t* key_info_size);
464 
482  const oe_asymmetric_key_params_t* key_params,
483  const uint8_t* key_info,
484  size_t key_info_size,
485  uint8_t** key_buffer,
486  size_t* key_buffer_size);
487 
509  oe_seal_policy_t seal_policy,
510  const oe_asymmetric_key_params_t* key_params,
511  uint8_t** key_buffer,
512  size_t* key_buffer_size,
513  uint8_t** key_info,
514  size_t* key_info_size);
515 
533  const oe_asymmetric_key_params_t* key_params,
534  const uint8_t* key_info,
535  size_t key_info_size,
536  uint8_t** key_buffer,
537  size_t* key_buffer_size);
538 
548 void oe_free_key(
549  uint8_t* key_buffer,
550  size_t key_buffer_size,
551  uint8_t* key_info,
552  size_t key_info_size);
553 
574  const uint8_t* key_info,
575  size_t key_info_size,
576  uint8_t** key_buffer,
577  size_t* key_buffer_size);
578 
585 void oe_free_seal_key(uint8_t* key_buffer, uint8_t* key_info);
586 
600 
611 oe_result_t oe_random(void* data, size_t size);
612 
636  const unsigned char* subject_name,
637  uint8_t* private_key,
638  size_t private_key_size,
639  uint8_t* public_key,
640  size_t public_key_size,
641  uint8_t** output_cert,
642  size_t* output_cert_size);
643 
648 void oe_free_attestation_certificate(uint8_t* cert);
649 
655 typedef oe_result_t (
657 
682  uint8_t* cert_in_der,
683  size_t cert_in_der_len,
684  oe_identity_verify_callback_t enclave_identity_callback,
685  void* arg);
686 
687 OE_EXTERNC_END
688 
689 #endif /* _OE_ENCLAVE_H */
oe_host_strndup
char * oe_host_strndup(const char *str, size_t n)
Make a heap copy of a string.
_oe_report
Structure to hold the parsed form of a report.
Definition: report.h:112
oe_random
oe_result_t oe_random(void *data, size_t size)
Generate a sequence of random bytes.
oe_is_within_enclave
bool oe_is_within_enclave(const void *ptr, size_t size)
Check whether the given buffer is strictly within the enclave.
types.h
oe_get_public_key_by_policy
oe_result_t oe_get_public_key_by_policy(oe_seal_policy_t seal_policy, const oe_asymmetric_key_params_t *key_params, uint8_t **key_buffer, size_t *key_buffer_size, uint8_t **key_info, size_t *key_info_size)
Returns a public key that is associated with the identity of the enclave and the specified policy.
oe_get_public_key
oe_result_t oe_get_public_key(const oe_asymmetric_key_params_t *key_params, const uint8_t *key_info, size_t key_info_size, uint8_t **key_buffer, size_t *key_buffer_size)
Returns a public key that is associated with the identity of the enclave.
oe_is_outside_enclave
bool oe_is_outside_enclave(const void *ptr, size_t size)
Check whether the given buffer is strictly outside the enclave.
oe_seal_policy_t
enum _oe_seal_policy oe_seal_policy_t
This enumeration type defines the policy used to derive a seal key.
module.h
_oe_identity
Structure to represent the identity of an enclave.
Definition: report.h:80
oe_free_attestation_certificate
void oe_free_attestation_certificate(uint8_t *cert)
Free the given cert.
oe_free_report
void oe_free_report(uint8_t *report_buffer)
Frees a report buffer obtained from oe_get_report.
oe_generate_attestation_certificate
oe_result_t oe_generate_attestation_certificate(const unsigned char *subject_name, uint8_t *private_key, size_t private_key_size, uint8_t *public_key, size_t public_key_size, uint8_t **output_cert, size_t *output_cert_size)
oe_generate_attestation_certificate.
oe_free_key
void oe_free_key(uint8_t *key_buffer, size_t key_buffer_size, uint8_t *key_info, size_t key_info_size)
Frees the given key and/or key info.
oe_host_realloc
void * oe_host_realloc(void *ptr, size_t size)
Reallocate bytes from the host's heap.
oe_host_malloc
void * oe_host_malloc(size_t size)
Allocate bytes from the host's heap.
oe_verify_attestation_certificate
oe_result_t oe_verify_attestation_certificate(uint8_t *cert_in_der, size_t cert_in_der_len, oe_identity_verify_callback_t enclave_identity_callback, void *arg)
oe_verify_attestation_certificate
oe_get_private_key
oe_result_t oe_get_private_key(const oe_asymmetric_key_params_t *key_params, const uint8_t *key_info, size_t key_info_size, uint8_t **key_buffer, size_t *key_buffer_size)
Returns a private key that is associated with the identity of the enclave.
oe_enclave_t
struct _oe_enclave oe_enclave_t
This is an opaque handle to an enclave returned by oe_create_enclave().
Definition: types.h:144
oe_get_private_key_by_policy
oe_result_t oe_get_private_key_by_policy(oe_seal_policy_t seal_policy, const oe_asymmetric_key_params_t *key_params, uint8_t **key_buffer, size_t *key_buffer_size, uint8_t **key_info, size_t *key_info_size)
Returns a private key that is associated with the identity of the enclave and the specified policy.
oe_parse_report
oe_result_t oe_parse_report(const uint8_t *report, size_t report_size, oe_report_t *parsed_report)
Parse an enclave report into a standard format for reading.
oe_get_target_info_v2
oe_result_t oe_get_target_info_v2(const uint8_t *report, size_t report_size, void **target_info_buffer, size_t *target_info_size)
Extracts additional platform specific data from the report and writes it to target_info_buffer.
oe_abort
void oe_abort(void) OE_NO_RETURN
Abort execution of the enclave.
oe_get_seal_key_v2
oe_result_t oe_get_seal_key_v2(const uint8_t *key_info, size_t key_info_size, uint8_t **key_buffer, size_t *key_buffer_size)
Get a symmetric encryption key from the enclave platform using existing key information.
oe_get_enclave
oe_enclave_t * oe_get_enclave(void)
Obtains the enclave handle.
oe_vectored_exception_handler_t
uint64_t(* oe_vectored_exception_handler_t)(oe_exception_record_t *exception_context)
oe_vectored_exception_handler_t - Function pointer for a vectored exception handler in an enclave.
Definition: exception.h:235
oe_verify_report
oe_result_t oe_verify_report(const uint8_t *report, size_t report_size, oe_report_t *parsed_report)
Verify the integrity of the report and its signature.
result.h
oe_identity_verify_callback_t
oe_result_t(* oe_identity_verify_callback_t)(oe_identity_t *identity, void *arg)
identity validation callback type
Definition: enclave.h:656
evidence.h
oe_host_calloc
void * oe_host_calloc(size_t nmemb, size_t size)
Allocate zero-filled bytes from the host's heap.
oe_remove_vectored_exception_handler
oe_result_t oe_remove_vectored_exception_handler(oe_vectored_exception_handler_t vectored_handler)
Remove an existing vectored exception handler.
oe_host_free
void oe_host_free(void *ptr)
Release allocated memory.
oe_free_seal_key
void oe_free_seal_key(uint8_t *key_buffer, uint8_t *key_info)
Frees a key and/or key info.
oe_get_report_v2
oe_result_t oe_get_report_v2(uint32_t flags, const uint8_t *report_data, size_t report_data_size, const void *opt_params, size_t opt_params_size, uint8_t **report_buffer, size_t *report_buffer_size)
Get a report signed by the enclave platform for use in attestation.
oe_free_target_info
void oe_free_target_info(void *target_info)
Frees target info obtained from oe_get_target_info.
exception.h
properties.h
oe_get_seal_key_by_policy_v2
oe_result_t oe_get_seal_key_by_policy_v2(oe_seal_policy_t seal_policy, uint8_t **key_buffer, size_t *key_buffer_size, uint8_t **key_info, size_t *key_info_size)
Get a symmetric encryption key derived from the specified policy and coupled to the enclave platform.
oe_add_vectored_exception_handler
oe_result_t oe_add_vectored_exception_handler(bool is_first_handler, oe_vectored_exception_handler_t vectored_handler)
OP-TEE provides single-threaded enclaves only, and its ELF loader does not support thread-local reloc...
oe_result_t
enum _oe_result oe_result_t
This enumeration type defines return codes for Open Enclave functions.