1个不稳定版本

0.1.0 2023年2月1日

#1909硬件支持


mc-sgx-panic 中使用

Apache-2.0

70KB
772

MobileCoin:SGX区域同步原语

Project ChatLicenseTargetCrates.ioDocs StatusDependency Status

SGX区域同步原语。

提供的原语旨在模仿std::sync的行为。仅支持在SGX区域中支持的原语。

示例

拥有同时与std::syncmc-sgx-sync一起工作的代码。

#[cfg(feature = "sgx")]
use mc_sgx_sync::Mutex;
#[cfg(not(feature = "sgx"))]
use std::sync::Mutex;

let mutex = Mutex::new(5);

{
    let mut data = lock.lock().unwrap();
    *data += 1;
    assert_eq!(*data, 6);
} // lock is dropped here

开发者注意事项

模块实现是为了模仿std::sync的布局。

module hierarchy

  • 定义公共API的模块基本上是从rust源的提交606c3907处复制过来的,移除了不支持的行为。这确保了客户端可以在std::sync类型和支持的mc-sgx-sync类型之间跳转。

  • mc-sgx-sync::sys模块模仿rust源中的模块。在rust源中的sys模块是按操作系统或平台划分的。《mc-sgx-sync》仅支持SGX区域,但维护sys布局可以减少对公共API模块的修改。

  • mc-sgx-tstdc提供了围绕同步原语的C实现Rust包装器。

mc-sgx-sync 可能依赖于 mc-sgx-tstdc-sys 并直接调用C实现。许多 rust源代码 中的 sys 模块就是这样实现的。选择依赖 mc-sgx-tstdc 是为了与使用其他 mc-sgx-<lib_wrapper>-sys crate保持一致。这些 mc-sgx-<lib_wrapper> crate提供了C API的惯用Rust接口,并且通常是唯一直接依赖 mc-sgx-<lib_wrapper>-sys crate的crate。

依赖项

~1.3–3.5MB
~71K SLoC