MessageBuilder

Struct MessageBuilder 

Source
pub struct MessageBuilder<'a, R = DummyReader, E = NoEncryption> { /* private fields */ }
Expand description

Constructs message from a given data source.

All data is processed in a streaming fashion, with minimal memory allocations.

If the file size is known upfront (fixed buffer, or file source), the resulting packets will be fixed size lengths (unless compression is involved).

If the file size is not known upfront, partial packets will be generated, at each level (encryption, compression, literal data).

If the total data fits into a single chunk, a single fixed packet is generated.

Implementations§

Source§

impl Builder<'_, DummyReader>

Source

pub fn from_file(path: impl AsRef<Path>) -> Self

Source the data from the given file path.

Source

pub fn from_bytes(name: impl Into<Bytes>, bytes: impl Into<Bytes>) -> Self

Source the data from the given byte buffer.

Source§

impl<'a, R: Read> Builder<'a, R, NoEncryption>

Source

pub fn seipd_v1<RAND>( self, rng: RAND, sym_alg: SymmetricKeyAlgorithm, ) -> Builder<'a, R, EncryptionSeipdV1>
where RAND: CryptoRng + Rng,

Encrypt this message using Seipd V1.

Source§

impl<'a, R: Read> Builder<'a, R, NoEncryption>

Source

pub fn seipd_v2<RAND>( self, rng: RAND, sym_alg: SymmetricKeyAlgorithm, aead: AeadAlgorithm, chunk_size: ChunkSize, ) -> Builder<'a, R, EncryptionSeipdV2>
where RAND: CryptoRng + Rng,

Encrypt this message using Seipd V2.

Source§

impl<R: Read> Builder<'_, R, EncryptionSeipdV1>

Source

pub fn set_session_key(&mut self, sk: RawSessionKey) -> Result<&mut Self>

Overwrite the auto-generated session key with a user-provided one.

May only be called before adding any keys or symmetric message passwords!

CAUTION: The session key must be generated appropriately! If it’s not random, then encryption based on it does not provide privacy!

Source

pub fn encrypt_to_key<RAND, K>( &mut self, rng: RAND, pkey: &K, ) -> Result<&mut Self>
where RAND: CryptoRng + Rng, K: PublicKeyTrait,

Encrypt to a public key

Source

pub fn encrypt_to_key_anonymous<RAND, K>( &mut self, rng: RAND, pkey: &K, ) -> Result<&mut Self>
where RAND: CryptoRng + Rng, K: PublicKeyTrait,

Encrypt to a public key, but leave the recipient field unset

Source

pub fn encrypt_with_password( &mut self, s2k: StringToKey, msg_pw: &Password, ) -> Result<&mut Self>

Encrypt to a password.

Source

pub fn session_key(&self) -> &RawSessionKey

Returns the currently used session key.

WARNING: this is sensitive material, and leaking it can lead to a compromise of the data.

Source§

impl<R: Read> Builder<'_, R, EncryptionSeipdV2>

Source

pub fn set_session_key(&mut self, sk: RawSessionKey) -> Result<&mut Self>

Overwrite the auto-generated session key with a user-provided one.

May only be called before adding any keys or symmetric message passwords!

CAUTION: The session key must be generated appropriately! If it’s not random, then encryption based on it does not provide privacy!

Source

pub fn encrypt_to_key<RAND, K>( &mut self, rng: RAND, pkey: &K, ) -> Result<&mut Self>
where RAND: CryptoRng + Rng, K: PublicKeyTrait,

Encrypt to a public key

Source

pub fn encrypt_to_key_anonymous<RAND, K>( &mut self, rng: RAND, pkey: &K, ) -> Result<&mut Self>
where RAND: CryptoRng + Rng, K: PublicKeyTrait,

Encrypt to a public key, but leave the recipient field unset

Source

pub fn encrypt_with_password<RAND>( &mut self, rng: RAND, s2k: StringToKey, msg_pw: &Password, ) -> Result<&mut Self>
where RAND: Rng + CryptoRng,

Encrypt to a password.

Source

pub fn session_key(&self) -> &RawSessionKey

