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 60 kXz = 95, 61 kJpeg = 96, 62 kWavPack = 97, 63 kPPMd = 98, 64 kWzAES = 99 65 }; 66 67 const Byte kMadeByProgramVersion = 63; 68 69 const Byte kExtractVersion_Default = 10; 70 const Byte kExtractVersion_Dir = 20; 71 const Byte kExtractVersion_ZipCrypto = 20; 72 const Byte kExtractVersion_Deflate = 20; 73 const Byte kExtractVersion_Deflate64 = 21; 74 const Byte kExtractVersion_Zip64 = 45; 75 const Byte kExtractVersion_BZip2 = 46; 76 const Byte kExtractVersion_Aes = 51; 77 const Byte kExtractVersion_LZMA = 63; 78 const Byte kExtractVersion_PPMd = 63; 79 const Byte kExtractVersion_Xz = 20; // test it 80 } 81 82 namespace NExtraID 83 { 84 enum 85 { 86 kZip64 = 0x01, 87 kNTFS = 0x0A, 88 kStrongEncrypt = 0x17, 89 kUnixTime = 0x5455, 90 kUnixExtra = 0x5855, 91 kIzUnicodeComment = 0x6375, 92 kIzUnicodeName = 0x7075, 93 kWzAES = 0x9901 94 }; 95 } 96 97 namespace NNtfsExtra 98 { 99 const UInt16 kTagTime = 1; 100 enum 101 { 102 kMTime = 0, 103 kATime, 104 kCTime 105 }; 106 } 107 108 namespace NUnixTime 109 { 110 enum 111 { 112 kMTime = 0, 113 kATime, 114 kCTime 115 }; 116 } 117 118 namespace NUnixExtra 119 { 120 enum 121 { 122 kATime = 0, 123 kMTime 124 }; 125 } 126 127 namespace NFlags 128 { 129 const unsigned kEncrypted = 1 << 0; 130 const unsigned kLzmaEOS = 1 << 1; 131 const unsigned kDescriptorUsedMask = 1 << 3; 132 const unsigned kStrongEncrypted = 1 << 6; 133 const unsigned kUtf8 = 1 << 11; 134 const unsigned kAltStream = 1 << 14; 135 136 const unsigned kImplodeDictionarySizeMask = 1 << 1; 137 const unsigned kImplodeLiteralsOnMask = 1 << 2; 138 139 /* 140 const unsigned kDeflateTypeBitStart = 1; 141 const unsigned kNumDeflateTypeBits = 2; 142 const unsigned kNumDeflateTypes = (1 << kNumDeflateTypeBits); 143 const unsigned kDeflateTypeMask = (1 << kNumDeflateTypeBits) - 1; 144 */ 145 } 146 147 namespace NHostOS 148 { 149 enum EEnum 150 { 151 kFAT = 0, 152 kAMIGA = 1, 153 kVMS = 2, // VAX/VMS 154 kUnix = 3, 155 kVM_CMS = 4, 156 kAtari = 5, // what if it's a minix filesystem? [cjh] 157 kHPFS = 6, // filesystem used by OS/2 (and NT 3.x) 158 kMac = 7, 159 kZ_System = 8, 160 kCPM = 9, 161 kTOPS20 = 10, // pkzip 2.50 NTFS 162 kNTFS = 11, // filesystem used by Windows NT 163 kQDOS = 12, // SMS/QDOS 164 kAcorn = 13, // Archimedes Acorn RISC OS 165 kVFAT = 14, // filesystem used by Windows 95, NT 166 kMVS = 15, 167 kBeOS = 16, // hybrid POSIX/database filesystem 168 kTandem = 17, 169 kOS400 = 18, 170 kOSX = 19 171 }; 172 } 173 174 175 namespace NAmigaAttrib 176 { 177 const UInt32 kIFMT = 06000; // Amiga file type mask 178 const UInt32 kIFDIR = 04000; // Amiga directory 179 const UInt32 kIFREG = 02000; // Amiga regular file 180 const UInt32 kIHIDDEN = 00200; // to be supported in AmigaDOS 3.x 181 const UInt32 kISCRIPT = 00100; // executable script (text command file) 182 const UInt32 kIPURE = 00040; // allow loading into resident memory 183 const UInt32 kIARCHIVE = 00020; // not modified since bit was last set 184 const UInt32 kIREAD = 00010; // can be opened for reading 185 const UInt32 kIWRITE = 00004; // can be opened for writing 186 const UInt32 kIEXECUTE = 00002; // executable image, a loadable runfile 187 const UInt32 kIDELETE = 00001; // can be deleted 188 } 189 } 190 191 }} 192 193 #endif 194