ps_datachunk/encrypted/
mod.rs1
2use crate::utils;
3use crate::DataChunk;
4use crate::Result;
5use crate::SerializedDataChunk;
6use bytes::Bytes;
7use ps_buffer::Buffer;
8use ps_buffer::SharedBuffer;
9use ps_cypher::Encrypted;
10use ps_hash::Hash;
11
12#[derive(Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
13pub struct EncryptedDataChunk {
15 data: Buffer,
16 hash: Hash,
17 key: Hash,
18}
19
20impl EncryptedDataChunk {
21 pub fn decrypt(&self) -> Result<SerializedDataChunk> {
23 utils::decrypt(self.data_ref(), &self.key)
24 }
25
26 #[must_use]
27 pub const fn key(&self) -> Hash {
28 self.key
29 }
30
31 #[must_use]
32 pub const fn key_ref(&self) -> &Hash {
33 &self.key
34 }
35}
36
37impl DataChunk for EncryptedDataChunk {
38 fn data_ref(&self) -> &[u8] {
39 &self.data
40 }
41 fn hash_ref(&self) -> &Hash {
42 &self.hash
43 }
44 fn hash(&self) -> Hash {
45 self.hash
46 }
47
48 fn into_bytes(self) -> Bytes {
50 Bytes::from_owner(SharedBuffer::from(self.data))
51 }
52
53 fn into_owned(self) -> crate::OwnedDataChunk {
55 let Self { data, hash, key: _ } = self;
56
57 crate::OwnedDataChunk::from_data_and_hash(data, hash)
58 }
59}
60
61impl From<Encrypted> for EncryptedDataChunk {
62 fn from(value: Encrypted) -> Self {
63 Self {
64 data: value.bytes,
65 hash: value.hash,
66 key: value.key,
67 }
68 }
69}