13 #include "../Codec/cStreamZLib.h"
16 #include "../Cipher/cCipherBase.h"
65 COMPMETHOD_Deflate = 8,
67 COMPMETHOD_Deflate64 = 9,
68 COMPMETHOD_BZIP2 = 12,
71 COMPMETHOD_WavPack = 97,
85 return WriteValue(s, x, 2);
89 return WriteValue(s, x, 4);
133 return m_nPosZipDir - (m_nSizeLocalDir + m_nSizeCentralDir);
139 return m_nSizeLocalDir;
140 return m_nPosZipDir - m_nSizeCentralDir;
145 return 4 + 18 + m_sGlobalComment.
GetLength();
149 return (
int)m_nNumberOfEntries;
171 FLG_MTIME = (1 << 0),
172 FLG_ATIME = (1 << 1),
173 FLG_CTIME = (1 << 2),
176 #ifdef USE_LITTLE_ENDIAN
177 static const WORD k_Type = MAKEWORD(
'U',
'T');
179 static const WORD k_Type = MAKEWORD(
'T',
'U');
196 return (WORD)(4 + 1 + (iTimes * 4));
206 if (!(m_bFlags & bFlag))
209 for (
int i = 0; i < 3; i++)
211 BYTE bFlagTmp = (1 << i);
212 if (!(bFlagTmp & m_bFlags))
214 if (bFlagTmp & bFlag)
236 ZFLG_COMPLVL1 = 0x02,
237 ZFLG_COMPLVL2 = 0x04,
238 ZFLG_SUMS_FOLLOW = 0x08,
239 ZFLG_ENHANCED = 0x0010,
241 ZFLG_STRONG_ENC = 0x0040,
242 ZFLG_UNUSED = 0x0F80,
243 ZFLG_RESERVED = 0xF000
246 static const int k_nFileNameMax = 256;
247 static const int k_nOffsetU = 14;
281 return 4 + 6 + 16 + 4 + m_wSize_FileName + m_wSize_Extra;
293 m_sFileName = sFileName;
294 m_wSize_FileName = (WORD)m_sFileName.
GetLength();
406 return 46 + m_wSize_FileName + m_wSize_Extra + m_sComment.
GetLength();
429 const UINT32* m_pcrc_32_tab;
433 void InitKeys(
const char* pszPass);
435 UINT32 GetCRC32(UINT32 crc, BYTE b)
const
437 return(m_pcrc_32_tab[(crc ^ b) & 0xff] ^ (crc >> 8));
442 UINT32 nTmp = ((UINT32)(m_keys[2]) & 0xffff) | 2;
443 return (BYTE)(((nTmp * (nTmp ^ 1)) >> 8) & 0xff);
445 void UpdateKeys(BYTE c);
452 void InitEncrypt(
const char* pszPass, BYTE* pBuffer, UINT32 dwCRCForCrypting);
456 BYTE t = CryptByte();
472 virtual HRESULT Cipher(BYTE* pOutput,
const BYTE* pInput,
size_t nSizeBytes)
override
478 for (
size_t i = 0; i < nSizeBytes; i++)
485 for (
size_t i = 0; i < nSizeBytes; i++)
#define GRAYCALL
declare calling convention for static functions so everyone knows the arg passing scheme....
Definition: GrayCore.h:36
#define CATTR_PACKED
Definition: GrayCore.h:87
#define GRAYLIB_LINK
Definition: GrayLibBase.h:35
INT32 HRESULT
_WIN32 style error codes. INT32
Definition: SysTypes.h:465
#define ASSERT(exp)
Definition: cDebugAssert.h:87
Definition: cZipDir.h:417
BYTE DecryptByte(BYTE c)
Definition: cZipDir.h:460
static const size_t k_LEN_HEAD
in bytes
Definition: cZipDir.h:424
bool InitDecrypt(const char *pszPass, BYTE *pBuffer)
virtual size_t get_BlockAlignSize() const override
Definition: cZipDir.h:467
virtual HRESULT Cipher(BYTE *pOutput, const BYTE *pInput, size_t nSizeBytes) override
Definition: cZipDir.h:472
void InitEncrypt(const char *pszPass, BYTE *pBuffer, UINT32 dwCRCForCrypting)
BYTE EncryptByte(BYTE c)
Definition: cZipDir.h:454
Definition: cZipDir.h:162
BYTE m_bFlags
Definition: cZipDir.h:182
cZipDataExUT(BYTE bFlags)
Definition: cZipDir.h:186
int get_TimeIdx(FLG_TYPE bFlag) const
Definition: cZipDir.h:204
WORD get_Size() const
Definition: cZipDir.h:192
FLG_TYPE
Definition: cZipDir.h:170
void InitFlags(BYTE bFlags)
Definition: cZipDir.h:198
static HRESULT GRAYCALL ReadU32(cStreamInput &stmIn, UINT32 *pX)
static HRESULT WriteU32(cStreamOutput &s, UINT32 x)
Definition: cZipDir.h:87
static HRESULT GRAYCALL ReadU16(cStreamInput &stmIn, WORD *pX)
COMPMETHOD_TYPE
Definition: cZipDir.h:53
@ COMPMETHOD_OLD_REDUCE4
deprecated.
Definition: cZipDir.h:61
@ COMPMETHOD_OLD_REDUCE2
deprecated.
Definition: cZipDir.h:59
@ COMPMETHOD_OLD_TOKENIZE
deprecated.
Definition: cZipDir.h:63
@ COMPMETHOD_OLD_SHRINK
deprecated.
Definition: cZipDir.h:57
@ COMPMETHOD_OLD_REDUCE3
deprecated.
Definition: cZipDir.h:60
@ COMPMETHOD_OLD_REDUCE1
deprecated.
Definition: cZipDir.h:58
@ COMPMETHOD_OLD_IMPLODE
deprecated.
Definition: cZipDir.h:62
static HRESULT WriteU16(cStreamOutput &s, WORD x)
Definition: cZipDir.h:83
WORD m_nNumDisk
number of the current disk, used for spanning ZIP, unsupported, always 0
Definition: cZipDir.h:104
STREAM_OFFSET_t get_PosCH0() const
Definition: cZipDir.h:135
int get_FileCount() const
Definition: cZipDir.h:147
cString m_sGlobalComment
comment Has WORD prefix for length.
Definition: cZipDir.h:113
UINT32 m_nSizeCentralDir
size of the entire central directory (all entries, not data). bytes
Definition: cZipDir.h:110
HRESULT ReadHeader(cStreamInput &s)
ZIP_SIZE_t m_nSizeLocalDir
size of the local directory + all compressed file data. bytes
Definition: cZipDir.h:111
HRESULT WriteHeader(cStreamOutput &s)
HRESULT SeekZipDir(cStreamInput &s)
size_t get_SizeCHD() const
Definition: cZipDir.h:142
WORD m_nNumberOfEntries_CD
total number of entries/files in the central directory
Definition: cZipDir.h:108
WORD m_nNumDisk_CD
number the the disk with central directory, used for spanning ZIP, unsupported, always 0
Definition: cZipDir.h:105
HRESULT ReadZipDir(cStreamInput &s)
WORD m_nNumberOfEntries
total number of entries/files in the central directory on this disk
Definition: cZipDir.h:107
bool isValidParams() const
STREAM_OFFSET_t m_nPosZipDir
The absolute position of 'this' block in the .ZIP file. it can float from start. is relative to end o...
Definition: cZipDir.h:102
STREAM_OFFSET_t get_PosLH0() const
Definition: cZipDir.h:127
Definition: cZipDir.h:225
WORD m_wVersionNeeded
version needed to extract. 20 = PKUNZIP 2.0
Definition: cZipDir.h:250
UINT32 m_dwCRC
CRC-32 for the uncompressed file.
Definition: cZipDir.h:257
WORD m_wSize_FileName
MUST match m_sFileName.GetLength()
Definition: cZipDir.h:261
HRESULT ReadHeader0(cStreamInput &s, bool bLH)
ZIP_SIZE_t m_dwCompressedSize
compressed size bytes. number of bytes actually stored. plus crypt header size.
Definition: cZipDir.h:258
~cZipFileEntry0()
Definition: cZipDir.h:272
cStringF m_sFileName
name relative to some unknown root. ending in \ for directory.
Definition: cZipDir.h:264
ZIP_COMPLEV_TYPE get_CompLevel() const
cZipDataExUT * FindExUT() const
ZFLG_TYPE
Definition: cZipDir.h:233
void SetFileTimes(cTimeInt tCreated, cTimeInt tModified)
void AddExUT(const cZipDataExUT *pEx)
cStringF get_Name() const
Definition: cZipDir.h:287
UINT32 m_dwDosDate
last modified file date in DOS format. bit packed year,month,day,hour,min,second (accurate to 2 secon...
Definition: cZipDir.h:256
bool put_CompLevel(ZIP_COMPLEV_TYPE nCompLevel)
ZIP_SIZE_t m_dwUncompressedSize
uncompressed size bytes.
Definition: cZipDir.h:259
HRESULT WriteHeader0(cStreamOutput &s, bool bLH) const
void put_FileName(cStringF sFileName)
Definition: cZipDir.h:291
void SetCopy(const cZipFileEntry0 &h)
Definition: cZipDir.h:297
bool isValidParams() const
cHeapBlock m_Extra
extra field length. may contain UT. NOTE: NOT the same for LH and CH!
Definition: cZipDir.h:265
size_t get_SizeLH() const
Definition: cZipDir.h:278
WORD m_wZFlags
general purpose bit flags. ZFLG_TYPE, ZFLG_CRYPT
Definition: cZipDir.h:251
COMPMETHOD_TYPE m_eCompressionMethod
compression method. none=0, Z_DEFLATED=8, BZIP2=12, PPMd=98.
Definition: cZipDir.h:254
HRESULT WriteHeader0U(cStreamOutput &s) const
cTimeInt get_TimeCreated() const
cTimeInt get_DosDateAsTime() const
WORD m_wSize_Extra
size of m_Extra
Definition: cZipDir.h:262
cZipFileEntry0()
Definition: cZipDir.h:268
cTimeInt get_TimeModified() const
Definition: cZipDir.h:331
~cZipFileEntry1()
Definition: cZipDir.h:390
BYTE m_bVersion
version made by. 0=any. 20 = PKWARE 2.0
Definition: cZipDir.h:370
SYSTEM_TYPE m_eSystemMadeBy
0 = SYSTEM_MSDOS
Definition: cZipDir.h:371
WORD m_wDataTypeGuess
best guess about the data type: Z_BINARY or Z_ASCII. zstream.data_type.
Definition: cZipDir.h:376
void SetCopy(const cZipFileEntry1 &h)
cString m_sComment
file entry comment. WORD comment length
Definition: cZipDir.h:373
bool isMatch(const cZipFileEntry0 &entry) const
cZipFileEntry1(const cZipFileEntry1 &cp)
Definition: cZipDir.h:386
cZipFileEntry1()
Definition: cZipDir.h:382
SYSTEM_TYPE
Definition: cZipDir.h:343
@ SYSTEM_MVS
Definition: cZipDir.h:359
@ SYSTEM_ACORN_RISC
Unix like.
Definition: cZipDir.h:361
@ SYSTEM_ATARI_ST
Unix like.
Definition: cZipDir.h:353
@ SYSTEM_TANDEM
Unix like.
Definition: cZipDir.h:365
@ SYSTEM_BEOS
Unix like.
Definition: cZipDir.h:364
@ SYSTEM_Z_SYSTEM
Definition: cZipDir.h:356
@ SYSTEM_CPM
Definition: cZipDir.h:357
@ SYSTEM_WINDOWS_NTFS
like FILESYS_NTFS
Definition: cZipDir.h:358
@ SYSTEM_VSE
Definition: cZipDir.h:360
@ SYSTEM_VFAT
like FILESYS_FAT32
Definition: cZipDir.h:362
@ SYSTEM_UNIX
like FILESYS_NFS on Linux
Definition: cZipDir.h:351
@ SYSTEM_ALTERNATE_MVS
Definition: cZipDir.h:363
@ SYSTEM_MSDOS
like FILESYS_FAT
Definition: cZipDir.h:348
@ SYSTEM_OPENVMS
Unix like.
Definition: cZipDir.h:350
@ SYSTEM_VM_CMS
Definition: cZipDir.h:352
@ SYSTEM_OS2_HPFS
Definition: cZipDir.h:354
@ SYSTEM_MACINTOSH
Definition: cZipDir.h:355
@ SYSTEM_AMIGA
Definition: cZipDir.h:349
size_t get_SizeCH() const
Definition: cZipDir.h:403
WORD m_wDisk_num_start
disk number start
Definition: cZipDir.h:374
ZIP_SIZE_t m_nOffsetLocal
offset of this LH[X] from LH[0]. (4 bytes = ZIP_OFFSET_t)
Definition: cZipDir.h:379
UINT32 m_dwFileAttrFlags
external file attributes. _WIN32 ATTRIBUTE flags. FILEATTR_Directory = 0x20
Definition: cZipDir.h:377
HRESULT WriteHeader1(cStreamOutput &s) const
bool isValidParams() const
HRESULT ReadHeader1(cStreamInput &s)
StrLen_t GetLength() const noexcept
Definition: cString.h:183
bool SetCopy(const cHeapBlock &rSrc)
Definition: cHeap.h:355
Definition: cStream.h:126
< similar to the MFC CTime and cTimeSpan, not as accurate or large ranged as COleDateTime
Definition: cTimeInt.h:101
Definition: cCipherBase.h:111
ZIP_COMPLEV_TYPE
Definition: cStreamZLib.h:27
ZIP_MAGIC_TYPE
Definition: cZipDir.h:28
@ ZIP_MAGIC_DIREND
PK0506 = cZipDir = central header end block.
Definition: cZipDir.h:33
@ ZIP_MAGIC_LOCALENTRY
PK0304 = cZipFileEntry0 = local header. followed by compressed data.
Definition: cZipDir.h:31
@ ZIP_MAGIC_DIRENTRY
PK0102 = cZipFileEntry1 = central header directory entry.
Definition: cZipDir.h:32
@ ZIP_MAGIC_EXTLOC
PK0708 = ??
Definition: cZipDir.h:34
INT32 ZIP_OFFSET_t
relative file position in zip. offset relative to LH0.
Definition: cZipDir.h:24
ZIP_CTRL_TYPE_
Definition: cZipDir.h:38
@ ZIP_CTRL_FLAT
Definition: cZipDir.h:42
@ ZIP_CTRL_0
Definition: cZipDir.h:41
UINT32 ZIP_SIZE_t
size of a block
Definition: cZipDir.h:25
BYTE ZIP_CTRL_TYPE
Definition: cZipDir.h:44
LONG_PTR STREAM_OFFSET_t
Might be 64 or 32 bit. TODO SET USE_FILE_POS64.
Definition: cOSHandle.h:52
static BIT_ENUM_t Count1Bits(TYPE nMask) noexcept
Definition: cBits.h:127