sendcipher_core/crypto/
blob.rs1use crate::crypto::blob_header::*;
6use crate::crypto::metadata::*;
7
8#[derive(Debug, Default)]
9pub struct Blob {
10 raw: Vec<u8>,
12 header: Option<BlobHeader>,
14 pos_after_header: Option<u64>,
16}
17
18impl Blob {
19 pub fn new(raw_blob: Vec<u8>) -> Self {
20 Blob {
21 raw: raw_blob,
22 header: None,
23 pos_after_header: None,
24 }
25 }
26
27 pub(crate) fn new_parsed(raw: Vec<u8>, blob_header: BlobHeader, pos_after_header: u64) -> Self {
28 Self {
29 raw: raw,
30 header: Some(blob_header),
31 pos_after_header: Some(pos_after_header),
32 }
33 }
34
35 pub fn data(&self) -> &Vec<u8> {
36 &self.raw
37 }
38 pub fn data_mut(&mut self) -> &mut Vec<u8> {
39 &mut self.raw
40 }
41
42 pub fn parse_header(&mut self) -> Result<&mut Self, crate::error::Error> {
43 let (header, pos) = BlobHeader::parse(&self.raw)?;
44 self.header = Some(header);
45 self.pos_after_header = Some(pos);
46 Ok(self)
47 }
48
49 pub fn get_header(&self) -> &Option<BlobHeader> {
50 &self.header
51 }
52
53 pub fn get_position_after_header(&self) -> Option<u64> {
54 self.pos_after_header
55 }
56}
57
58pub struct DecryptedBlob {
59 header: Option<BlobHeader>,
61 metadata: Option<Metadata>,
63 text: Vec<u8>,
65}
66
67impl DecryptedBlob {
68 pub fn new(header: BlobHeader, text: Vec<u8>, metadata: Metadata) -> Self {
69 Self {
70 header: Some(header),
71 metadata: Some(metadata),
72 text: text,
73 }
74 }
75
76 pub fn get_blob_header(&self) -> &Option<BlobHeader> {
77 &self.header
78 }
79
80 pub fn get_metadata(&self) -> &Option<Metadata> {
81 &self.metadata
82 }
83
84 pub fn get_text(&self) -> &Vec<u8> {
85 &self.text
86 }
87 pub fn get_text_mut(&mut self) -> &mut Vec<u8> {
88 &mut self.text
89 }
90}