Make WvStreams compile with gcc 4.4.
[wvstreams.git] / crypto / wvxor.cc
blob99ddf9b99106b38629482dff56feabc5a27fb404
1 /*
2 * Worldvisions Tunnel Vision Software:
3 * Copyright (C) 1997-2002 Net Integration Technologies, Inc.
4 *
5 * XOR cryptography abstractions.
6 * Could use this to implement short one time pads.
7 */
8 #include "wvxor.h"
10 /***** WvXOREncoder *****/
12 WvXOREncoder::WvXOREncoder(const void *_key, size_t _keylen) :
13 keylen(_keylen), keyoff(0)
15 key = new unsigned char[keylen];
16 memcpy(key, _key, keylen);
20 WvXOREncoder::~WvXOREncoder()
22 deletev key;
26 bool WvXOREncoder::_encode(WvBuf &inbuf, WvBuf &outbuf, bool flush)
28 size_t len;
29 while ((len = inbuf.optgettable()) != 0)
31 const unsigned char *data = inbuf.get(len);
32 unsigned char *out = outbuf.alloc(len);
34 // FIXME: this loop is SLOW! (believe it or not)
35 while (len-- > 0)
37 *out++ = (*data++) ^ key[keyoff++];
38 keyoff %= keylen;
41 return true;
44 /***** WvXORStream *****/
46 WvXORStream::WvXORStream(WvStream *_cloned,
47 const void *_key, size_t _keysize) :
48 WvEncoderStream(_cloned)
50 readchain.append(new WvXOREncoder(_key, _keysize), true);
51 writechain.append(new WvXOREncoder(_key, _keysize), true);