34#define INCLUDECRYPTINGCODE_IFCRYPTALLOWED
36#define CRC32(ca, b) ((*(pcrc_32_tab+(((::i32)(ca) ^ (b)) & 0xff))) ^ ((ca) >> 8))
41static ::i32 decrypt_byte(::u32 * pkeys,
42#
if defined(WINDOWS) || defined(LINUX)
43 const z_crc_t * pcrc_32_tab
45 const uLongf * pcrc_32_tab
54 temp = ((::u32)(*(pkeys+2)) & 0xffff) | 2;
55 return (::i32)(((temp * (temp ^ 1)) >> 8) & 0xff);
61#if defined(WINDOWS) || defined(LINUX)
62static ::i32 update_keys(::u32 * pkeys,
const z_crc_t * pcrc_32_tab, ::i32 ca)
64static ::i32 update_keys(::u32 * pkeys,
const uLongf * pcrc_32_tab, ::i32 ca)
67 (*(pkeys+0)) = (::u32) CRC32((*(pkeys+0)), ca);
68 (*(pkeys+1)) += (*(pkeys+0)) & 0xff;
69 (*(pkeys+1)) = (*(pkeys+1)) * 134775813L + 1;
71 ::i32 keyshift = (::i32)((*(pkeys+1)) >> 24);
72 (*(pkeys+2)) = (::u32) CRC32((*(pkeys+2)), keyshift);
82#if defined(WINDOWS) || defined(LINUX)
83static void init_keys(const_char_pointer passwd, ::u32 * pkeys,
const z_crc_t * pcrc_32_tab)
85static void init_keys(const_char_pointer passwd, ::u32 * pkeys,
const uLongf * pcrc_32_tab)
88 *(pkeys+0) = 305419896L;
89 *(pkeys+1) = 591751049L;
90 *(pkeys+2) = 878082192L;
91 while (*passwd !=
'\0')
93 update_keys(pkeys,pcrc_32_tab,(::i32)*passwd);
98#define zdecode(pkeys,pcrc_32_tab,ca) \
99 (update_keys(pkeys,pcrc_32_tab,ca ^= decrypt_byte(pkeys,pcrc_32_tab)))
101#define zencode(pkeys,pcrc_32_tab,ca,t) \
102 (t=decrypt_byte(pkeys,pcrc_32_tab), update_keys(pkeys,pcrc_32_tab,ca), t^(ca))
104#ifdef INCLUDECRYPTINGCODE_IFCRYPTALLOWED
106#define RAND_HEAD_LEN 12
109# define ZCR_SEED2 3141592654UL
112static ::i32 crypthead(
113const_char_pointer passwd,
117#
if defined(WINDOWS) || defined(LINUX)
118const z_crc_t * pcrc_32_tab,
120const uLongf * pcrc_32_tab,
127 uchar header[RAND_HEAD_LEN-2];
128 static ::u32 calls = 0;
130 if (bufSize<RAND_HEAD_LEN)
139 srand((::u32)(
time(
nullptr) ^ ZCR_SEED2));
141 init_keys(passwd, pkeys, pcrc_32_tab);
142 for (n = 0; n < RAND_HEAD_LEN-2; n++)
144 ca = (rand() >> 7) & 0xff;
145 header[n] = (uchar)zencode(pkeys, pcrc_32_tab, ca, t);
148 init_keys(passwd, pkeys, pcrc_32_tab);
149 for (n = 0; n < RAND_HEAD_LEN-2; n++)
151 buf[n] = (uchar)zencode(pkeys, pcrc_32_tab, header[n], t);
153 buf[n++] = zencode(pkeys, pcrc_32_tab, (::i32)(crcForCrypting >> 16) & 0xff, t);
154 buf[n++] = zencode(pkeys, pcrc_32_tab, (::i32)(crcForCrypting >> 24) & 0xff, t);