Skip to main content

E2e

Struct E2e 

Source
pub struct E2e {
    pub available: bool,
    pub keys: Vec<Key>,
    pub settings: Settings,
    /* private fields */
}
Expand description

What this run knows of end-to-end encryption: whether the server has it, the account’s keys and settings, those unlocked here, and the public keys of others looked up so far.

Fields§

§available: bool§keys: Vec<Key>§settings: Settings

Implementations§

Source§

impl E2e

Source

pub fn vaults_allowed(&self) -> bool

Whether vaults can be made here: the server has them and the tenant does not forbid them.

Source

pub async fn open_names( &mut self, client: &Client, account: &str, nodes: &mut [FileNode], )

Fills in the real names of nodes in vaults whose key is at hand; the others stay locked, named by their id.

Source

pub async fn open_name( &mut self, client: &Client, account: &str, vault: &str, sealed: &str, ) -> Option<String>

The real name of a node in a vault (kernoid:encryptedName) – None while the vault’s key is not at hand.

Source

pub async fn name_in( &mut self, client: &Client, account: &str, vault: &str, name: &str, ) -> Result<(String, String)>

A name for a node in a vault: the id it gets as name and the real name encrypted, for kernoid:encryptedName.

Source

pub async fn seal_content( &mut self, client: &Client, account: &str, vault: &str, data: Vec<u8>, ) -> Result<Vec<u8>>

Content for a vault: encrypted to its key and signed with the account’s, as a file’s blob there is.

Source

pub async fn open_content( &mut self, client: &Client, account: &str, vault: &str, sealed: Vec<u8>, ) -> Result<Vec<u8>>

The content of a file of a vault, decrypted.

Source

pub async fn move_in( &mut self, client: &Client, account: &str, vault: &str, id: &str, parent: &str, name: &str, ) -> Result<()>

Moves or renames a node within its vault: a new id for its name, the real name encrypted anew.

Source

pub async fn create_vault( &mut self, client: &Client, account: &str, parent: Option<&str>, name: &str, ) -> Result<String>

Makes a vault in parent (None: the top of the store): its key here, the secret wrapped for the account’s own key, the name encrypted. Returns its id.

Source

pub async fn create_directory_in( &mut self, client: &Client, account: &str, vault: &str, parent: &str, name: &str, ) -> Result<()>

A directory inside a vault.

Source

pub async fn make_directory_in( &mut self, client: &Client, account: &str, vault: &str, parent: &str, name: &str, ) -> Result<String>

A directory inside a vault; returns its id.

Source

pub async fn rename_in( &mut self, client: &Client, account: &str, node: &FileNode, name: &str, ) -> Result<()>

Renames a node in a vault: a new id for a name, the real one encrypted anew.

Source

pub async fn upload_into( &mut self, client: &Client, account: &str, vault: &str, parent: &str, path: &Path, existing: Option<&FileNode>, progress: impl FnMut(u64, u64) + Send + 'static, ) -> Result<()>

Uploads a file into a directory of a vault, encrypted here to the vault’s key and signed with the account’s; existing (a file of the same real name) gets the new content.

Source

pub async fn download_from( &mut self, client: &Client, account: &str, node: &FileNode, ) -> Result<Vec<u8>>

Downloads a file of a vault and decrypts it here; returns its content.

Source

pub async fn save_from( &mut self, client: &Client, account: &str, node: &FileNode, path: &Path, ) -> Result<()>

Downloads a file of a vault, decrypted, into path.

Source

pub async fn give_vault_keys( &mut self, client: &Client, account: &str, vault: &str, people: &[Principal], ) -> Result<Vec<Principal>>

After sharing a vault: gives its key to every person shared with who has a key of their own and no copy yet. Groups and people without a key wait (OPEN: a group’s members, as in the web app). Returns those who wait.

Source§

impl E2e

Source

pub async fn load(client: &Client) -> Result<E2e>

Reads the account’s keys and settings – nothing if the server has no end-to-end extension.

Source

pub async fn refresh(&mut self, client: &Client) -> Result<()>

Reads keys and settings again, keeping what is unlocked.

Source

pub async fn setup(&mut self, client: &Client, kind: Kind) -> Result<String>

Makes the account’s key here (RFC 0006, 4.2) for the addresses it sends from, stores it with a copy protected by a new recovery code – and the tenant’s copy when its policy recovers keys (8.2) – and keeps it unlocked. Returns the recovery code, to be shown once.

Source

pub fn current_key(&self) -> Option<&Key>

The key in use (not retired).

Source

pub fn has_key(&self) -> bool

Source

pub fn is_unlocked(&self) -> bool

Source

pub fn unlock(&mut self, code: &str) -> Result<()>

Unlocks the key in use with the recovery code (as typed: separators and case do not matter) – and retired keys whose copy the same code opens. They stay in this process’s memory only.

Source

pub fn lock(&mut self)

Forgets the unlocked keys.

Source

pub async fn lookup( &mut self, client: &Client, addresses: &[String], ) -> Result<BTreeMap<String, Vec<PublicKey>>>

The public keys of addresses (asked once per run).

Source

pub fn open_summary(&self, email: &mut EmailSummary)

Fills in subject, preview and attachments of an encrypted email from its summary, once the key is unlocked.

Source

pub async fn open( &mut self, client: &Client, account: &str, email: Email, ) -> Result<Email>

An email to read: an encrypted one downloaded, decrypted and read into its parts here, its signature checked against its sender’s keys – locked if the key is not unlocked or does not open it. Other emails as they are.

Source

pub async fn plan( &mut self, client: &Client, account: &str, identity: &Identity, draft: &Draft, ) -> Plan

How a message goes out: end-to-end encrypted if the key is unlocked, it is sent from the user’s own account as an address of the key, and every recipient has a key (RFC 0006, 5.3) – else as before.

Source

pub fn draft_plan( &self, client: &Client, account: &str, identity: &Identity, draft: &Draft, ) -> Plan

Whether a draft is kept encrypted to the user’s own key – or why not.

Source

pub async fn send( &self, client: &Client, outgoing: Outgoing<'_>, recipients: &[PublicKey], ) -> Result<()>

Sends end-to-end encrypted to recipients (from plan): the message built, encrypted and signed here, uploaded as it is, imported into Drafts with its summary encrypted to the sender, submitted with an envelope (To and Cc), and moved to Sent once sent.

Source

pub async fn keep( &self, client: &Client, outgoing: Outgoing<'_>, keys: &[PublicKey], ) -> Result<()>

Keeps a draft encrypted to keys (from draft_plan).

Source

pub async fn send_with( &self, client: &Client, outgoing: Outgoing<'_>, inline: &[InlineFile], recipients: &[PublicKey], ) -> Result<()>

send, with files held in memory attached as well – the attachments of an encrypted message forwarded (Email::decrypted_attachments).

Source

pub async fn keep_with( &self, client: &Client, outgoing: Outgoing<'_>, inline: &[InlineFile], keys: &[PublicKey], ) -> Result<()>

keep, with files held in memory attached as well.

Trait Implementations§

Source§

impl Debug for E2e

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for E2e

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

§

impl !Freeze for E2e

§

impl RefUnwindSafe for E2e

§

impl Send for E2e

§

impl Sync for E2e

§

impl Unpin for E2e

§

impl UnsafeUnpin for E2e

§

impl UnwindSafe for E2e

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> Conv for T

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> FmtForward for T

Source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
Source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
Source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
Source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
Source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
Source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
Source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
Source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
Source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Pipe for T
where T: ?Sized,

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
Source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
Source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
Source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
Source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more