1 // ZipHeader.h 2 3 #ifndef ZIP7_INC_ARCHIVE_ZIP_HEADER_H 4 #define ZIP7_INC_ARCHIVE_ZIP_HEADER_H 5 6 #include "../../../Common/MyTypes.h" 7 8 namespace NArchive { 9 namespace NZip { 10 11 const unsigned kMarkerSize = 4; 12 13 namespace NSignature 14 { 15 const UInt32 kLocalFileHeader = 0x04034B50; 16 const UInt32 kDataDescriptor = 0x08074B50; 17 const UInt32 kCentralFileHeader = 0x02014B50; 18 const UInt32 kEcd = 0x06054B50; 19 const UInt32 kEcd64 = 0x06064B50; 20 const UInt32 kEcd64Locator = 0x07064B50; 21 const UInt32 kSpan = 0x08074B50; 22 const UInt32 kNoSpan = 0x30304B50; // PK00, replaces kSpan, if there is only 1 segment 23 } 24 25 const unsigned kLocalHeaderSize = 4 + 26; // including signature 26 const unsigned kDataDescriptorSize32 = 4 + 4 + 4 * 2; // including signature 27 const unsigned kDataDescriptorSize64 = 4 + 4 + 8 * 2; // including signature 28 const unsigned kCentralHeaderSize = 4 + 42; // including signature 29 30 const unsigned kEcdSize = 22; // including signature 31 const unsigned kEcd64_MainSize = 44; 32 const unsigned kEcd64_FullSize = 12 + kEcd64_MainSize; 33 const unsigned kEcd64Locator_Size = 20; 34 35 namespace NFileHeader 36 { 37 namespace NCompressionMethod 38 { 39 enum EType 40 { 41 kStore = 0, 42 kShrink = 1, 43 kReduce1 = 2, 44 kReduce2 = 3, 45 kReduce3 = 4, 46 kReduce4 = 5, 47 kImplode = 6, 48 kTokenize = 7, 49 kDeflate = 8, 50 kDeflate64 = 9, 51 kPKImploding = 10, 52 53 kBZip2 = 12, 54 55 kLZMA = 14, 56 57 kTerse = 18, 58 kLz77 = 19, 59 kZstdPk = 20, 60 61 kZstdWz = 93, 62 kMP3 = 94, 63 kXz = 95, 64 kJpeg = 96, 65 kWavPack = 97, 66 kPPMd = 98, 67 kWzAES = 99 68 }; 69 70 const Byte kMadeByProgramVersion = 63; 71 72 const Byte kExtractVersion_Default = 10; 73 const Byte kExtractVersion_Dir = 20; 74 const Byte kExtractVersion_ZipCrypto = 20; 75 const Byte kExtractVersion_Deflate = 20; 76 const Byte kExtractVersion_Deflate64 = 21; 77 const Byte kExtractVersion_Zip64 = 45; 78 const Byte kExtractVersion_BZip2 = 46; 79 const Byte kExtractVersion_Aes = 51; 80 const Byte kExtractVersion_LZMA = 63; 81 const Byte kExtractVersion_PPMd = 63; 82 const Byte kExtractVersion_Xz = 20; // test it 83 } 84 85 namespace NExtraID 86 { 87 enum 88 { 89 kZip64 = 0x01, 90 kNTFS = 0x0A, 91 kUnix0 = 0x0D, // Info-ZIP : (UNIX) PK 92 kStrongEncrypt = 0x17, 93 kIzNtSecurityDescriptor = 0x4453, 94 kUnixTime = 0x5455, // "UT" (time) Info-ZIP 95 kUnix1 = 0x5855, // Info-ZIP 96 kIzUnicodeComment = 0x6375, 97 kIzUnicodeName = 0x7075, 98 kUnix2 = 0x7855, // Info-ZIP 99 kUnixN = 0x7875, // Info-ZIP 100 kWzAES = 0x9901, 101 kApkAlign = 0xD935 102 }; 103 } 104 105 namespace NNtfsExtra 106 { 107 const UInt16 kTagTime = 1; 108 enum 109 { 110 kMTime = 0, 111 kATime, 112 kCTime 113 }; 114 } 115 116 namespace NUnixTime 117 { 118 enum 119 { 120 kMTime = 0, 121 kATime, 122 kCTime 123 }; 124 } 125 126 namespace NUnixExtra 127 { 128 enum 129 { 130 kATime = 0, 131 kMTime 132 }; 133 } 134 135 namespace NFlags 136 { 137 const unsigned kEncrypted = 1 << 0; 138 const unsigned kLzmaEOS = 1 << 1; 139 const unsigned kDescriptorUsedMask = 1 << 3; 140 const unsigned kStrongEncrypted = 1 << 6; 141 const unsigned kUtf8 = 1 << 11; 142 const unsigned kAltStream = 1 << 14; 143 144 const unsigned kImplodeDictionarySizeMask = 1 << 1; 145 const unsigned kImplodeLiteralsOnMask = 1 << 2; 146 147 /* 148 const unsigned kDeflateTypeBitStart = 1; 149 const unsigned kNumDeflateTypeBits = 2; 150 const unsigned kNumDeflateTypes = (1 << kNumDeflateTypeBits); 151 const unsigned kDeflateTypeMask = (1 << kNumDeflateTypeBits) - 1; 152 */ 153 } 154 155 namespace NHostOS 156 { 157 enum EEnum 158 { 159 kFAT = 0, 160 kAMIGA = 1, 161 kVMS = 2, // VAX/VMS 162 kUnix = 3, 163 kVM_CMS = 4, 164 kAtari = 5, // what if it's a minix filesystem? [cjh] 165 kHPFS = 6, // filesystem used by OS/2 (and NT 3.x) 166 kMac = 7, 167 kZ_System = 8, 168 kCPM = 9, 169 kTOPS20 = 10, // pkzip 2.50 NTFS 170 kNTFS = 11, // filesystem used by Windows NT 171 kQDOS = 12, // SMS/QDOS 172 kAcorn = 13, // Archimedes Acorn RISC OS 173 kVFAT = 14, // filesystem used by Windows 95, NT 174 kMVS = 15, 175 kBeOS = 16, // hybrid POSIX/database filesystem 176 kTandem = 17, 177 kOS400 = 18, 178 kOSX = 19 179 }; 180 } 181 182 183 namespace NAmigaAttrib 184 { 185 const UInt32 kIFMT = 06000; // Amiga file type mask 186 const UInt32 kIFDIR = 04000; // Amiga directory 187 const UInt32 kIFREG = 02000; // Amiga regular file 188 const UInt32 kIHIDDEN = 00200; // to be supported in AmigaDOS 3.x 189 const UInt32 kISCRIPT = 00100; // executable script (text command file) 190 const UInt32 kIPURE = 00040; // allow loading into resident memory 191 const UInt32 kIARCHIVE = 00020; // not modified since bit was last set 192 const UInt32 kIREAD = 00010; // can be opened for reading 193 const UInt32 kIWRITE = 00004; // can be opened for writing 194 const UInt32 kIEXECUTE = 00002; // executable image, a loadable runfile 195 const UInt32 kIDELETE = 00001; // can be deleted 196 } 197 } 198 199 }} 200 201 #endif 202