@@ -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];
0 commit comments