Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

MNDecrypt.h

Go to the documentation of this file.
00001 /* Copyright (C) 2000 KOM/Darmstadt University of Technology 00002 * 00003 * You are allowed to use all other parts of the code under the following terms: 00004 * 00005 * For non-commercial use, code may be used in unmodified form provided 00006 * that this copyright notice and this permission notice appear in 00007 * supporting documentation. 00008 * 00009 * This software is provided "as is" and without any express or implied 00010 * warranties, including, without limitation, the implied warranty of 00011 * fitness for a particular purpose. 00012 * 00013 * The code may be subjected to the GNU General Public License, Version 2, 00014 * and re-distributed under the terms of this license. 00015 * As a special exception, permission is granted to link this code 00016 * with the Qt library and distribute executables, as long as you 00017 * follow the requirements of the GNU GPL in regard to all of the 00018 * software in the executable aside from Qt. 00019 * 00020 * Commercial use other than under the terms of the GNU General Public 00021 * License is allowed only after express negotiation of conditions 00022 * with the authors. 00023 */ 00024 #ifndef MNDECRYPT_H 00025 #define MNDECRYPT_H 00026 00027 #include <sys/types.h> 00028 #include <stdlib.h> 00029 #include "MNMsg.h" 00030 #include "rijndael.h" 00031 00032 class MNDecrypt { 00033 00034 protected: 00035 typedef u_int64_t u_int64; 00036 typedef u_int32_t u_int32; 00037 00038 public: 00039 00040 MNDecrypt(const char* filename); 00041 ~MNDecrypt(); 00042 00043 //Die Methode write für die Daten <data> der Entschlüsselungsmethode zu 00044 //<pos> gibt die absolute Position der Daten in der Datei an, <len> die 00045 //Länge der Daten in Byte. 00046 //Bei jedem write werden evtl. alte vorhandene Daten gelöscht. Daher 00047 //sollte möglichst auf jedes write bald ein read folgen. 00048 void write(const unsigned char* data, u_int64 pos, u_int64 len); 00049 00050 //Gibt in Bytes an wieviele Daten zum Lesen bereitstehen 00051 u_int64 bytesAvail() { return _dataLen; }; 00052 //Liest die entschlüsselten Daten aus der Klasse 00053 const unsigned char* read() { return _data; }; 00054 00055 bool isInitialized() { return _initialized; }; 00056 00057 protected: 00058 00059 unsigned char* _data; 00060 unsigned char* _decrypted; 00061 unsigned char _oddStuff[16]; 00062 u_int64 _dataLen; 00063 bool _dataLocal; 00064 00065 u_int32 _keyLen; 00066 u_int32 _buckets; 00067 u_int32 _bucketSize; 00068 00069 //Offset des ersten Ciphertextblocks 00070 u_int32 _offset; 00071 //Länge des Plaintextbereiches 00072 u_int32 _plainLen; 00073 //Länge des Ciphertextbereiches für einen Schlüssel 00074 u_int32 _cipherLen; 00075 00076 //Länge eines kompletten Cipherblocks für alle Schlüssel 00077 //_cipherBlockLen = _buckets * _bucketSize * _cipherLen 00078 u_int64 _cipherBlockLen; 00079 //Länge eines kompletten Blocks aus Plaintextbereich und Ciphertextbereich 00080 //_blockLen = _plainLen + _cipherBlockLen 00081 u_int64 _blockLen; 00082 00083 //Benutzer-ID für die Entschlüsselung 00084 u_int32* _userID; 00085 00086 //Die Rijndael-Objekte für die Entschlüsselung 00087 typedef Rijndael* rijndael_ptr; 00088 Rijndael** _decrypters; 00089 00090 //Zeigt hinter die letzte beim letzten Durchlauf bearbeitete Position 00091 u_int64 _lastPos; 00092 00093 bool _initialized; 00094 00095 //Gibt das offset relativ zum letzten Block zurück 00096 u_int64 relBlockPos(const u_int64 pos) { return (pos - _offset) % _blockLen; }; 00097 00098 //Gibt zurück ob eine Dateiposition im Offset liegt 00099 bool isOffset(const u_int64 pos) { return (pos < _offset); }; 00100 00101 //Gibt zurück ob eine Dateiposition Plaintext ist (nur außerhalb des Offsets) 00102 bool isPlain(const u_int64 pos) { return ( relBlockPos(pos) >= _cipherBlockLen ); }; 00103 00104 //Gibt zurück ob eine Dateiposition Ciphertext ist (nur außerhalb des Offsets) 00105 bool isCipher(const u_int64 pos) { return !isPlain(pos); }; 00106 00107 //Speicher reservieren mit Fehlermeldung 00108 void* safemalloc(size_t size) { 00109 void* ret = malloc(size); 00110 if (ret == NULL) MN_FATAL("malloc() failed"); 00111 return ret; }; 00112 void* safecalloc(size_t nmemb, size_t size) { 00113 void* ret = calloc(nmemb, size); 00114 if (ret == NULL) MN_FATAL("calloc() failed"); 00115 return ret; }; 00116 void* saferealloc(void* ptr, size_t size) { 00117 void* ret = realloc(ptr, size); 00118 if ( (ret == NULL) && (size != 0) ) MN_FATAL("realloc() failed"); 00119 return ret; }; 00120 00121 }; 00122 00123 #endif

Generated on Sun Mar 6 13:35:49 2005 for Komssys by doxygen 1.3.8