#include "Key.h" using namespace Framework::Encryption; // Inhalt der Bytes Klasse aus Schlüssel.h // Konstruktor Bytes::Bytes() : ReferenceCounter(), bytes( 0 ), del( 1 ), length( 0 ) {} Bytes::Bytes( int len ) : ReferenceCounter(), bytes( new char[ len ] ), del( 1 ), length( len ) {} Bytes::Bytes( const char *daten, int len ) : ReferenceCounter(), bytes( new char[ len ] ), del( 1 ), length( len ) { setBytes( daten ); } // Destruktor Bytes::~Bytes() { if( del ) delete[] bytes; } // nicht constant void Bytes::setBytes( const char *daten ) { if( !bytes || !daten ) return; char *end = bytes + length; for( char *c = bytes; c < end; c++, ++daten ) *c = *daten; } void Bytes::setBytes( const char *daten, int len ) { if( !daten || !len ) return; if( del ) delete[] bytes; del = 1; bytes = new char[ len ]; this->length = len; setBytes( daten ); } void Bytes::setBytesZ( char *daten, int len ) { if( del ) delete[] bytes; del = 0; bytes = daten; this->length = len; } void Bytes::fill( const char c ) { if( !bytes ) return; char *end = bytes + length; for( char *b = bytes; b < end; ++b ) *b = c; } void Bytes::fill( const char c, int len ) { if( !bytes ) bytes = new char[ len ]; len = len > this->length ? this->length : len; char *end = bytes + len; for( char *b = bytes; b < end; ++b ) *b = c; } void Bytes::fill( const char c, int beg, int end ) { if( beg >= length ) return; if( !bytes ) bytes = new char[ end - beg ]; end = end > this->length ? this->length : end; char *endB = bytes + end; for( char *b = bytes + beg; b < endB; ++b ) *b = c; } void Bytes::fill( const char *c, int cLen ) { if( !c || !cLen || !bytes ) return; char *endB = bytes + length; const char *endC = c + cLen; const char *d = c; for( char *b = bytes; b < endB; b++, d = d < endC - 1 ? d + 1 : c ) *b = *d; } void Bytes::set( const char c, int pos ) { if( !bytes || pos >= length ) return; bytes[ pos ] = c; } // constant int Bytes::getLength() const { return length; } char *Bytes::getBytes() const { return bytes; } // Inhalt der Schlüssel Klasse aus Schlüssel.h // Konstruktor Key::Key() : ReferenceCounter(), key( 0 ), length( 0 ), pos( 0 ) {} Key::Key( const char *s, int len ) : ReferenceCounter(), key( new unsigned char[ len ] ), length( len ), pos( 0 ) { for( int i = 0; i < len; ++i ) key[ i ] = s[ i ]; } // Destruktor Key::~Key() { delete[] key; } // nicht constant void Key::setPos( __int64 p ) { if( p < 0 ) p = 0; pos = (int)( p % length ); } void Key::setKey( const char *s, int len ) { delete[] key; key = new unsigned char[ len ]; for( int i = 0; i < len; ++i ) key[ i ] = s[ i ]; pos = 0; this->length = len; } void Key::codieren( Bytes *daten ) { if( !key || !length ) { daten->release(); return; } int dLen = daten->getLength(); char *bytes = daten->getBytes(); char *bEnd = bytes + dLen; for( char *c = bytes; c < bEnd; ++c ) { *c = (char)( *c + key[ pos ] ); ++pos; if( pos >= length ) pos = 0; } daten->release(); } void Key::decodieren( Bytes *daten ) { if( !key || !length ) { daten->release(); return; } int dLen = daten->getLength(); char *bytes = daten->getBytes(); char *bEnd = bytes + dLen; for( char *c = bytes; c < bEnd; ++c ) { *c = (char)( *c - key[ pos ] ); ++pos; if( pos >= length ) pos = 0; } daten->release(); }