1 // ZipHeader.h 2 3 #ifndef __ARCHIVE_ZIP_HEADER_H 4 #define __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 kStrongEncrypt = 0x17, 92 kIzNtSecurityDescriptor = 0x4453, 93 kUnixTime = 0x5455, 94 kUnixExtra = 0x5855, 95 kIzUnicodeComment = 0x6375, 96 kIzUnicodeName = 0x7075, 97 kUnix2Extra = 0x7855, 98 kUnix3Extra = 0x7875, 99 kWzAES = 0x9901, 100 kApkAlign = 0xD935 101 }; 102 } 103 104 namespace NNtfsExtra 105 { 106 const UInt16 kTagTime = 1; 107 enum 108 { 109 kMTime = 0, 110 kATime, 111 kCTime 112 }; 113 } 114 115 namespace NUnixTime 116 { 117 enum 118 { 119 kMTime = 0, 120 kATime, 121 kCTime 122 }; 123 } 124 125 namespace NUnixExtra 126 { 127 enum 128 { 129 kATime = 0, 130 kMTime 131 }; 132 } 133 134 namespace NFlags 135 { 136 const unsigned kEncrypted = 1 << 0; 137 const unsigned kLzmaEOS = 1 << 1; 138 const unsigned kDescriptorUsedMask = 1 << 3; 139 const unsigned kStrongEncrypted = 1 << 6; 140 const unsigned kUtf8 = 1 << 11; 141 const unsigned kAltStream = 1 << 14; 142 143 const unsigned kImplodeDictionarySizeMask = 1 << 1; 144 const unsigned kImplodeLiteralsOnMask = 1 << 2; 145 146 /* 147 const unsigned kDeflateTypeBitStart = 1; 148 const unsigned kNumDeflateTypeBits = 2; 149 const unsigned kNumDeflateTypes = (1 << kNumDeflateTypeBits); 150 const unsigned kDeflateTypeMask = (1 << kNumDeflateTypeBits) - 1; 151 */ 152 } 153 154 namespace NHostOS 155 { 156 enum EEnum 157 { 158 kFAT = 0, 159 kAMIGA = 1, 160 kVMS = 2, // VAX/VMS 161 kUnix = 3, 162 kVM_CMS = 4, 163 kAtari = 5, // what if it's a minix filesystem? [cjh] 164 kHPFS = 6, // filesystem used by OS/2 (and NT 3.x) 165 kMac = 7, 166 kZ_System = 8, 167 kCPM = 9, 168 kTOPS20 = 10, // pkzip 2.50 NTFS 169 kNTFS = 11, // filesystem used by Windows NT 170 kQDOS = 12, // SMS/QDOS 171 kAcorn = 13, // Archimedes Acorn RISC OS 172 kVFAT = 14, // filesystem used by Windows 95, NT 173 kMVS = 15, 174 kBeOS = 16, // hybrid POSIX/database filesystem 175 kTandem = 17, 176 kOS400 = 18, 177 kOSX = 19 178 }; 179 } 180 181 182 namespace NAmigaAttrib 183 { 184 const UInt32 kIFMT = 06000; // Amiga file type mask 185 const UInt32 kIFDIR = 04000; // Amiga directory 186 const UInt32 kIFREG = 02000; // Amiga regular file 187 const UInt32 kIHIDDEN = 00200; // to be supported in AmigaDOS 3.x 188 const UInt32 kISCRIPT = 00100; // executable script (text command file) 189 const UInt32 kIPURE = 00040; // allow loading into resident memory 190 const UInt32 kIARCHIVE = 00020; // not modified since bit was last set 191 const UInt32 kIREAD = 00010; // can be opened for reading 192 const UInt32 kIWRITE = 00004; // can be opened for writing 193 const UInt32 kIEXECUTE = 00002; // executable image, a loadable runfile 194 const UInt32 kIDELETE = 00001; // can be deleted 195 } 196 } 197 198 }} 199 200 #endif 201