Pontifex (noun): Originally meaning "bridge-builder" in Latin
Pontifex is a Rust library for building and interacting with AWS Nitro enclaves. It provides a simple abstraction for building enclaves and interacting with them using the AWS Nitro Enclaves SDK.
First, add pontifex
to your enclave's Cargo.toml
with the server
feature. Then, you can build your enclave as follows:
const ENCLAVE_PORT: u32 = 1000;
#[derive(serde::Deserialize)]
struct RequestPayload {}
#[derive(serde::Serialize)]
struct ResponsePayload {}
async fn example() {
// setup tracing, etc.
tracing::info!("🦀 Starting server...");
if let Err(e) = pontifex::listen(ENCLAVE_PORT, process).await {
eprintln!("Failed to start server: {e}");
}
}
async fn process(request: RequestPayload) -> ResponsePayload {
// handle request
ResponsePayload {}
}
Then, on your client, add pontifex
to your Cargo.toml
with the client
feature. You can then interact with your enclave as follows:
use pontifex::ConnectionDetails;
const ENCLAVE_CID: u32 = 100;
const ENCLAVE_PORT: u32 = 1024;
#[derive(serde::Serialize)]
struct RequestPayload {}
#[derive(serde::Deserialize)]
struct ResponsePayload {}
async fn example() {
let request = RequestPayload {};
let result = pontifex::send::<RequestPayload, ResponsePayload>(ConnectionDetails::new(ENCLAVE_CID, ENCLAVE_PORT), &request).await;
if let Ok(response) = result {
println!("Response received");
}
}
For convenience, you can define a common crate that both your enclave and client depend on, which contains your request and response types.
This project is licensed under the MIT License. See the LICENSE file for details.