我想使用本地证明将数据从一个飞地传递到另一个飞地

时间:2019-04-13 18:35:20

标签: c++ sgx enclave

我在Enclave2中生成一个随机数,并希望通过另一个Enclave1将其传递给不受信任的代码。我在安全通道使用本地证明,从Enclave到Enlave调用。在Enclave1到Enclave2之间执行消息交换和关闭会话。

我正在使用Windows操作系统,随机数字的定义在Enclave2.cpp中是

....

void random_number(int *a)
{
    sgx_read_rand((unsigned char *)a, 4);
}

...

这是我将Enclave2中的随机数返回到主程序(app.cpp)的地方。但是,我想通过Enclave 1返回生成的随机数。

void input_from_user()
{...

    {
        ....
        Enclave2_random_number(e2_enclave_id, &a);
        ..
        Nodes[j][1] = (abs(a) % 4) + 1;
        ..

    }
}

在这里,分别是Enclave1和Enclave2的edl部分。

enclave {
    include "sgx_eid.h"
    from "../LocalAttestationCode/LocalAttestationCode.edl" import *;
    trusted{
            public uint32_t test_create_session(sgx_enclave_id_t src_enclave_id, sgx_enclave_id_t dest_enclave_id);
            public uint32_t test_enclave_to_enclave_call(sgx_enclave_id_t src_enclave_id, sgx_enclave_id_t dest_enclave_id);
            public uint32_t test_message_exchange(sgx_enclave_id_t src_enclave_id, sgx_enclave_id_t dest_enclave_id);
            public uint32_t test_close_session(sgx_enclave_id_t src_enclave_id, sgx_enclave_id_t dest_enclave_id);
    };

};

enclave {
    include "sgx_eid.h"
    from "../LocalAttestationCode/LocalAttestationCode.edl" import *;
    trusted{
            public uint32_t test_create_session(sgx_enclave_id_t src_enclave_id, sgx_enclave_id_t dest_enclave_id);
            public uint32_t test_enclave_to_enclave_call(sgx_enclave_id_t src_enclave_id, sgx_enclave_id_t dest_enclave_id);
            public uint32_t test_message_exchange(sgx_enclave_id_t src_enclave_id, sgx_enclave_id_t dest_enclave_id);
            public void random_number([out] int *a);
            public uint32_t test_close_session(sgx_enclave_id_t src_enclave_id, sgx_enclave_id_t dest_enclave_id);

    };
};

0 个答案:

没有答案