-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.c
67 lines (57 loc) · 1.51 KB
/
app.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <stdio.h>
#include <sgx_urts.h>
#include "enclave_u.h"
static sgx_enclave_id_t enclave_id;
static int load_save_launch_token (const char *path, sgx_launch_token_t *launch_token, int is_save)
{
FILE *fp = fopen(path, is_save ? "wb" : "rb");
if (fp == NULL)
return 1;
size_t size;
if (is_save)
size = fwrite(launch_token, sizeof(sgx_launch_token_t), 1, fp);
else
size = fread(launch_token, sizeof(sgx_launch_token_t), 1, fp);
fclose(fp);
return size != sizeof(launch_token);
}
static int do_init ()
{
sgx_status_t retval;
sgx_launch_token_t launch_token;
int launch_token_updated;
if (load_save_launch_token("enclave.token", &launch_token, 0))
memset(&launch_token, 0, sizeof(sgx_launch_token_t));
retval = sgx_create_enclave("enclave.signed.so", SGX_DEBUG_FLAG, &launch_token, &launch_token_updated, &enclave_id, NULL);
if (retval != SGX_SUCCESS) {
printf("SGX error code: 0x%x\n", retval);
return 1;
}
if (launch_token_updated)
load_save_launch_token("enclave.token", &launch_token, 1);
return 0;
}
static void do_compute ()
{
sgx_status_t retval;
int sum;
retval = add(enclave_id, &sum, 8, 15);
if (retval != SGX_SUCCESS)
printf("SGX error code: 0x%x\n", retval);
else
printf("Succeed: %d + %d = %d!\n", 8, 15, sum);
}
static void do_fini ()
{
sgx_status_t retval = sgx_destroy_enclave(enclave_id);
if (retval != SGX_SUCCESS)
printf("SGX error code: 0x%x\n", retval);
}
int main (int argc, char const *argv[])
{
if (do_init())
return 1;
do_compute();
do_fini();
return 0;
}