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)
- Форум Где я ошибся в примитивном коде? (2013)
- Форум Вопрос по наследованию шаблона в C++ (2013)
- Форум Укозатель на функцию член (2006)
- Форум GPL - можно ли? (2009)
- Форум Содержит ли данный код UB? Попытка №2 (2018)
- Форум Не разберусь что за ошибка. (2015)
- Форум доступ к шаблонным объектам фабрики??? (2006)
- Форум QTcpServer - слот для newConnection не вызывается (2016)