[demos] Add MAA demo
This commit is contained in:
parent
2cd20d315e
commit
eba7e08453
39
demos/remote_attestation/maa/README.md
Normal file
39
demos/remote_attestation/maa/README.md
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
## Sample code for Occlum Remote Attestation to generate Microsoft Azure Attestation json file
|
||||||
|
|
||||||
|
### References
|
||||||
|
* Part of the sample code, specifically the part to generate MAA format json file, is derived from the [Sample code for Intel® SGX Attestation using Microsoft Azure Attestation service and Intel® SGX SDK for Linux OS](https://github.com/Azure-Samples/microsoft-azure-attestation/tree/master/intel.sdk.attest.sample)
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
- Platform: Intel SGX enabled platform with DCAP installed. Follow [DCAP
|
||||||
|
Quick Install
|
||||||
|
Guide](https://software.intel.com/content/www/us/en/develop/articles/intel-software-guard-extensions-data-center-attestation-primitives-quick-install-guide.html)
|
||||||
|
for the detailed installation procedure.
|
||||||
|
|
||||||
|
- Container: Start the Occlum latest docker container image for the demo. Follow
|
||||||
|
the [guide](https://github.com/occlum/occlum#how-to-use).
|
||||||
|
|
||||||
|
Remember to configure `/etc/sgx_default_qcnl.conf`
|
||||||
|
in the container according to your PCCS setting after running the docker image.
|
||||||
|
|
||||||
|
### Overview
|
||||||
|
|
||||||
|
The full Microsoft Azure Attestation flow includes generating a quote in an SGX enclave and then get it validated by the Microsoft [`Azure Attestation (MAA) service`](https://github.com/Azure-Samples/microsoft-azure-attestation).
|
||||||
|
|
||||||
|
There are five steps for a full flow MAA.
|
||||||
|
|
||||||
|
1. Build an SGX enclave
|
||||||
|
2. Launch an SGX enclave and get SGX quote
|
||||||
|
3. Persist SGX quote and Enclave Held Data (EHD) to JSON file
|
||||||
|
4. Call Azure Attestation for validation
|
||||||
|
5. Output validation results
|
||||||
|
|
||||||
|
This demo only covers the first three steps.
|
||||||
|
|
||||||
|
* Build and Run
|
||||||
|
```
|
||||||
|
# ./run.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
Once successful, four different MAA format json files are saved in `out` dir.
|
||||||
|
With the generated MAA format json files, users could continue on step 4 and 5 with general MAA service APIs to do validation.
|
74
demos/remote_attestation/maa/config/Occlum.json
Normal file
74
demos/remote_attestation/maa/config/Occlum.json
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
{
|
||||||
|
"resource_limits": {
|
||||||
|
"kernel_space_heap_size": "32MB",
|
||||||
|
"kernel_space_stack_size": "1MB",
|
||||||
|
"user_space_size": "300MB",
|
||||||
|
"max_num_of_threads": 32
|
||||||
|
},
|
||||||
|
"process": {
|
||||||
|
"default_stack_size": "4MB",
|
||||||
|
"default_heap_size": "32MB",
|
||||||
|
"default_mmap_size": "100MB"
|
||||||
|
},
|
||||||
|
"entry_points": [
|
||||||
|
"/bin"
|
||||||
|
],
|
||||||
|
"env": {
|
||||||
|
"default": [
|
||||||
|
"OCCLUM=yes"
|
||||||
|
],
|
||||||
|
"untrusted": [
|
||||||
|
"EXAMPLE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"product_id": 0,
|
||||||
|
"version_number": 0,
|
||||||
|
"debuggable": true,
|
||||||
|
"enable_kss": false,
|
||||||
|
"family_id": {
|
||||||
|
"high": "0x0",
|
||||||
|
"low": "0x0"
|
||||||
|
},
|
||||||
|
"ext_prod_id": {
|
||||||
|
"high": "0x0",
|
||||||
|
"low": "0x0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mount": [
|
||||||
|
{
|
||||||
|
"target": "/",
|
||||||
|
"type": "unionfs",
|
||||||
|
"options": {
|
||||||
|
"layers": [
|
||||||
|
{
|
||||||
|
"target": "/",
|
||||||
|
"type": "sefs",
|
||||||
|
"source": "./build/mount/__ROOT",
|
||||||
|
"options": {
|
||||||
|
"MAC": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"target": "/",
|
||||||
|
"type": "sefs",
|
||||||
|
"source": "./run/mount/__ROOT"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"target": "/host",
|
||||||
|
"type": "hostfs",
|
||||||
|
"source": "."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"target": "/proc",
|
||||||
|
"type": "procfs"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"target": "/dev",
|
||||||
|
"type": "devfs"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
74
demos/remote_attestation/maa/config/Occlum_prodid.json
Normal file
74
demos/remote_attestation/maa/config/Occlum_prodid.json
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
{
|
||||||
|
"resource_limits": {
|
||||||
|
"kernel_space_heap_size": "32MB",
|
||||||
|
"kernel_space_stack_size": "1MB",
|
||||||
|
"user_space_size": "300MB",
|
||||||
|
"max_num_of_threads": 32
|
||||||
|
},
|
||||||
|
"process": {
|
||||||
|
"default_stack_size": "4MB",
|
||||||
|
"default_heap_size": "32MB",
|
||||||
|
"default_mmap_size": "100MB"
|
||||||
|
},
|
||||||
|
"entry_points": [
|
||||||
|
"/bin"
|
||||||
|
],
|
||||||
|
"env": {
|
||||||
|
"default": [
|
||||||
|
"OCCLUM=yes"
|
||||||
|
],
|
||||||
|
"untrusted": [
|
||||||
|
"EXAMPLE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"product_id": 9999,
|
||||||
|
"version_number": 0,
|
||||||
|
"debuggable": false,
|
||||||
|
"enable_kss": false,
|
||||||
|
"family_id": {
|
||||||
|
"high": "0x0",
|
||||||
|
"low": "0x0"
|
||||||
|
},
|
||||||
|
"ext_prod_id": {
|
||||||
|
"high": "0x0",
|
||||||
|
"low": "0x0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mount": [
|
||||||
|
{
|
||||||
|
"target": "/",
|
||||||
|
"type": "unionfs",
|
||||||
|
"options": {
|
||||||
|
"layers": [
|
||||||
|
{
|
||||||
|
"target": "/",
|
||||||
|
"type": "sefs",
|
||||||
|
"source": "./build/mount/__ROOT",
|
||||||
|
"options": {
|
||||||
|
"MAC": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"target": "/",
|
||||||
|
"type": "sefs",
|
||||||
|
"source": "./run/mount/__ROOT"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"target": "/host",
|
||||||
|
"type": "hostfs",
|
||||||
|
"source": "."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"target": "/proc",
|
||||||
|
"type": "procfs"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"target": "/dev",
|
||||||
|
"type": "devfs"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
74
demos/remote_attestation/maa/config/Occlum_release.json
Normal file
74
demos/remote_attestation/maa/config/Occlum_release.json
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
{
|
||||||
|
"resource_limits": {
|
||||||
|
"kernel_space_heap_size": "32MB",
|
||||||
|
"kernel_space_stack_size": "1MB",
|
||||||
|
"user_space_size": "300MB",
|
||||||
|
"max_num_of_threads": 32
|
||||||
|
},
|
||||||
|
"process": {
|
||||||
|
"default_stack_size": "4MB",
|
||||||
|
"default_heap_size": "32MB",
|
||||||
|
"default_mmap_size": "100MB"
|
||||||
|
},
|
||||||
|
"entry_points": [
|
||||||
|
"/bin"
|
||||||
|
],
|
||||||
|
"env": {
|
||||||
|
"default": [
|
||||||
|
"OCCLUM=yes"
|
||||||
|
],
|
||||||
|
"untrusted": [
|
||||||
|
"EXAMPLE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"product_id": 0,
|
||||||
|
"version_number": 0,
|
||||||
|
"debuggable": false,
|
||||||
|
"enable_kss": false,
|
||||||
|
"family_id": {
|
||||||
|
"high": "0x0",
|
||||||
|
"low": "0x0"
|
||||||
|
},
|
||||||
|
"ext_prod_id": {
|
||||||
|
"high": "0x0",
|
||||||
|
"low": "0x0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mount": [
|
||||||
|
{
|
||||||
|
"target": "/",
|
||||||
|
"type": "unionfs",
|
||||||
|
"options": {
|
||||||
|
"layers": [
|
||||||
|
{
|
||||||
|
"target": "/",
|
||||||
|
"type": "sefs",
|
||||||
|
"source": "./build/mount/__ROOT",
|
||||||
|
"options": {
|
||||||
|
"MAC": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"target": "/",
|
||||||
|
"type": "sefs",
|
||||||
|
"source": "./run/mount/__ROOT"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"target": "/host",
|
||||||
|
"type": "hostfs",
|
||||||
|
"source": "."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"target": "/proc",
|
||||||
|
"type": "procfs"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"target": "/dev",
|
||||||
|
"type": "devfs"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,74 @@
|
|||||||
|
{
|
||||||
|
"resource_limits": {
|
||||||
|
"kernel_space_heap_size": "32MB",
|
||||||
|
"kernel_space_stack_size": "1MB",
|
||||||
|
"user_space_size": "300MB",
|
||||||
|
"max_num_of_threads": 32
|
||||||
|
},
|
||||||
|
"process": {
|
||||||
|
"default_stack_size": "4MB",
|
||||||
|
"default_heap_size": "32MB",
|
||||||
|
"default_mmap_size": "100MB"
|
||||||
|
},
|
||||||
|
"entry_points": [
|
||||||
|
"/bin"
|
||||||
|
],
|
||||||
|
"env": {
|
||||||
|
"default": [
|
||||||
|
"OCCLUM=yes"
|
||||||
|
],
|
||||||
|
"untrusted": [
|
||||||
|
"EXAMPLE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"product_id": 0,
|
||||||
|
"version_number": 8888,
|
||||||
|
"debuggable": false,
|
||||||
|
"enable_kss": false,
|
||||||
|
"family_id": {
|
||||||
|
"high": "0x0",
|
||||||
|
"low": "0x0"
|
||||||
|
},
|
||||||
|
"ext_prod_id": {
|
||||||
|
"high": "0x0",
|
||||||
|
"low": "0x0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mount": [
|
||||||
|
{
|
||||||
|
"target": "/",
|
||||||
|
"type": "unionfs",
|
||||||
|
"options": {
|
||||||
|
"layers": [
|
||||||
|
{
|
||||||
|
"target": "/",
|
||||||
|
"type": "sefs",
|
||||||
|
"source": "./build/mount/__ROOT",
|
||||||
|
"options": {
|
||||||
|
"MAC": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"target": "/",
|
||||||
|
"type": "sefs",
|
||||||
|
"source": "./run/mount/__ROOT"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"target": "/host",
|
||||||
|
"type": "hostfs",
|
||||||
|
"source": "."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"target": "/proc",
|
||||||
|
"type": "procfs"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"target": "/dev",
|
||||||
|
"type": "devfs"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
16
demos/remote_attestation/maa/gen_quote/Makefile
Normal file
16
demos/remote_attestation/maa/gen_quote/Makefile
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
CC ?= gcc
|
||||||
|
|
||||||
|
LDFLAGS += -L/opt/occlum/toolchains/dcap_lib/glibc \
|
||||||
|
-locclum_dcap -lssl -lcrypto
|
||||||
|
CFLAGS += -fPIE -pie -I /opt/intel/sgxsdk/include \
|
||||||
|
-I /opt/occlum/toolchains/dcap_lib/inc
|
||||||
|
|
||||||
|
.PHONY: all clean
|
||||||
|
|
||||||
|
all: gen_maa_json
|
||||||
|
|
||||||
|
gen_maa_json: gen_maa_json.c
|
||||||
|
$(CC) $^ $(CFLAGS) $(LDFLAGS) -o $@
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -rf gen_maa_json
|
130
demos/remote_attestation/maa/gen_quote/gen_maa_json.c
Normal file
130
demos/remote_attestation/maa/gen_quote/gen_maa_json.c
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <openssl/sha.h>
|
||||||
|
|
||||||
|
#include "sgx_quote_3.h"
|
||||||
|
#include "occlum_dcap.h"
|
||||||
|
|
||||||
|
#define MAA_JSON "/host/maa.json"
|
||||||
|
|
||||||
|
void sha256sum(const uint8_t *data, uint32_t data_size, uint8_t *hash)
|
||||||
|
{
|
||||||
|
SHA256_CTX sha256;
|
||||||
|
SHA256_Init(&sha256);
|
||||||
|
SHA256_Update(&sha256, data, data_size);
|
||||||
|
SHA256_Final(hash, &sha256);
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *uint16_to_buffer (char *buffer, unsigned int maxSize, uint16_t n, size_t size)
|
||||||
|
{
|
||||||
|
if (size * 2 >= maxSize || size < 2)
|
||||||
|
return "DEADBEEF";
|
||||||
|
sprintf(&buffer[0], "%02X", (uint8_t)(n));
|
||||||
|
sprintf(&buffer[2], "%02X", (uint8_t)(n >> 8));
|
||||||
|
|
||||||
|
for (int i=2; i < size; i++)
|
||||||
|
{
|
||||||
|
sprintf(&buffer[i*2], "%02X", 0);
|
||||||
|
}
|
||||||
|
buffer[size*2+1] = '\0';
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *format_hex_buffer (char *buffer, unsigned int maxSize, uint8_t *data, size_t size)
|
||||||
|
{
|
||||||
|
if (size * 2 >= maxSize)
|
||||||
|
return "DEADBEEF";
|
||||||
|
|
||||||
|
for (int i=0; i < size; i++)
|
||||||
|
{
|
||||||
|
sprintf(&buffer[i*2], "%02X", data[i]);
|
||||||
|
}
|
||||||
|
buffer[size*2+1] = '\0';
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
void *handle;
|
||||||
|
uint32_t quote_size;
|
||||||
|
uint8_t *p_quote_buffer;
|
||||||
|
sgx_quote3_t *p_quote;
|
||||||
|
sgx_report_body_t *p_report_body;
|
||||||
|
sgx_report_data_t *p_report_data;
|
||||||
|
int32_t ret;
|
||||||
|
|
||||||
|
const int hex_buffer_size = 1024*64;
|
||||||
|
char hex_buffer[hex_buffer_size];
|
||||||
|
|
||||||
|
handle = dcap_quote_open();
|
||||||
|
quote_size = dcap_get_quote_size(handle);
|
||||||
|
printf("quote size = %d\n", quote_size);
|
||||||
|
|
||||||
|
p_quote_buffer = (uint8_t*)malloc(quote_size);
|
||||||
|
if (NULL == p_quote_buffer) {
|
||||||
|
printf("Couldn't allocate quote_buffer\n");
|
||||||
|
goto CLEANUP;
|
||||||
|
}
|
||||||
|
memset(p_quote_buffer, 0, quote_size);
|
||||||
|
|
||||||
|
uint8_t enclave_held_data[6] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06};
|
||||||
|
sgx_report_data_t hash = {0};
|
||||||
|
sha256sum(enclave_held_data, 6, hash.d);
|
||||||
|
// printf("report data hash:\n");
|
||||||
|
// for (int i = 0; i < sizeof(hash.d); i++) {
|
||||||
|
// if (!(i % 16))
|
||||||
|
// printf("\n\t");
|
||||||
|
// printf("%02x ", hash.d[i]);
|
||||||
|
// }
|
||||||
|
// printf("\n");
|
||||||
|
|
||||||
|
// Get the Quote
|
||||||
|
ret = dcap_generate_quote(handle, p_quote_buffer, &hash);
|
||||||
|
if (0 != ret) {
|
||||||
|
printf( "Error in dcap_generate_quote.\n");
|
||||||
|
goto CLEANUP;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("DCAP generate quote successfully\n");
|
||||||
|
|
||||||
|
p_quote = (sgx_quote3_t *)p_quote_buffer;
|
||||||
|
p_report_body = (sgx_report_body_t *)(&p_quote->report_body);
|
||||||
|
p_report_data = (sgx_report_data_t *)(&p_report_body->report_data);
|
||||||
|
|
||||||
|
// check report data
|
||||||
|
if (memcmp((void *)&hash, (void *)p_report_data, sizeof(sgx_report_data_t)) != 0) {
|
||||||
|
printf("mismathced report data\n");
|
||||||
|
goto CLEANUP;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create json file
|
||||||
|
FILE *fp = fopen(MAA_JSON, "w");
|
||||||
|
if ( NULL == fp ) {
|
||||||
|
printf("fopen %s failed return %d\n", MAA_JSON, errno);
|
||||||
|
goto CLEANUP;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Generate Azure attestion json file
|
||||||
|
// Refer to https://github.com/Azure-Samples/microsoft-azure-attestation
|
||||||
|
fprintf(fp, "%s\n", "{");
|
||||||
|
// Use 3 as type for now
|
||||||
|
fprintf(fp, " \"Type\": %d,\n", 3);
|
||||||
|
fprintf(fp, " \"MrEnclaveHex\": \"%s\",\n", format_hex_buffer(hex_buffer, hex_buffer_size, p_report_body->mr_enclave.m, SGX_HASH_SIZE));
|
||||||
|
fprintf(fp, " \"MrSignerHex\": \"%s\",\n", format_hex_buffer(hex_buffer, hex_buffer_size, p_report_body->mr_signer.m, SGX_HASH_SIZE));
|
||||||
|
fprintf(fp, " \"ProductIdHex\": \"%s\",\n", uint16_to_buffer(hex_buffer, hex_buffer_size, (uint16_t)p_report_body->isv_prod_id, 16));
|
||||||
|
fprintf(fp, " \"SecurityVersion\": %u,\n", (int)p_report_body->isv_svn);
|
||||||
|
fprintf(fp, " \"Attributes\": %lu,\n", (uint64_t)p_report_body->attributes.flags);
|
||||||
|
fprintf(fp, " \"QuoteHex\": \"%s\",\n", format_hex_buffer(hex_buffer, hex_buffer_size, (uint8_t *)p_quote, quote_size));
|
||||||
|
fprintf(fp, " \"EnclaveHeldDataHex\": \"%s\"\n", format_hex_buffer(hex_buffer, hex_buffer_size, enclave_held_data, sizeof( enclave_held_data)));
|
||||||
|
fprintf(fp, "%s\n", "}");
|
||||||
|
fclose(fp);
|
||||||
|
|
||||||
|
CLEANUP:
|
||||||
|
if (NULL != p_quote_buffer) {
|
||||||
|
free(p_quote_buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
dcap_quote_close(handle);
|
||||||
|
}
|
16
demos/remote_attestation/maa/maa.yaml
Normal file
16
demos/remote_attestation/maa/maa.yaml
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
includes:
|
||||||
|
- base.yaml
|
||||||
|
# dcap
|
||||||
|
targets:
|
||||||
|
# copy bins
|
||||||
|
- target: /bin
|
||||||
|
copy:
|
||||||
|
- files:
|
||||||
|
- ../gen_quote/gen_maa_json
|
||||||
|
# copy lib
|
||||||
|
- target: /opt/occlum/glibc/lib
|
||||||
|
copy:
|
||||||
|
- files:
|
||||||
|
- /opt/occlum/toolchains/dcap_lib/glibc/libocclum_dcap.so.0.1.0
|
||||||
|
- /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1
|
||||||
|
|
48
demos/remote_attestation/maa/run.sh
Executable file
48
demos/remote_attestation/maa/run.sh
Executable file
@ -0,0 +1,48 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
BLUE='\033[1;34m'
|
||||||
|
NC='\033[0m'
|
||||||
|
INSTANCE_DIR="occlum_instance"
|
||||||
|
bomfile="../maa.yaml"
|
||||||
|
json_dir=$PWD/out
|
||||||
|
|
||||||
|
# parameter 1 defines the predefined Occlum json
|
||||||
|
# parameter 2 defines the generated maa json
|
||||||
|
function gen_maa_json() {
|
||||||
|
config=$1
|
||||||
|
maa=${2:-"maa.json"}
|
||||||
|
|
||||||
|
if [ ! -f $config ]; then
|
||||||
|
echo "Please provide valid Occlum json file"
|
||||||
|
exit -1
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -rf ${INSTANCE_DIR} && occlum new ${INSTANCE_DIR}
|
||||||
|
pushd ${INSTANCE_DIR}
|
||||||
|
|
||||||
|
rm -rf image
|
||||||
|
copy_bom -f $bomfile --root image --include-dir /opt/occlum/etc/template
|
||||||
|
cp ../$config Occlum.json
|
||||||
|
occlum build
|
||||||
|
|
||||||
|
echo -e "${BLUE}occlum run to generate quote in maa json format${NC}"
|
||||||
|
occlum run /bin/gen_maa_json
|
||||||
|
|
||||||
|
echo -e "${BLUE}Generated maa json file ${json_dir}/$maa${NC}"
|
||||||
|
mv maa.json ${json_dir}/$maa
|
||||||
|
popd
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "*** Build glibc maa demo ***"
|
||||||
|
make -C gen_quote clean
|
||||||
|
make -C gen_quote
|
||||||
|
|
||||||
|
rm -rf ${json_dir} && mkdir -p ${json_dir}
|
||||||
|
|
||||||
|
gen_maa_json ./config/Occlum.json maa_debug.json
|
||||||
|
gen_maa_json ./config/Occlum_prodid.json maa_prodid.json
|
||||||
|
gen_maa_json ./config/Occlum_release.json maa_release.json
|
||||||
|
gen_maa_json ./config/Occlum_securityversion.json maa_securityversion.json
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user