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::ciphertext::Plaintext;
11use crate::keys::{
12 Enrollment, KeyBundlePublic, MessageKeyBundle, SignedKeyBundlePublic, SignedLongtermPubKeyBytes,
13};
14
15use crate::sealed;
18
19pub trait UserPublic {
31 fn fetch_pk(&self) -> &DHPublicKey;
32 fn message_auth_pk(&self) -> &MessagePublicKey;
34 fn message_metadata_pk(&self) -> &MetadataPublicKey;
35 fn message_enc_pk(&self) -> &MessagePublicKey;
37}
38
39pub trait JournalistPublic: UserPublic {
40 fn verifying_key(&self) -> &VerifyingKey;
41 fn self_signature(&self) -> &Signature<JournalistLongTermKey>;
42 fn signed_keybytes(&self) -> &SignedLongtermPubKeyBytes;
43 fn ephemeral_bundle(&self) -> &KeyBundlePublic;
44 fn ephemeral_signature(&self) -> &Signature<JournalistEphemeralKey>;
45}
46
47#[cfg(not(hax))]
48pub trait Enrollable: sealed::Sealed {
49 fn signing_key(&self) -> &VerifyingKey;
51 fn enroll(&self) -> Enrollment;
52 fn signed_keybundles(&self) -> Vec<SignedKeyBundlePublic>;
55}
56
57#[cfg(hax)]
58pub trait Enrollable {
59 fn signing_key(&self) -> &VerifyingKey;
60 fn enroll(&self) -> Enrollment;
61 fn signed_keybundles(&self) -> Vec<SignedKeyBundlePublic>;
64}
65
66#[cfg(not(hax))]
73pub trait UserSecret: sealed::Sealed {
74 fn num_bundles(&self) -> usize;
75 fn fetch_keypair(&self) -> (&DHPrivateKey, &DHPublicKey);
76 fn message_auth_keypair(&self) -> &MessageKeyPair;
78 fn build_message(&self, message: Vec<u8>) -> Plaintext;
79 fn keybundles(&self) -> Vec<&MessageKeyBundle>;
80}
81
82#[cfg(hax)]
83pub trait UserSecret {
84 fn num_bundles(&self) -> usize;
85 fn fetch_keypair(&self) -> (&DHPrivateKey, &DHPublicKey);
86 fn message_auth_keypair(&self) -> &MessageKeyPair;
88 fn build_message(&self, message: Vec<u8>) -> Plaintext;
89 fn keybundles(&self) -> Vec<&MessageKeyBundle>;
90}
91
92#[cfg(not(hax))]
94pub trait RestrictedApi: sealed::Sealed {}
95
96#[cfg(hax)]
97pub trait RestrictedApi {}