1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
|
/*
* Copyright (C) 2001-2005 Jacek Sieka, arnetheduck on gmail point com
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#if !defined(AFX_CRYPTO_H__28F66860_0AD5_44AD_989C_BA4326C42F46__INCLUDED_)
#define AFX_CRYPTO_H__28F66860_0AD5_44AD_989C_BA4326C42F46__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "SettingsManager.h"
#include "Exception.h"
#include "Singleton.h"
#include "FastAlloc.h"
#include "version.h"
STANDARD_EXCEPTION(CryptoException);
class Node : public FastAlloc<Node> {
public:
// What's this? The only way (I've found out) to avoid a Internal Compiler Error! If this class is moved into
// CryptoManager along with the greater specialization, it generates a ICE on the greater class. The typedefs
// had to be removed in order to avoid template instatiation.
// typedef Node* Ptr;
// typedef list<Ptr> List;
// typedef List::iterator Iter;
int chr;
int weight;
Node* left;
Node* right;
Node(int aChr, int aWeight) : chr(aChr), weight(aWeight), left(NULL), right(NULL) { };
Node(Node* aLeft, Node* aRight) : chr(-1), weight(aLeft->weight + aRight->weight), left(aLeft), right(aRight) { };
~Node() {
delete left;
delete right;
}
bool operator <(const Node& rhs) const {
return weight<rhs.weight;
}
bool operator >(const Node& rhs) const {
return weight>rhs.weight;
}
bool operator <=(const Node& rhs) const {
return weight<=rhs.weight;
}
bool operator >=(const Node& rhs) const {
return weight>rhs.weight;
}
};
class File;
class FileException;
class CryptoManager : public Singleton<CryptoManager>
{
public:
string makeKey(const string& aLock);
const string& getLock() { return lock; };
const string& getPk() { return pk; };
bool isExtended(const string& aLock) { return strncmp(aLock.c_str(), "EXTENDEDPROTOCOL", 16) == 0; };
void decodeHuffman(const u_int8_t* /*is*/, string& /*os*/, const size_t /*len*/) throw(CryptoException);
void encodeHuffman(const string& is, string& os);
void decodeBZ2(const u_int8_t* is, size_t sz, string& os) throw(CryptoException);
private:
friend class Singleton<CryptoManager>;
CryptoManager() : lock("EXTENDEDPROTOCOLABCABCABCABCABCABC"), pk("DCPLUSPLUS" VERSIONSTRING "ABCABC") { };
virtual ~CryptoManager() { };
class Leaf : public FastAlloc<Leaf> {
public:
int chr;
int len;
Leaf(int aChr, int aLen) : chr(aChr), len(aLen) { };
Leaf() : chr(-1), len(-1) { };
};
class DecNode : public FastAlloc<DecNode> {
public:
int chr;
DecNode* left;
DecNode* right;
DecNode(int aChr) : chr(aChr), left(NULL), right(NULL) { };
DecNode(DecNode* aLeft, DecNode* aRight) : chr(-1), left(aLeft), right(aRight) { };
DecNode() : chr(-1), left(NULL), right(NULL) { };
~DecNode() {
delete left;
delete right;
}
};
const string lock;
const string pk;
int countChars(const string& aString, int* c, u_int8_t& csum);
void walkTree(list<Node*>& aTree);
void recurseLookup(vector<u_int8_t>* b, Node* node, vector<u_int8_t>& bytes);
void buildLookup(vector<u_int8_t>* b, Node* root);
string keySubst(const u_int8_t* aKey, size_t len, size_t n);
bool isExtra(u_int8_t b) {
return (b == 0 || b==5 || b==124 || b==96 || b==126 || b==36);
}
};
#endif // !defined(AFX_CRYPTO_H__28F66860_0AD5_44AD_989C_BA4326C42F46__INCLUDED_)
/**
* @file
* $Id: CryptoManager.h,v 1.2 2005/08/21 14:03:43 olof Exp $
*/
|