Release 0.4.3-3maemo with patches to disable menus/actions, add ScrollArea and fix...
[keepassx] / src / crypto / arcfour.cpp
1 /*
2   Copyright (C) 2003-2008 Dominik Reichl <dominik.reichl@t-online.de>
3
4   This program is free software; you can redistribute it and/or modify
5   it under the terms of the GNU General Public License as published by
6   the Free Software Foundation; either version 2 of the License, or
7   (at your option) any later version.
8
9   This program is distributed in the hope that it will be useful,
10   but WITHOUT ANY WARRANTY; without even the implied warranty of
11   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12   GNU General Public License for more details.
13
14   You should have received a copy of the GNU General Public License
15   along with this program; if not, write to the Free Software
16   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
17 */
18
19 #include "arcfour.h"
20
21 void CArcFour::setKey(quint8* key, uint length){
22         RawKey = key;
23         RawKeyLength = length;
24 }
25
26 void CArcFour::encrypt(const quint8* src, quint8* dst, uint length){
27         quint8 S[256];
28         quint32 w;
29         
30         for(w = 0; w < 256; ++w)
31                 S[w] = static_cast<quint8>(w); // Fill linearly
32
33         const quint8 btBufDep = static_cast<quint8>((length & 0xFF) << 1);
34
35         quint8 i = 0, j = 0, t;
36         quint32 k = 0;
37         for(w = 0; w < 256; ++w) // Key setup
38         {
39                 j += S[w] + RawKey[k] + btBufDep;
40
41                 t = S[i]; S[i] = S[j]; S[j] = t; // Swap entries
42
43                 ++k;
44                 if(k == RawKeyLength) k = 0;
45         }
46
47         i = 0; j = 0;
48         for(w = 0; w < length; ++w) // Encrypt PT
49         {
50                 ++i;
51                 j += S[i];
52
53                 t = S[i]; S[i] = S[j]; S[j] = t; // Swap entries
54
55                 t = S[i] + S[j]; // Generate random byte
56                 dst[w] = src[w] ^ S[t]; // XOR with PT
57         }
58 }