IBR-DTNSuite  0.10
XORStream.cpp
Go to the documentation of this file.
1 /*
2  * XORStream.cpp
3  *
4  * Copyright (C) 2011 IBR, TU Braunschweig
5  *
6  * Written-by: Johannes Morgenroth <morgenroth@ibr.cs.tu-bs.de>
7  *
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  *
20  */
21 
23 
24 namespace ibrcommon
25 {
26  XORStream::XORStream(std::ostream &stream, const CipherMode mode, std::string key)
27  : CipherStream(stream, mode), _key(key), _key_pos(0)
28  {
29  }
30 
32  {
33  }
34 
35  void XORStream::encrypt(char *buf, const size_t size)
36  {
37  const char *keydata = _key.c_str();
38  const size_t keylength = _key.length();
39 
40  for (size_t i = 0; i < size; ++i)
41  {
42  buf[i] = buf[i] ^ keydata[_key_pos];
43  _key_pos++;
44  if (_key_pos > keylength) _key_pos = 0;
45  }
46  }
47 
48  void XORStream::decrypt(char *buf, const size_t size)
49  {
50  const char *keydata = _key.c_str();
51  const size_t keylength = _key.length();
52 
53  for (size_t i = 0; i < size; ++i)
54  {
55  buf[i] = buf[i] ^ keydata[_key_pos];
56  _key_pos++;
57  if (_key_pos > keylength) _key_pos = 0;
58  }
59  }
60 }