securedrop_protocol_minimal/
traits.rs1use crate::VerifyingKey;
2use crate::message::{MessagePrivateKey, MessagePublicKey};
3use crate::metadata::MetadataPublicKey;
4use crate::primitives::x25519::DHPrivateKey;
5use crate::primitives::x25519::DHPublicKey;
6use crate::sign::{JournalistEphemeralKey, JournalistLongTermKey, Signature};
7use alloc::vec::Vec;
8
9use crate::ciphertext::Plaintext;
10use crate::keys::{
11 Enrollment, KeyBundlePublic, MessageKeyBundle, SignedKeyBundlePublic, SignedLongtermPubKeyBytes,
12};
13
14use crate::sealed;
17
18pub trait UserPublic {
30 fn fetch_pk(&self) -> &DHPublicKey;
31 fn message_auth_pk(&self) -> &MessagePublicKey;
33 fn message_metadata_pk(&self) -> &MetadataPublicKey;
34 fn message_enc_pk(&self) -> &MessagePublicKey;
36}
37
38pub trait JournalistPublic: UserPublic {
39 fn verifying_key(&self) -> &VerifyingKey;
40 fn self_signature(&self) -> &Signature<JournalistLongTermKey>;
41 fn signed_keybytes(&self) -> &SignedLongtermPubKeyBytes;
42 fn ephemeral_bundle(&self) -> &KeyBundlePublic;
43 fn ephemeral_signature(&self) -> &Signature<JournalistEphemeralKey>;
44}
45
46#[cfg(not(hax))]
47pub trait Enrollable: sealed::Sealed {
48 fn signing_key(&self) -> &VerifyingKey;
50 fn enroll(&self) -> Enrollment;
51 fn signed_keybundles(&self) -> Vec<SignedKeyBundlePublic>;
54}
55
56#[cfg(hax)]
57pub trait Enrollable {
58 fn signing_key(&self) -> &VerifyingKey;
59 fn enroll(&self) -> Enrollment;
60 fn signed_keybundles(&self) -> Vec<SignedKeyBundlePublic>;
63}
64
65#[cfg(not(hax))]
72pub trait UserSecret: sealed::Sealed {
73 fn num_bundles(&self) -> usize;
74 fn fetch_keypair(&self) -> (&DHPrivateKey, &DHPublicKey);
75 fn message_auth_key(&self) -> &MessagePrivateKey;
77 fn own_message_auth_pk(&self) -> &MessagePublicKey;
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_key(&self) -> &MessagePrivateKey;
89 fn own_message_auth_pk(&self) -> &MessagePublicKey;
91 fn build_message(&self, message: Vec<u8>) -> Plaintext;
92 fn keybundles(&self) -> Vec<&MessageKeyBundle>;
93}
94
95#[cfg(not(hax))]
97pub trait RestrictedApi: sealed::Sealed {}
98
99#[cfg(hax)]
100pub trait RestrictedApi {}