Rust - ohttp

Installation

Add to your Cargo.toml:

[dependencies]
ohttp = "0.5"

Client Usage

use ohttp::{ClientRequest, KeyConfig};

// Parse gateway's public key configuration
let key_config = KeyConfig::decode(key_bytes)?;

// Create a client request
let request = ClientRequest::from_encoded_key_config(&key_bytes)?;

// Encapsulate your request
let (enc_request, response_handler) = request.encapsulate(
    b"GET",
    b"https",
    b"example.com",
    b"/api/data",
)?;

// Send enc_request through relay...
let enc_response = send_to_relay(enc_request)?;

// Decapsulate the response
let response = response_handler.decapsulate(&enc_response)?;

Server Usage

use ohttp::{Server, KeyConfig, SymmetricSuite};

// Generate server key configuration
let config = KeyConfig::new(
    key_id,
    kem,
    vec![SymmetricSuite::new(kdf, aead)],
)?;

let server = Server::new(config)?;

// Handle incoming request
let (request, response_handler) = server.decapsulate(&enc_request)?;

// Process request and create response
let response = process_request(request)?;

// Encapsulate response
let enc_response = response_handler.encapsulate(&response)?;

Features

The crate supports several feature flags:

[dependencies]
ohttp = { version = "0.5", features = ["client", "server", "rust-hpke"] }
FeatureDescription
clientClient-side OHTTP support
serverServer-side OHTTP support
rust-hpkeUse rust-hpke backend
nssUse NSS crypto backend