pub struct Server { /* private fields */ }Expand description
Server session for handling source requests
Implementations§
Source§impl Server
impl Server
Sourcepub fn new() -> Self
pub fn new() -> Self
Create a new server session
TODO: Load newsroom keys from storage if they exist.
Sourcepub fn create_newsroom_setup_request<R: RngCore + CryptoRng>(
&mut self,
rng: R,
) -> Result<NewsroomSetupRequest, Error>
pub fn create_newsroom_setup_request<R: RngCore + CryptoRng>( &mut self, rng: R, ) -> Result<NewsroomSetupRequest, Error>
Generate a new newsroom setup request.
This creates a newsroom key pair, stores it in the server storage, and returns a setup request that can be sent to FPF for signing.
TODO: The caller should persist these keys to disk.
Sourcepub fn setup_journalist(
&mut self,
request: JournalistSetupRequest,
) -> Result<JournalistSetupResponse, Error>
pub fn setup_journalist( &mut self, request: JournalistSetupRequest, ) -> Result<JournalistSetupResponse, Error>
Setup a journalist. This corresponds to step 3.1 in the spec.
The newsroom then signs the bundle of journalist public keys.
TODO: There is a manual verification step here, so the caller should instruct the user to stop, verify the fingerprint out of band, and then proceed. The caller should also persist the fingerprint and signature in its local data store.
TODO(later): How to handle signing when offline? (Not relevant for benchmarking)
Sourcepub fn handle_ephemeral_key_request(
&mut self,
request: JournalistEphemeralKeyRequest,
) -> Result<(), Error>
pub fn handle_ephemeral_key_request( &mut self, request: JournalistEphemeralKeyRequest, ) -> Result<(), Error>
Handle journalist ephemeral key replenishment. This corresponds to step 3.2 in the spec.
The journalist sends ephemeral keys signed by their signing key, and the server verifies the signature and stores the ephemeral keys.
§Errors
Returns an error if the journalist is not found in storage, or if any bundle signature fails verification.
Sourcepub fn newsroom_verifying_key(&self) -> Option<VerifyingKey>
pub fn newsroom_verifying_key(&self) -> Option<VerifyingKey>
Returns the newsroom verifying key, if one has been generated.
Sourcepub fn set_fpf_signature(&mut self, signature: Signature<FpfOnNewsroom>)
pub fn set_fpf_signature(&mut self, signature: Signature<FpfOnNewsroom>)
Set the FPF signature for the newsroom
Sourcepub fn ephemeral_keys_count(&self, journalist_id: Uuid) -> usize
pub fn ephemeral_keys_count(&self, journalist_id: Uuid) -> usize
Get the ephemeral key count for a journalist
Sourcepub fn has_ephemeral_keys(&self, journalist_id: Uuid) -> bool
pub fn has_ephemeral_keys(&self, journalist_id: Uuid) -> bool
Check if a journalist has ephemeral keys available
Sourcepub fn find_journalist_id(&self, verifying_key: &VerifyingKey) -> Option<Uuid>
pub fn find_journalist_id(&self, verifying_key: &VerifyingKey) -> Option<Uuid>
Find journalist ID by verifying key
Sourcepub fn has_message(&self, message_id: &Uuid) -> bool
pub fn has_message(&self, message_id: &Uuid) -> bool
Check if a message exists with the given ID
Sourcepub fn handle_source_newsroom_key_request(
&self,
_request: SourceNewsroomKeyRequest,
) -> SourceNewsroomKeyResponse
pub fn handle_source_newsroom_key_request( &self, _request: SourceNewsroomKeyRequest, ) -> SourceNewsroomKeyResponse
Handle source newsroom key request (step 5)
Sourcepub fn handle_source_journalist_key_request<R: RngCore + CryptoRng>(
&mut self,
_request: SourceJournalistKeyRequest,
rng: &mut R,
) -> Vec<SourceJournalistKeyResponse>
pub fn handle_source_journalist_key_request<R: RngCore + CryptoRng>( &mut self, _request: SourceJournalistKeyRequest, rng: &mut R, ) -> Vec<SourceJournalistKeyResponse>
Handle source journalist key request (step 5)
Sourcepub fn handle_message_submit<R: RngCore + CryptoRng>(
&mut self,
message: Envelope,
rng: &mut R,
) -> Result<Uuid, Error>
pub fn handle_message_submit<R: RngCore + CryptoRng>( &mut self, message: Envelope, rng: &mut R, ) -> Result<Uuid, Error>
Handle message submission (step 6 for sources, step 9 for journalists)
Sourcepub fn handle_request_challenges<R: RngCore + CryptoRng>(
&self,
_request: MessageChallengeFetchRequest,
rng: &mut R,
) -> Result<MessageChallengeFetchResponse, Error>
pub fn handle_request_challenges<R: RngCore + CryptoRng>( &self, _request: MessageChallengeFetchRequest, rng: &mut R, ) -> Result<MessageChallengeFetchResponse, Error>
Compute “hints”/challenges for message id fetch request (step 7)
Sourcepub fn handle_message_fetch(
&self,
request: MessageFetchRequest,
) -> Option<Envelope>
pub fn handle_message_fetch( &self, request: MessageFetchRequest, ) -> Option<Envelope>
Handle message ID fetch request (step 7)
TODO: Nothing here prevents someone from requesting messages that aren’t theirs? Should request messages have a signature? Handle message fetch request (step 8/10)