2 * Worldvisions Tunnel Vision Software:
3 * Copyright (C) 1997-2002 Net Integration Technologies, Inc.
5 * XOR cryptography abstractions.
6 * Could use this to implement short one time pads.
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()
26 bool WvXOREncoder::_encode(WvBuf
&inbuf
, WvBuf
&outbuf
, bool flush
)
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)
37 *out
++ = (*data
++) ^ key
[keyoff
++];
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);