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
50 void Decode(
char* pBuffer, DWORD uSize)
52 for (DWORD i = 0; i < uSize; i++)
53 CryptDecode(pBuffer[i]);
55 void Encode(
char* pBuffer, DWORD uSize)
57 for (DWORD i = 0; i < uSize; i++)
58 CryptEncode(pBuffer[i]);
71 return ZIPARCHIVE_ENCR_HEADER_LEN;
85 static const z_crc_t* GetCRCTable()
87 return zarch_get_crc_table();
91 void CryptDecode(
char &c)
93 c ^= CryptDecryptByte();
97 char CryptDecryptByte()
99 int temp = (m_keys[2] & 0xffff) | 2;
100 return (
char)(((temp * (temp ^ 1)) >> 8) & 0xff);
102 void CryptInitKeys(CZipAutoBuffer& password);
103 void CryptUpdateKeys(
char c);
104 DWORD CryptCRC32(DWORD l,
char c)
106 const z_crc_t* CRC_TABLE = zarch_get_crc_table();
107 return (DWORD)CRC_TABLE[(l ^ c) & 0xff] ^ (l >> 8);
109 void CryptEncode(
char &c)
111 char t = CryptDecryptByte();