Returns the currently used session key.

WARNING: this is sensitive material, and leaking it can lead to a compromise of the data.

Source§

impl<R: Read> Builder<'_, R, NoEncryption>

Source

pub fn from_reader(file_name: impl Into<Bytes>, reader: R) -> Self

Source the data from a reader.

Source§

impl<'a, R: Read, E: Encryption> Builder<'a, R, E>

Source

pub fn data_mode(&mut self, mode: DataMode) -> Result<&mut Self>

Configure the DataMode for the literal data portion.

Defaults to DataMode::Binary

Alternatively, DataMode::Utf8 is supported. In this case, the payload must be valid UTF-8, with CR-LF line endings!

Source

pub fn sign_binary(&mut self) -> &mut Self

Configure the data signatures to use SignatureType::Binary.

This is the default.

Source

pub fn sign_text(&mut self) -> &mut Self

Configure the data signatures to use SignatureType::Text.

Source

pub fn partial_chunk_size(&mut self, size: u32) -> Result<&mut Self>

Set the chunk size, which controls how large partial packets will be.

Due to the restrictions on partial packet lengths, this size

  • must be larger than 512,
  • must be a power of 2.

Defaults to DEFAULT_PARTIAL_CHUNK_SIZE.

Source

pub fn compression(&mut self, compression: CompressionAlgorithm) -> &mut Self

Configure compression.

Defaults to no compression.

Source

pub fn sign( &mut self, key: &'a dyn SecretKeyTrait, key_pw: Password, hash_algorithm: HashAlgorithm, ) -> &mut Self

Produce a data signature with the signing key key.

Source

pub fn sign_with_subpackets( &mut self, key: &'a dyn SecretKeyTrait, key_pw: Password, hash_algorithm: HashAlgorithm, subpackets: SubpacketConfig, ) -> &mut Self

Produce a data signature with the signing key key and an explicit subpacket configuration.

This gives callers full control of the hashed and unhashed subpacket areas.

Source

pub fn to_writer<RAND, W>(self, rng: RAND, out: W) -> Result<()>
where RAND: Rng + CryptoRng, W: Write,

Write the data out to a writer.

Source

pub fn to_armored_writer<RAND, W>( self, rng: RAND, opts: ArmorOptions<'_>, out: W, ) -> Result<()>
where RAND: Rng + CryptoRng, W: Write,

Write the data not as binary, but ascii armor encoded.

Source

pub fn to_file<RAND, P>(self, rng: RAND, out_path: P) -> Result<()>
where RAND: Rng + CryptoRng, P: AsRef<Path>,

Write the data out directly to a file.

Source

pub fn to_armored_file<RAND, P>( self, rng: RAND, out_path: P, opts: ArmorOptions<'_>, ) -> Result<()>
where RAND: Rng + CryptoRng, P: AsRef<Path>,

Write the data out directly to a file.

Source

pub fn to_vec<RAND>(self, rng: RAND) -> Result<Vec<u8>>
where RAND: Rng + CryptoRng,

Write the data out directly to a Vec<u8>.

Source

pub fn to_armored_string<RAND>( self, rng: RAND, opts: ArmorOptions<'_>, ) -> Result<String>
where RAND: Rng + CryptoRng,

Write the data as ascii armored data, directly to a String.

Auto Trait Implementations§

§

impl<'a, R = Cursor<Vec<u8>>, E = NoEncryption> !Freeze for Builder<'a, R, E>

§

impl<'a, R = Cursor<Vec<u8>>, E = NoEncryption> !RefUnwindSafe for Builder<'a, R, E>

§

impl<'a, R = Cursor<Vec<u8>>, E = NoEncryption> !Send for Builder<'a, R, E>

§

impl<'a, R = Cursor<Vec<u8>>, E = NoEncryption> !Sync for Builder<'a, R, E>

§

impl<'a, R, E> Unpin for Builder<'a, R, E>
where E: Unpin, R: Unpin,

§

impl<'a, R = Cursor<Vec<u8>>, E = NoEncryption> !UnwindSafe for Builder<'a, R, E>

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<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, 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> 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 = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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