SerdeEncryptSharedKeyDeterministic

Trait SerdeEncryptSharedKeyDeterministic 

Source
pub trait SerdeEncryptSharedKeyDeterministic {
    type S: TypedSerialized<T = Self>;

    // Provided methods
    fn encrypt(&self, shared_key: &SharedKey) -> Result<EncryptedMessage, Error>
       where Self: Serialize { ... }
    fn decrypt_owned(
        encrypted_message: &EncryptedMessage,
        shared_key: &SharedKey,
    ) -> Result<Self, Error>
       where Self: DeserializeOwned { ... }
    fn decrypt_ref<'de>(
        encrypted_message: &EncryptedMessage,
        shared_key: &SharedKey,
    ) -> Result<Self::S, Error>
       where Self: Deserialize<'de> { ... }
}
Expand description

Shared-key authenticated deterministic encryption for serde-serializable types.

§Features

  • Message authentication.
  • Same cipher-text for the same plain-text for eq-match in cipher-text. Note that this is more vulnerable than SerdeEncryptSharedKey because, for example, attackers can find repeated patterns in cipher-text and then guess repeated patterns in plain-text.
  • Uses small (32-byte) key.

§Anti-features

  • Identity authentication of sender nor receiver.

Good for both large and small message encryption / decryption.

Eq-match feature is used in encrypted indexes in RDBMS, for example.

§Examples

See: SerdeEncryptSharedKey, who has nearly the same usage.

§Algorithm

  • Encryption: XChaCha20
  • Message authentication: Poly1305 MAC
  • Fixed nonce.

Required Associated Types§

Source

type S: TypedSerialized<T = Self>

Serializer implementation

Provided Methods§

Source

fn encrypt(&self, shared_key: &SharedKey) -> Result<EncryptedMessage, Error>
where Self: Serialize,

Serialize and encrypt.

§Failures
Source

fn decrypt_owned( encrypted_message: &EncryptedMessage, shared_key: &SharedKey, ) -> Result<Self, Error>
where Self: DeserializeOwned,

Decrypt and deserialize into DeserializeOwned type.

§Failures
Source

fn decrypt_ref<'de>( encrypted_message: &EncryptedMessage, shared_key: &SharedKey, ) -> Result<Self::S, Error>
where Self: Deserialize<'de>,

Just decrypts cipher-text. Returned data must be deserialized later. Types implementing serde::Deserialize<'de> (not serde::de::DeserializeOwned) should use this function to resolve lifetime.

§Failures

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§