21 #if !defined(ZIPARCHIVE_ZIPCRC32CRYPTOGRAPH_DOT_H)
22 #define ZIPARCHIVE_ZIPCRC32CRYPTOGRAPH_DOT_H
28 #include "zlib/zlib.h"
35 #define ZIPARCHIVE_ENCR_HEADER_LEN 12
48 memset(m_keys, 0, 3 *
sizeof(DWORD));
53 void Decode(
char* pBuffer, DWORD uSize)
55 for (DWORD i = 0; i < uSize; i++)
56 CryptDecode(pBuffer[i]);
58 void Encode(
char* pBuffer, DWORD uSize)
60 for (DWORD i = 0; i < uSize; i++)
61 CryptEncode(pBuffer[i]);
74 return ZIPARCHIVE_ENCR_HEADER_LEN;
88 static const z_crc_t* GetCRCTable()
90 return zarch_get_crc_table();
94 void CryptDecode(
char &c)
96 c ^= CryptDecryptByte();
100 char CryptDecryptByte()
102 int temp = (m_keys[2] & 0xffff) | 2;
103 return (
char)(((temp * (temp ^ 1)) >> 8) & 0xff);
105 void CryptInitKeys(CZipAutoBuffer& password);
106 void CryptUpdateKeys(
char c);
107 DWORD CryptCRC32(DWORD l,
char c)
109 const z_crc_t* CRC_TABLE = zarch_get_crc_table();
110 return (DWORD)CRC_TABLE[(l ^ c) & 0xff] ^ (l >> 8);
112 void CryptEncode(
char &c)
114 char t = CryptDecryptByte();