Expand description
Oblivious Transfer for private information retrieval.
This module implements a 1-out-of-N oblivious transfer protocol where:
- A sender has N items (messages)
- A receiver wants to retrieve one of the N items by index
- The sender doesn’t learn which item was chosen
- The receiver doesn’t learn anything about the other items
§Use Cases for CHIE Protocol
- Private P2P content discovery (receiver queries without revealing interest)
- Privacy-preserving content catalog browsing
- Anonymous chunk retrieval from peers
- Private database queries in distributed systems
§Protocol Overview
- Receiver generates keypairs for each possible choice
- Receiver encrypts the chosen index’s public key, randomizes others
- Sender encrypts each message with corresponding receiver public key
- Receiver can only decrypt the chosen message
§Example
use chie_crypto::ot::*;
// Sender has 3 items
let items = vec![
b"Item 0".to_vec(),
b"Item 1".to_vec(),
b"Item 2".to_vec(),
];
// Receiver wants item at index 1
let receiver = OTReceiver::new(items.len(), 1).unwrap();
let request = receiver.create_request();
// Sender responds
let sender = OTSender::new();
let response = sender.respond(&request, &items).unwrap();
// Receiver retrieves only the chosen item
let retrieved = receiver.retrieve(&response).unwrap();
assert_eq!(retrieved, b"Item 1");Structs§
- OTReceiver
- Receiver in oblivious transfer protocol.
- OTRequest
- Oblivious transfer request from receiver.
- OTResponse
- Oblivious transfer response from sender.
- OTSender
- Sender in oblivious transfer protocol.
Enums§
- OTError
- Errors that can occur during oblivious transfer operations.
Type Aliases§
- OTResult
- Result type for oblivious transfer operations.