securedrop_protocol_minimal/
traits.rs1use crate::VerifyingKey;
2use crate::message::MessageKeyPair;
3use crate::message::MessagePublicKey;
4use crate::metadata::MetadataPublicKey;
5use crate::primitives::ristretto255::DHPrivateKey;
6use crate::primitives::ristretto255::DHPublicKey;
7use crate::sign::{JournalistEphemeralKey, JournalistLongTermKey, Signature};
8use alloc::vec::Vec;
9
10use crate::wire::bundle::{SignedKeyBundlePublic, SignedLongtermKeyBundle};
11use crate::wire::enrollment::Enrollment;
12
13use crate::client::plaintext::Plaintext;
14use crate::keys::{KeyBundlePublic, MessageKeyBundle};
15
16use crate::sealed;
19
20pub trait UserPublic {
32 fn fetch_pk(&self) -> &DHPublicKey;
33 fn message_auth_pk(&self) -> &MessagePublicKey;
35 fn message_metadata_pk(&self) -> &MetadataPublicKey;
36 fn message_enc_pk(&self) -> &MessagePublicKey;
38}
39
40pub trait JournalistPublic: UserPublic {
41 fn verifying_key(&self) -> &VerifyingKey;
42 fn self_signature(&self) -> &Signature<JournalistLongTermKey>;
43 fn signed_keybytes(&self) -> &SignedLongtermKeyBundle;
44 fn ephemeral_bundle(&self) -> &KeyBundlePublic;
45 fn ephemeral_signature(&self) -> &Signature<JournalistEphemeralKey>;
46}
47
48#[cfg(not(hax))]
49pub trait Enrollable: sealed::Sealed {
50 fn signing_key(&self) -> &VerifyingKey;
52 fn enroll(&self) -> Enrollment;
53 fn signed_keybundles(&self) -> Vec<SignedKeyBundlePublic>;
56}
57
58#[cfg(hax)]
59pub trait Enrollable {
60 fn signing_key(&self) -> &VerifyingKey;
61 fn enroll(&self) -> Enrollment;
62 fn signed_keybundles(&self) -> Vec<SignedKeyBundlePublic>;
65}
66
67#[cfg(not(hax))]
74pub trait UserSecret: sealed::Sealed {
75 fn num_bundles(&self) -> usize;
76 fn fetch_keypair(&self) -> (&DHPrivateKey, &DHPublicKey);
77 fn message_auth_keypair(&self) -> &MessageKeyPair;
79 fn build_message(&self, message: Vec<u8>) -> Plaintext;
80 fn keybundles(&self) -> Vec<&MessageKeyBundle>;
81}
82
83#[cfg(hax)]
84pub trait UserSecret {
85 fn num_bundles(&self) -> usize;
86 fn fetch_keypair(&self) -> (&DHPrivateKey, &DHPublicKey);
87 fn message_auth_keypair(&self) -> &MessageKeyPair;
89 fn build_message(&self, message: Vec<u8>) -> Plaintext;
90 fn keybundles(&self) -> Vec<&MessageKeyBundle>;
91}
92
93#[cfg(not(hax))]
95pub trait RestrictedApi: sealed::Sealed {}
96
97#[cfg(hax)]
98pub trait RestrictedApi {}