pub enum ClientMessage {
RequestAttestation,
Data {
id: u64,
payload: Vec<u8>,
},
Control {
payload: Vec<u8>,
signature: Vec<u8>,
},
GetControlNonce,
OpenStream {
id: u64,
payload: Vec<u8>,
},
StreamData {
id: u64,
payload: Vec<u8>,
},
StreamClose {
id: u64,
half: StreamHalf,
},
}Expand description
Messages sent from the client to the enclave server.
Variants§
RequestAttestation
Request an attestation document. The server includes the handshake hash as the attestation nonce and the current control nonce as user_data.
Data
Raw bytes to forward to the inner container (typically an HTTP request).
The id is echoed back in the response so the client can match them.
One-shot: the server writes the payload, drains the response to EOF,
and replies with exactly one ServerMessage::Data.
Control
Authenticated management command. payload is a CBOR-encoded
ControlCommand; signature is a P-256 ECDSA raw r||s 64-byte
signature over payload produced with the enclave’s control private
key. The server verifies the signature against the control public key
baked into the EIF and the embedded nonce against its current
single-use nonce.
GetControlNonce
Fetch the current single-use control nonce without consuming it.
Answered by ServerMessage::ControlNonce. The nonce is only
consumed when a full Control message is processed (success OR
failure). Use this to learn the nonce before constructing a signed
ControlCommand to embed in it.
OpenStream
Open a bidirectional byte stream to the inner container. The server
writes payload (typically an HTTP/1.1 upgrade request) to the
container’s TCP socket, then pumps bytes both ways until either side
closes: container reads come back as ServerMessage::StreamData,
client follow-ups arrive as ClientMessage::StreamData. The server
does NOT inspect the payload — it is the caller’s job (e.g. the SDK)
to recognize 101 Switching Protocols (or any other response shape)
in the returned bytes. This keeps the in-enclave protocol small enough
that a non-Rust frontend (a future nginx C module, a WASM SDK) can
implement it without an HTTP parser.
StreamData
Additional bytes sent into an open stream (e.g. WebSocket payload
frames). The id matches the original OpenStream request.
StreamClose
Close one or both halves of an open stream. half = Write signals
that the client is done sending (the server should shutdown(WRITE) on
the inner TCP), half = Both tears the stream down.
Trait Implementations§
Source§impl Clone for ClientMessage
impl Clone for ClientMessage
Source§fn clone(&self) -> ClientMessage
fn clone(&self) -> ClientMessage
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more