Что-то я запутался немного с расшифровкой заголовков пакетов
за основу взял код из tiawps
Инициализация выглядит так:
Код:
BYTE digest[SHA_DIGEST_LENGTH];
ZeroMemory(&digest, SHA_DIGEST_LENGTH);
HMAC_CTX ctx;
HMAC_CTX_init(&ctx);
HMAC_Init_ex(&ctx, seed, SEED_KEY_SIZE, EVP_sha1(), NULL);
HMAC_Update(&ctx, m_sessionkey, SESSION_KEY_LENGTH);
uint32_t length = 0;
HMAC_Final(&ctx, digest, &length);
HMAC_CTX_cleanup(&ctx);
EVP_CIPHER_CTX_init(&m_key);
EVP_EncryptInit_ex(&m_key, EVP_rc4(), NULL, NULL, NULL);
EVP_CIPHER_CTX_set_key_length(&m_key, SHA_DIGEST_LENGTH);
EVP_EncryptInit_ex(&m_key, NULL, NULL, digest, NULL);
// drop first 1024 bytes
BYTE trash;
for(int i = 0; i < 1024; ++i)
{
DecryptData(&trash, 1);
}
Сама функция расшифровки так
Код:
void CCrypt::DecryptData(BYTE *data, int len)
{
int outlen = 0;
EVP_EncryptUpdate(&m_key, data, &outlen, data, len);
EVP_EncryptFinal_ex(&m_key, data, &outlen);
}
Расшифровываются нормально только первый серверный и первый клиентский пакет. Потом ерунда какая-то получается.
В самом tiawps разобраться по человечески не получается, там такой дикий код что можно его выставлять как пример к лозунгу
"как не нужно писать программы на С"
Подскажите что я упустил ?