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"] }
| Feature | Description |
|---|---|
client | Client-side OHTTP support |
server | Server-side OHTTP support |
rust-hpke | Use rust-hpke backend |
nss | Use NSS crypto backend |