class crypt_handler : public flow_handler { des_cblock key; des_key_schedule in1_sched; des_key_schedule in2_sched; des_key_schedule in3_sched; des_cblock in_ivec; int in_num; des_key_schedule out1_sched; des_key_schedule out2_sched; des_key_schedule out3_sched; des_cblock out_ivec; int out_num; public: crypt_handler(init_context& ctxt) : flow_handler(ctxt) { memset(&key, 0, sizeof key); des_set_odd_parity(&key); memcpy(&in_ivec, &key, sizeof in_ivec); memcpy(&out_ivec, &key, sizeof out_ivec); des_set_key(&in_ivec, in1_sched); des_set_key(&in_ivec, in2_sched); des_set_key(&in_ivec, in3_sched); des_set_key(&out_ivec, out1_sched); des_set_key(&out_ivec, out2_sched); des_set_key(&out_ivec, out3_sched); in_num = out_num = 0; } virtual bool avail(flow_handler *from, data d) { static char tmpbuf[65536*16]; assert(d.length() <= sizeof tmpbuf); des_ede3_cfb64_encrypt((unsigned char *)d.bits(), (unsigned char *)tmpbuf, d.length(), in1_sched, in2_sched, in3_sched, &in_ivec, &in_num, DES_DECRYPT); return get_upstream().avail(this, data(tmpbuf, d.length())); } virtual int write(data d) { static char tmpbuf[65536*16]; assert(d.length() <= sizeof tmpbuf); des_ede3_cfb64_encrypt((unsigned char *)d.bits(), (unsigned char *)tmpbuf, d.length(), out1_sched, out2_sched, out3_sched, &out_ivec, &out_num, DES_ENCRYPT); return downstream[0]->write(data(tmpbuf, d.length())); } DECLARE_HANDLER; };
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Какая-то фигня с виртуальными методами (2014)
- Форум backgroundcolor (2012)
- Форум Вопрос по наследованию шаблона в C++ (2013)
- Форум Где я ошибся в примитивном коде? (2013)
- Форум Укозатель на функцию член (2006)
- Форум GPL - можно ли? (2009)
- Форум Содержит ли данный код UB? Попытка №2 (2018)
- Форум Не разберусь что за ошибка. (2015)
- Форум доступ к шаблонным объектам фабрики??? (2006)
- Форум QTcpServer - слот для newConnection не вызывается (2016)