This directory contains an RPC implementation over attested TLS connection written in Rust, providing trusted channels to send and handle requests. RPC interfaces and request/response messages can be defined in ProtoBuf and used for generating Rust structs and traits to implement services or client function to send requests.
Similar with other RPC frameworks, there are several concepts of RPC in Teaclave.
A channel in RPC represent a connection to the target service. Clients can use the channel to send requests. In Teaclave, we implement
SgxTrustedTlsChannel, which can establish and attested a remote connection. For example, to connect the management service, you need to establish a trusted channel with the service first. Then, create a client of management service with the channel. At last, you can use this client to send requests like
When constructing a client, you can use the
SgxTrustedTlsClientConfig to setup TLS and attestation configs.
Server is an entity to listening a network address, processing incoming messages, and forwarding requests to certain service. Similar with channel in Teaclave, we implement
SgxTrustedTlsServer, which can establish an attested TLS channel with clients.
Similar with the client, you can use
SgxTrustedTlsServerConfig to setup TLS and attestation configs.
There are many RPC protocols that can be implemented in the RPC framework. Currently, there's only one simple protocol called
JsonProtocol. Simply speaking, for the json protocol, one RPC message will contain a length of the following requests (in big endian) and a json serialized request.