sgx开发

sgx 开发

当前项目依赖:

incubator-teaclave-sgx-sdk 1.0.9(原baidu rust sgx sdk)

Rust nightly-2019-08-01

https://github.com/enigmampc/enigma-core 的一些crate(后续开发剔除)

适用于rust sgx的crate:

https://github.com/dingelish/sgx-world

项目开发遇到的问题

evm读写集的记录:

在sputnikvm的返回结果上添加读写集。可对比 https://github.com/60ke/sputnikvmhttps://github.com/enigmampc/sputnikvm/tree/enigma-next 的区别

ocall:

传入address和storage的key来获取storage的value的edl部分的代码:

1
2
3
4
5
void ocall_get_storage(
[in, size = addr_len] uint8_t * addr,uint8_t addr_len,
[in, size = index_len] uint8_t * index,uint8_t index_len,
[out,size = 1000] uint8_t* value,[out] uint8_t* value_len
);

enclave与外界的数据类型交互:

由edl生成c函数,通过指针的方法进行进行交互

solidity测试合约

regchain wiki中的合约:

1
2
3
4
5
6
7
8
pragma solidity ^0.4.24;
contract sample {
    uint256 a = 0;
    function add() payable public returns (uint256) {
        a = a + msg.value;
        return a;
    }
}

需要操作storage的合约:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
pragma solidity ^0.4.24;
contract MyContract {
  uint[] array = [1,2,3,4,5];

  function removeAtIndex(uint index) returns (uint[]) {
    if (index >= array.length) return;

    for (uint i = index; i < array.length-1; i++) {
      array[i] = array[i+1];
    }

    delete array[array.length-1];
    array.length--;

    return array;
  }
}

利用vscode和sgx-gdb进行调试

教程:

Setup gdb 7.11 on Ubuntu 18.04 for VSCode sgx gdb remote debugging

对应代码实例:

hello-rust-vscode-debug

intel远程证实

ARM TrustZone:

OP-TEE / optee_os

ARMmbed / meta-mbl

https://blog.csdn.net/shuaifengyun/article/details/73716352

Licensed under CC BY-NC-SA 4.0
Built with Hugo
主题 StackJimmy 设计