ovunto_security/traits/
encrypt.rs

1use crate::{CipherMessage, FromBytes, IntoBytes, Key, Result};
2
3pub trait Encrypt: Sized {
4    type Encrypted;
5
6    fn encrypt(self, key: Key) -> Result<Self::Encrypted>;
7}
8
9pub trait Decrypt<T>: Sized {
10    fn decrypt(self, key: Key) -> Result<T>;
11}
12
13impl<T: IntoBytes> Encrypt for T {
14    type Encrypted = CipherMessage;
15
16    fn encrypt(self, key: Key) -> Result<Self::Encrypted> {
17        let bytes = self.into_bytes();
18        key.encrypt(bytes.as_slice())
19    }
20}
21
22impl<T: FromBytes> Decrypt<T> for CipherMessage {
23    fn decrypt(self, key: Key) -> Result<T> {
24        let bytes = key.decrypt(self)?;
25
26        T::try_from_bytes(bytes.as_slice())
27    }
28}