zip_core/
signature.rs

1use crate::{
2    partial::PartialRecord,
3    raw::{
4        ArchiveExtraDataRecordFixed, CentralDirectoryHeaderFixed, DataDescriptor, DataDescriptorSignature,
5        DataDescriptorZip64Signature, DigitalSignatureFixed, EndOfCentralDirectoryFixed, LocalFileHeaderFixed,
6        Zip64EndOfCentralDirectoryFixed, Zip64EndOfCentralDirectoryLocator,
7    },
8};
9
10/// implemented for all types containing a signature
11pub trait Signature {
12    fn is_valid_signature(&self) -> bool;
13}
14
15impl<T> Signature for T
16where
17    T: PartialRecord,
18    T::Partial: Signature,
19{
20    fn is_valid_signature(&self) -> bool { self.get_partial().is_valid_signature() }
21}
22
23impl Signature for LocalFileHeaderFixed {
24    fn is_valid_signature(&self) -> bool { self.local_file_header_signature == Self::LOCAL_FILE_HEADER_SIGNATURE }
25}
26
27impl Signature for DataDescriptorSignature {
28    fn is_valid_signature(&self) -> bool { self.signature == DataDescriptor::SIGNATURE }
29}
30
31impl Signature for DataDescriptorZip64Signature {
32    fn is_valid_signature(&self) -> bool { self.signature == DataDescriptor::SIGNATURE }
33}
34
35impl Signature for ArchiveExtraDataRecordFixed {
36    fn is_valid_signature(&self) -> bool { self.archive_extra_data_signature == Self::ARCHIVE_EXTRA_DATE_SIGNATURE }
37}
38
39impl Signature for CentralDirectoryHeaderFixed {
40    fn is_valid_signature(&self) -> bool { self.central_file_header_signature == Self::CENTRAL_FILE_HEADER_SIGNATURE }
41}
42
43impl Signature for DigitalSignatureFixed {
44    fn is_valid_signature(&self) -> bool { self.header_signature == Self::HEADER_SIGNATURE }
45}
46
47impl Signature for Zip64EndOfCentralDirectoryFixed {
48    fn is_valid_signature(&self) -> bool {
49        self.zip64_end_of_central_dir_signature == Self::ZIP64_END_OF_CENTRAL_DIR_SIGNATURE
50    }
51}
52
53impl Signature for Zip64EndOfCentralDirectoryLocator {
54    fn is_valid_signature(&self) -> bool {
55        self.zip64_end_of_central_dir_locator_signature == Self::ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIGNATURE
56    }
57}
58
59impl Signature for EndOfCentralDirectoryFixed {
60    fn is_valid_signature(&self) -> bool { self.end_of_central_dir_signature == Self::END_OF_CENTRAL_DIR_SIGNATURE }
61}