Documentation ¶
Overview ¶
Package api defines the EnclaveRPC interface.
Index ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var ( // ServiceName is the gRPC service name. ServiceName = cmnGrpc.NewServiceName("EnclaveRPC") // MethodCallEnclave is the CallEnclave method. MethodCallEnclave = ServiceName.NewMethod("CallEnclave", CallEnclaveRequest{}). WithNamespaceExtractor(func(ctx context.Context, req interface{}) (common.Namespace, error) { r, ok := req.(*CallEnclaveRequest) if !ok { return common.Namespace{}, errInvalidRequestType } return r.RuntimeID, nil }). WithAccessControl(func(ctx context.Context, req interface{}) (bool, error) { r, ok := req.(*CallEnclaveRequest) if !ok { return false, errInvalidRequestType } endpoint, ok := registeredEndpoints.Load(r.Endpoint) if !ok { return false, fmt.Errorf("enclaverpc: unsupported endpoint: %s", r.Endpoint) } return endpoint.(Endpoint).AccessControlRequired(ctx, r) }) )
Functions ¶
func NewEndpoint ¶
NewEndpoint registers a new EnclaveRPC endpoint.
func RegisterService ¶
RegisterService registers a new EnclaveRPC transport service with the given gRPC server.
Types ¶
type CallEnclaveRequest ¶
type CallEnclaveRequest struct { RuntimeID common.Namespace `json:"runtime_id"` Endpoint string `json:"endpoint"` // Payload is a CBOR-serialized Frame. Payload []byte `json:"payload"` }
CallEnclaveRequest is a CallEnclave request.
type Endpoint ¶
type Endpoint interface { // AccessControlRequired returns true if access control policy lookup is required for a specific // request. In case an error is returned the request is aborted. AccessControlRequired(ctx context.Context, request *CallEnclaveRequest) (bool, error) }
Endpoint is an EnclaveRPC endpoint descriptor.
Endpoints may be registered using the `NewEndpoint` function.
type Frame ¶
type Frame struct { Session []byte `json:"session,omitempty"` UntrustedPlaintext string `json:"untrusted_plaintext,omitempty"` Payload []byte `json:"payload,omitempty"` }
Frame is an EnclaveRPC frame.
It is the Go analog of the Rust RPC frame defined in client/src/rpc/types.rs.
type Transport ¶
type Transport interface { // CallEnclave sends the request bytes to the target enclave. CallEnclave(ctx context.Context, request *CallEnclaveRequest) ([]byte, error) }
Transport is the EnclaveRPC transport interface.
func NewTransportClient ¶
func NewTransportClient(c *grpc.ClientConn) Transport
NewTransportClient creates a new EnclaveRPC gRPC transport client service.
Click to show internal directories.
Click to hide internal directories.