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
46pub trait Enrollable: sealed::Sealed {
47 fn signing_key(&self) -> &VerifyingKey;
48 fn enroll(&self) -> Enrollment;
49 fn signed_keybundles(&self) -> Vec<SignedKeyBundlePublic>;
52}
53
54pub trait UserSecret: sealed::Sealed {
61 fn num_bundles(&self) -> usize;
62 fn fetch_keypair(&self) -> (&DHPrivateKey, &DHPublicKey);
63 fn message_auth_key(&self) -> &MessagePrivateKey;
65 fn message_auth_pk(&self) -> &MessagePublicKey;
67 fn build_message(&self, message: Vec<u8>) -> Plaintext;
68 fn keybundles(&self) -> Vec<&MessageKeyBundle>;
69}
70
71pub(crate) trait RestrictedApi: sealed::Sealed {}