181 |
|
|
182 |
/* Generate a signature hash, using a combination of SHA1 and MD5 */ |
/* Generate a signature hash, using a combination of SHA1 and MD5 */ |
183 |
void |
void |
184 |
sec_sign(uint8 *signature, uint8 *session_key, int length, |
sec_sign(uint8 *signature, int siglen, uint8 *session_key, int keylen, |
185 |
uint8 *data, int datalen) |
uint8 *data, int datalen) |
186 |
{ |
{ |
187 |
uint8 shasig[20]; |
uint8 shasig[20]; |
193 |
buf_out_uint32(lenhdr, datalen); |
buf_out_uint32(lenhdr, datalen); |
194 |
|
|
195 |
SHA1_Init(&sha); |
SHA1_Init(&sha); |
196 |
SHA1_Update(&sha, session_key, rc4_key_len); |
SHA1_Update(&sha, session_key, keylen); |
197 |
SHA1_Update(&sha, pad_54, 40); |
SHA1_Update(&sha, pad_54, 40); |
198 |
SHA1_Update(&sha, lenhdr, 4); |
SHA1_Update(&sha, lenhdr, 4); |
199 |
SHA1_Update(&sha, data, datalen); |
SHA1_Update(&sha, data, datalen); |
200 |
SHA1_Final(shasig, &sha); |
SHA1_Final(shasig, &sha); |
201 |
|
|
202 |
MD5_Init(&md5); |
MD5_Init(&md5); |
203 |
MD5_Update(&md5, session_key, rc4_key_len); |
MD5_Update(&md5, session_key, keylen); |
204 |
MD5_Update(&md5, pad_92, 48); |
MD5_Update(&md5, pad_92, 48); |
205 |
MD5_Update(&md5, shasig, 20); |
MD5_Update(&md5, shasig, 20); |
206 |
MD5_Final(md5sig, &md5); |
MD5_Final(md5sig, &md5); |
207 |
|
|
208 |
memcpy(signature, md5sig, length); |
memcpy(signature, md5sig, siglen); |
209 |
} |
} |
210 |
|
|
211 |
/* Update an encryption key - similar to the signing process */ |
/* Update an encryption key - similar to the signing process */ |
358 |
hexdump(s->p + 8, datalen); |
hexdump(s->p + 8, datalen); |
359 |
#endif |
#endif |
360 |
|
|
361 |
sec_sign(s->p, sec_sign_key, 8, s->p + 8, datalen); |
sec_sign(s->p, 8, sec_sign_key, rc4_key_len, s->p + 8, datalen); |
362 |
sec_encrypt(s->p + 8, datalen); |
sec_encrypt(s->p + 8, datalen); |
363 |
} |
} |
364 |
|
|