7 #include "wvcountermode.h"
11 const void *_counter,
size_t _countersize) :
12 keycrypt(_keycrypt), counter(NULL)
18 WvCounterModeEncoder::~WvCounterModeEncoder()
28 counter =
new unsigned char[_countersize];
29 countersize = _countersize;
30 memcpy(counter, _counter, countersize);
36 memcpy(_counter, counter, countersize);
42 for (
size_t i = 0; i < countersize && ! ++counter[i]; ++i);
50 size_t avail = inbuf.
used();
51 size_t offset = outbuf.
used();
55 for (len = avail; len >= countersize; len -= countersize)
57 counterbuf.reset(counter, countersize);
58 success = keycrypt->
encode(counterbuf, outbuf,
true);
62 if (flush && len != 0 && success)
64 counterbuf.reset(counter, countersize);
65 success = keycrypt->
encode(counterbuf, outbuf,
true);
68 outbuf.
unalloc(countersize - len);
80 len = outbuf.optpeekable(offset);
81 unsigned char *dataout = outbuf.
mutablepeek(offset, len);
85 const unsigned char *datain = inbuf.
get(len);
98 *(dataout++) ^= *(datain++);