Skip to content

Commit 01bc47c

Browse files
PredelnikAJenbo
authored andcommitted
Clean up codec_encode.
1 parent bcacad7 commit 01bc47c

File tree

2 files changed

+30
-42
lines changed

2 files changed

+30
-42
lines changed

Source/codec.cpp

Lines changed: 29 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -87,52 +87,40 @@ DWORD codec_get_encoded_len(DWORD dwSrcBytes)
8787
return dwSrcBytes + 8;
8888
}
8989

90-
void codec_encode(void *pbSrcDst, int size, int size_64, char *pszPassword)
90+
void codec_encode(BYTE* pbSrcDst, DWORD size, int size_64, char *pszPassword)
9191
{
92-
char *v4; // esi
93-
char v5; // bl
94-
size_t v6; // edi
95-
signed int v7; // ecx
96-
char v9[128]; // [esp+8h] [ebp-ACh]
97-
char v10[20]; // [esp+88h] [ebp-2Ch]
98-
char dst[20]; // [esp+9Ch] [ebp-18h]
99-
size_t v12; // [esp+B0h] [ebp-4h]
92+
char buf[128];
93+
char tmp[20];
94+
char dst[20];
95+
DWORD chunk;
96+
WORD last_chunk;
10097

101-
v4 = (char *)pbSrcDst;
102-
v12 = size;
10398
if (size_64 != codec_get_encoded_len(size))
10499
app_fatal("Invalid encode parameters");
105100
codec_init_key(1, pszPassword);
106-
v5 = 0;
107-
if (v12) {
108-
do {
109-
v6 = v12;
110-
if (v12 >= 0x40)
111-
v6 = 64;
112-
memcpy(v9, v4, v6);
113-
if (v6 < 0x40)
114-
memset(&v9[v6], 0, 64 - v6);
115-
SHA1Result(0, dst);
116-
SHA1Calculate(0, v9, NULL);
117-
v7 = 0;
118-
do {
119-
v9[v7] ^= dst[v7 % 20];
120-
++v7;
121-
} while (v7 < 64);
122-
memset(dst, 0, sizeof(dst));
123-
memcpy(v4, v9, 0x40u);
124-
v4 += 64;
125-
v12 -= v6;
126-
} while (v12);
127-
v5 = v6;
101+
102+
last_chunk = 0;
103+
while (size != 0) {
104+
chunk = size < 64 ? size : 64;
105+
memcpy(buf, pbSrcDst, chunk);
106+
if (chunk < 64)
107+
memset(buf + chunk, 0, 64 - chunk);
108+
SHA1Result(0, dst);
109+
SHA1Calculate(0, buf, NULL);
110+
for (int j = 0; j < 64; j++) {
111+
buf[j] ^= dst[j % 20];
112+
}
113+
memset(dst, 0, sizeof(dst));
114+
memcpy(pbSrcDst, buf, 64);
115+
last_chunk = chunk;
116+
pbSrcDst += 64;
117+
size -= chunk;
128118
}
129-
memset(v9, 0, sizeof(v9));
130-
SHA1Result(0, v10);
131-
v4[4] = 0;
132-
*((_WORD *)v4 + 3) = 0;
133-
*(_DWORD *)v4 = *(_DWORD *)v10;
134-
v4[5] = v5;
119+
memset(buf, 0, sizeof(buf));
120+
SHA1Result(0, tmp);
121+
pbSrcDst[4] = 0;
122+
((WORD *)pbSrcDst)[3] = 0;
123+
((DWORD *)pbSrcDst)[0] = ((DWORD *)tmp)[0];
124+
pbSrcDst[5] = last_chunk;
135125
SHA1Clear();
136126
}
137-
// 4036BE: using guessed type char var_AC[128];
138-
// 4036BE: using guessed type char dst[20];

Source/codec.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@
55
int codec_decode(BYTE *pbSrcDst, DWORD size, char *pszPassword);
66
void codec_init_key(int unused, char *pszPassword);
77
DWORD codec_get_encoded_len(DWORD dwSrcBytes);
8-
void codec_encode(void *pbSrcDst, int size, int size_64, char *pszPassword);
8+
void codec_encode(BYTE* pbSrcDst, DWORD size, int size_64, char *pszPassword);
99

1010
#endif /* __CODEC_H__ */

0 commit comments

Comments
 (0)