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: SettingsImplementations§
Source§impl E2e
impl E2e
Sourcepub fn vaults_allowed(&self) -> bool
pub fn vaults_allowed(&self) -> bool
Whether vaults can be made here: the server has them and the tenant does not forbid them.
Sourcepub async fn open_names(
&mut self,
client: &Client,
account: &str,
nodes: &mut [FileNode],
)
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.
Sourcepub async fn open_name(
&mut self,
client: &Client,
account: &str,
vault: &str,
sealed: &str,
) -> Option<String>
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.
Sourcepub async fn name_in(
&mut self,
client: &Client,
account: &str,
vault: &str,
name: &str,
) -> Result<(String, String)>
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.
Sourcepub async fn seal_content(
&mut self,
client: &Client,
account: &str,
vault: &str,
data: Vec<u8>,
) -> Result<Vec<u8>>
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.
Sourcepub async fn open_content(
&mut self,
client: &Client,
account: &str,
vault: &str,
sealed: Vec<u8>,
) -> Result<Vec<u8>>
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.
Sourcepub async fn move_in(
&mut self,
client: &Client,
account: &str,
vault: &str,
id: &str,
parent: &str,
name: &str,
) -> Result<()>
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.
Sourcepub async fn create_vault(
&mut self,
client: &Client,
account: &str,
parent: Option<&str>,
name: &str,
) -> Result<String>
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.
Sourcepub async fn create_directory_in(
&mut self,
client: &Client,
account: &str,
vault: &str,
parent: &str,
name: &str,
) -> Result<()>
pub async fn create_directory_in( &mut self, client: &Client, account: &str, vault: &str, parent: &str, name: &str, ) -> Result<()>
A directory inside a vault.
Sourcepub async fn make_directory_in(
&mut self,
client: &Client,
account: &str,
vault: &str,
parent: &str,
name: &str,
) -> Result<String>
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.
Sourcepub async fn rename_in(
&mut self,
client: &Client,
account: &str,
node: &FileNode,
name: &str,
) -> Result<()>
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.
Sourcepub 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<()>
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.
Sourcepub async fn download_from(
&mut self,
client: &Client,
account: &str,
node: &FileNode,
) -> Result<Vec<u8>>
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.
Sourcepub async fn save_from(
&mut self,
client: &Client,
account: &str,
node: &FileNode,
path: &Path,
) -> Result<()>
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.
Sourcepub async fn give_vault_keys(
&mut self,
client: &Client,
account: &str,
vault: &str,
people: &[Principal],
) -> Result<Vec<Principal>>
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
impl E2e
Sourcepub async fn load(client: &Client) -> Result<E2e>
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.
Sourcepub async fn refresh(&mut self, client: &Client) -> Result<()>
pub async fn refresh(&mut self, client: &Client) -> Result<()>
Reads keys and settings again, keeping what is unlocked.
Sourcepub async fn setup(&mut self, client: &Client, kind: Kind) -> Result<String>
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.
Sourcepub fn current_key(&self) -> Option<&Key>
pub fn current_key(&self) -> Option<&Key>
The key in use (not retired).
pub fn has_key(&self) -> bool
pub fn is_unlocked(&self) -> bool
Sourcepub fn unlock(&mut self, code: &str) -> Result<()>
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.
Sourcepub async fn lookup(
&mut self,
client: &Client,
addresses: &[String],
) -> Result<BTreeMap<String, Vec<PublicKey>>>
pub async fn lookup( &mut self, client: &Client, addresses: &[String], ) -> Result<BTreeMap<String, Vec<PublicKey>>>
The public keys of addresses (asked once per run).
Sourcepub fn open_summary(&self, email: &mut EmailSummary)
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.
Sourcepub async fn open(
&mut self,
client: &Client,
account: &str,
email: Email,
) -> Result<Email>
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.
Sourcepub async fn plan(
&mut self,
client: &Client,
account: &str,
identity: &Identity,
draft: &Draft,
) -> Plan
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.
Sourcepub fn draft_plan(
&self,
client: &Client,
account: &str,
identity: &Identity,
draft: &Draft,
) -> Plan
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.
Sourcepub async fn send(
&self,
client: &Client,
outgoing: Outgoing<'_>,
recipients: &[PublicKey],
) -> Result<()>
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.
Sourcepub async fn keep(
&self,
client: &Client,
outgoing: Outgoing<'_>,
keys: &[PublicKey],
) -> Result<()>
pub async fn keep( &self, client: &Client, outgoing: Outgoing<'_>, keys: &[PublicKey], ) -> Result<()>
Keeps a draft encrypted to keys (from draft_plan).
Sourcepub async fn send_with(
&self,
client: &Client,
outgoing: Outgoing<'_>,
inline: &[InlineFile],
recipients: &[PublicKey],
) -> Result<()>
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).
Trait Implementations§
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> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
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
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
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
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.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
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.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
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.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
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.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
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.